跳到主要内容

Agent Access API 技术设计

# Agent Access API 技术设计

修订记录

版本日期修订说明
v0.12026-05-01建立当前设计基线;延续 kunora-wiki 作为 llm-wiki 方案的既有产品封板和工程设计,不推倒重来。

1. 摘要

Agent Access API 是 kunora-wiki 面向 agent 和系统自动化的受控访问入口。它接收 AgentToolRequest,基于 AgentAccessConfig 和服务端 policy 解析 effective scope,执行受控工具:search、ask、get_page、get_context、create_feedback、create_improvement_task,并返回标准 AgentToolResultContextPack、反馈或任务创建结果。

Agent Access API 不允许 agent 直接写 publish/**,不绕过 ReviewBridge 或 AgentBridge 创建内容变更。所有写入类动作必须具备幂等键、去重键和审计记录;所有读取类动作必须受 scope、dataset、qaVisible 和 policy 约束。

2. 模块目标

  • 提供稳定 AgentToolRequest / AgentToolResult Public Contract。
  • 对 agent tool、scope、dataset、path、version 做服务端授权。
  • 为 agent 提供受控 search、ask、get_page、get_context 能力。
  • 通过内部 FeedbackBridge 创建去重的 feedback 和 improvement task,作为后续 AgentBridge 输入。
  • 生成完整 audit,记录 passed/failed/denied/partial。
  • 防止 agent 越权访问 working docs、config、state 或不可见内容。

3. 非目标

  • 不直接修改 publish/**
  • 不直接创建或合并内容 PR。
  • 不执行 RAGFlow 迭代改写;这属于 AgentBridge。
  • 不批准 agent 输出,也不判断事实正确性。
  • 不把 IssueTracker、RAGFlow、Meilisearch 的私有结构透传给 agent。
  • 不以 caller 声明的 scope 作为授权事实。

4. 上下文边界

Agent Access API 位于 L3 Access 层。它可以依赖 ConfigManager、WorkspaceStore read-only、Answer API、SearchIndexClient、IssueTracker 和 manifest reader;不能直接依赖 WorkspaceStore 写入能力写正式内容。

5. 输入与输出

5.1 输入

输入来源说明
AgentToolRequestagent/system工具调用请求。
AgentAccessConfigConfigManageragent policy、allowed tools、paths、datasets。
PageManifest / IndexManifeststate页面可见性和索引状态。
AnswerResultAnswer APIask 工具结果。
SearchResult[]SearchIndexClientsearch 工具结果。
IssueTracker resultGitHub Issues adapterFeedbackBridge 创建或复用 feedback/task 的结果。

5.2 输出

输出消费者说明
AgentToolResultagent/system标准工具响应。
ContextPackagent/system、AgentBridge授权后的上下文包。
FeedbackRequest resultAnswer API、前端、agent反馈创建/去重结果。
ImprovementTaskRequest resultAgentBridge、维护者改进任务创建/去重结果。
AuditEvent审计系统工具调用记录。
ErrorObject[]agent/system标准错误。

6. 依赖的 common 契约

契约用途
Calleragent 或 system 调用者。
Scope请求范围和 effective scope 输出。
AgentToolRequest工具输入。
AgentToolResult工具输出。
ContextPackget_context 输出。
AnswerRequest / AnswerResultask 工具调用 Answer API。
SearchResultsearch 工具输出。
FeedbackRequestcreate_feedback 输入。
ImprovementTaskRequestcreate_improvement_task 输入。
DedupeKey / IdempotencyKey去重和幂等。
AuditEvent / AuditRef审计。
ErrorObject错误输出。

FeedbackBridge 是 Agent Access API 内部能力,负责把 FeedbackRequestImprovementTaskRequest 转换为 IssueTracker payload、执行 dedupe/idempotency,并把结果返回为标准 AgentToolResult。GitHub Issues 的 API 差异仍由 IssueTracker adapter 隔离。

7. 工具集合

Tool类型说明写入
searchread在授权索引中搜索页面。
askread调用 Answer API。
get_pageread获取单页授权内容或摘要。
get_contextread获取多页 ContextPack。
create_feedbackwrite-controlled创建或复用反馈。是,写 Issue/反馈系统
create_improvement_taskwrite-controlled创建或复用改进任务。是,写 Issue/任务系统

任何未在 allowedTools 中声明的工具都返回 access.forbidden_tool

8. 授权与 effective scope

授权流程:

规则:

  • caller.type 必须为 agentsystem
  • requested scope 只能缩小 policy,不能扩大 policy。
  • includeWorkingDocs=true 必须同时满足 request 和 policy,默认 false。
  • allowedPaths 与 request paths 取交集,空集则拒绝。
  • dataset 必须在 policy allowedDatasets 内。
  • config/** 默认不可读,state/** 只允许读取 manifest 摘要,不允许读取敏感状态。

9. 工具语义

  • 输入:query、limit、scope、datasets。
  • 输出:SearchResult[]
  • 必须过滤 qaVisible=false、越权 path、未授权 dataset。
  • 索引 partial 时返回 status=partial 和错误/警告。

9.2 ask

  • 将 request 转换为 AnswerRequest
  • effective scope 不得被 Answer API 扩大。
  • 保留 AnswerResult 的 citation 和 noAnswerReason。
  • answer.no_answer 作为 passed 业务结果返回,除非调用方要求严格答案。

9.3 get_page

  • 输入:path 或 documentId。
  • 只允许读取 effective scope 内页面。
  • 默认返回内容摘要、frontmatter 和 citation,不返回未授权全文。
  • working docs 需要显式授权。

9.4 get_context

  • 输入:问题、paths、limit、context strategy。
  • 输出:ContextPack
  • ContextPack 中的 scope 是 effective scope,不是 caller 原始请求。
  • 必须包含 limits,避免 agent 获取过量内容。

9.5 create_feedback

  • 输入:FeedbackRequest
  • 必须有 dedupeKey
  • idempotencyKey 建议必填。
  • FeedbackBridge 负责查找或创建 GitHub Issue。
  • 重复反馈返回已有记录和 access.feedback_deduped info,不重复创建。

9.6 create_improvement_task

  • 输入:ImprovementTaskRequest
  • 必须有 goal、scope、dedupeKey。
  • evidence 推荐必填;如果来自 no-answer,可包含问题和相关 citation。
  • FeedbackBridge 负责查找或创建改进任务 Issue。
  • 创建的任务是 AgentBridge 的候选输入,不代表自动执行。

10. 幂等与去重

场景行为
同一写入请求重试idempotencyKey返回同一结果或 safe no-op。
同一 idempotencyKey 不同 payloadidempotencyKey返回 access.idempotency_conflict
重复反馈dedupeKey返回已有反馈或追加计数。
重复改进任务dedupeKey返回已有 issue/task。
读取工具重试request payload hash可重新执行,但 audit requestId 不复用除非上游传入。

dedupeKey 不包含 caller id,idempotencyKey 包含 caller id;两者不能混用。

11. 状态与持久化

Agent Access API 不写正式内容,但会写审计和受控任务系统。

数据位置owner
AuditEventaudit log / service logAgent Access API
feedbackIssueTracker / feedback storeAgent Access API FeedbackBridge via adapter
improvement taskIssueTrackerAgent Access API FeedbackBridge via adapter
idempotency recordAPI store/cacheAgent Access API
ContextPackresponse only,可短期缓存Agent Access API

MVP 可使用 GitHub Issues 作为 IssueTracker adapter,但 issue 私有结构不得进入公共契约。

12. 错误处理

错误码retryable场景处理
access.unauthorizedfalsecaller 未认证HTTP 401。
access.forbidden_toolfalsetool 不在 allowedToolsHTTP 403,审计 denied。
access.forbidden_scopefalsepath/version/scope 越权HTTP 403,审计 denied。
access.dataset_not_allowedfalsedataset 越权HTTP 403。
access.idempotency_conflictfalse同 key 不同 payload拒绝写入。
access.feedback_dedupedfalse重复反馈返回已有记录。
access.tool_faileddepends下游工具失败包装底层错误。
answer.no_answerfalseask 无答案passed 业务结果,可带 action。

HTTP partial result MVP 推荐 200 + status=partial,减少客户端兼容复杂度。

13. 安全与审计

必须审计:

  • 所有 tool request。
  • 所有 denied 请求。
  • 所有写入类请求及其 idempotency/dedupe 结果。
  • get_context 大范围读取。
  • includeWorkingDocs 请求。
  • 下游工具失败和 partial result。

安全规则:

  • 默认拒绝未声明工具、路径和 dataset。
  • 不允许 agent 读取 config/**
  • 不允许 agent 直接写 publish/** 或 main。
  • 返回内容必须经过 effective scope 过滤。
  • 错误详情不得泄漏 token、secret、未授权文档内容。

14. 测试要求

测试Fixture预期
forbidden scopefixtures/common/access/forbidden-scope.json返回 access.forbidden_scope,不调用下游。
feedback dedupefixtures/common/access/feedback-dedupe.json重复反馈返回 deduped。
no answer askfixtures/common/answer/no-answer.jsonask 返回 passed + noAnswerReason/actions。
citation resultfixtures/common/index/search-result-citation.jsonsearch/get_context 返回授权 citation。
idempotency conflictfuture access idempotency fixture同 key 不同 payload 拒绝。
unauthorized working docsfuture access working docs fixtureincludeWorkingDocs 未授权时拒绝。

模块验收标准:

  • 所有 tool 都有 schema contract test。
  • effective scope 不大于 requested scope 和 policy 交集。
  • 写入工具必须测试 idempotency 和 dedupe。
  • denied 请求必须产生 audit。
  • SearchResult/ContextPack 不包含越权页面。

15. 设计决策

决策说明取舍
Agent Access API 不直接写内容所有内容变更必须经过 AgentBridge 和 ReviewBridge。agent 需要多一步任务流程。
requested scope 只能缩小 policy防止 agent 自我授权。配置需要提前声明可用范围。
feedback/task 使用 dedupeKey减少无答案和低置信重复 issue。需要设计稳定 canonical payload。
ask 复用 Answer API保持人类和 agent 答案契约一致。Answer API 需支持系统/agent caller。

16. 待确认问题

  • get_page 默认返回全文还是摘要,MVP 是否按 token limit 截断。
  • IssueTracker 使用 GitHub Issues 时,label、assignee、milestone 是否属于 adapter contract。
  • create_improvement_task 是否强制 evidence,还是允许 no-answer 场景无 citation。
  • idempotency record 的持久化周期和清理策略。
对此页面有疑问?

问答功能将在后续接入 Answer API。当前可通过页面底部的反馈链接提交问题。

页面来源草稿
来源项目kunora-wiki
分支docs-publish
路径technology/components/kunora-wiki/development/modules/agent-access-api/README.md