跳到主要内容

Answer API 技术设计

# Answer API 技术设计

修订记录

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

1. 摘要

Answer API 是 kunora-wiki 对用户和系统提供标准问答能力的自研入口。它接收 AnswerRequest,校验 caller、scope 和 dataset 权限,调用 RAGFlow 或索引查询能力获取候选上下文,把外部结果转换为标准 AnswerResultCitationSuggestedAction 和审计记录。

Answer API 不实现第二套 RAG,不直接修改知识库内容,不在无证据或索引不可用时编造答案。知识库无法回答时,它返回 answer.no_answer、原因和反馈/改进动作,而不是伪造低质量答案。

2. 模块目标

  • 提供稳定 AnswerRequest / AnswerResult Public Contract。
  • 校验请求 schema、caller、scope、dataset 和 session 权限。
  • 查询 RAGFlow 或标准搜索索引,并标准化 citation。
  • requireCitations=true 时保证答案有可回跳证据。
  • 对无答案、低置信度、索引不可用提供可操作 actions。
  • 产生 request-level audit,便于追踪调用来源、scope 和结果。

3. 非目标

  • 不直接写 publish/** 或创建 PR。
  • 不直接调用 AgentBridge 自动修文档。
  • 不绕过 Agent Access API 创建反馈或改进任务;只返回建议动作或调用受控入口。
  • 不把 RAGFlow chunk id 作为主引用。
  • 不返回未授权 scope 中的内容。
  • 不把 RAGFlow 私有响应结构暴露给客户端。

4. 上下文边界

Answer API 位于 L3 Access 层。它可以依赖 ConfigManager、manifest reader、RagflowClient、SearchIndexClient,但不能依赖 AgentBridge。

5. 输入与输出

5.1 输入

输入来源说明
AnswerRequest前端、系统、Agent Access API标准问答请求。
ConfigBundle / ModelPolicyConfigManagerdataset、模型策略、scope 策略。
PageManifestWorkspaceStore / Display Adapter引用回跳、页面可见性。
IndexManifestIndex Adapter可用索引目标和滞后状态。
RAGFlow answer/search resultRagflowClient外部 RAG 结果。
SearchResultSearchIndexClient检索结果。

5.2 输出

输出消费者说明
AnswerResult前端、系统、Agent Access API标准答案或无答案结果。
Citation[]客户端、审计、反馈可回跳引用。
SuggestedAction[]前端、Agent Access APIcreate_feedback、create_improvement_task 等建议。
AuditEvent / AuditRef审计系统、日志调用记录。
ErrorObject[]客户端、日志标准错误。

6. 依赖的 common 契约

契约用途
Caller调用者身份。
Scope请求范围和版本。
AnswerRequestAPI 输入。
AnswerResultAPI 输出。
Citation引用结构。
SearchResult索引检索结果。
PageManifestcitation URL 和授权过滤。
IndexManifest索引可用性判断。
FeedbackRequest / ImprovementTaskRequestSuggestedAction payload 参考。
AuditEvent / AuditRef审计。
ErrorObject错误输出。

7. 核心流程

流程要求:

  • 请求进入时必须生成或接受可信 requestId
  • caller 声明的 scope 只是请求,实际 scope 必须由服务端 policy 收敛。
  • 检索结果必须经过 PageManifest 过滤,排除不可见或越权页面。
  • requireCitations=true 且无法生成引用时,不返回确定答案。
  • RAGFlow 不可用时返回错误或降级结果,不编造答案。

8. 权限与 scope

校验规则
caller必须可识别;匿名 caller 只能访问公开 scope。
paths结果 path 必须落在 effective scope 内。
datasets请求 dataset 必须属于 policy 允许集合。
versionMVP 默认只允许 mainworking 需要显式授权。
includeWorkingDocs默认 false,true 时必须由 policy 允许。
sessionssession scope 不能扩大首次请求 scope。

拒绝时返回 answer.forbidden_scopeanswer.dataset_not_allowedanswer.session_forbidden

9. 答案生成与 citation 规则

Answer API 不直接信任外部 RAG 的引用,需要标准化为 Citation

  • citation 必须包含 path
  • 推荐包含 documentIdurl
  • url 来自 PageManifest,不从外部 RAG 私有字段直接透传。
  • externalChunkId 可保存,但不能作为唯一引用。
  • 引用页面必须满足 effective scope 和 qaVisible。
  • citation 去重按 documentId + path + anchor + externalChunkId。

置信度规则:

条件confidence
有足够 citation,答案覆盖问题highmedium
检索结果弱、引用少或答案部分覆盖low
无可用 citation 且 requireCitations=true不返回确定答案,使用 noAnswerReason

10. 无答案与建议动作

answer.no_answer 是有效业务结果,通常 HTTP 200。

场景noAnswerReasonSuggestedAction
检索无结果search_no_resultcreate_feedbackcreate_improvement_task
citation 不足citation_missingcreate_feedback
索引不可用index_unavailableretry_latercreate_feedback
scope 过窄scope_too_narrow提示扩大 scope,但不自动扩大。
低置信度low_confidencecreate_feedback

SuggestedAction 只表达可执行建议;真正写入反馈或任务必须走 Agent Access API 或受控 backend。

11. API 语义

接口输入输出说明
answerAnswerRequestAnswerResult标准问答入口。
validateAnswerRequestraw requestvalidation resultschema 和基础字段校验。
resolveAnswerScopecaller、scopeeffective scope服务端授权后 scope。
normalizeCitationsexternal result、PageManifestCitation[]引用标准化。
buildNoAnswerResultreason、contextAnswerResult无答案标准响应。

HTTP 映射:

场景HTTP
正常答案200
无答案200
partial result200 + status=partial 或 confidence low
schema 错误400
unauthorized401
forbidden scope/dataset403
RAGFlow/索引不可用且无降级503

12. 状态与持久化

Answer API 默认无长期业务状态。

数据是否持久化说明
request/session audit用于追踪调用和拒绝。
AnswerResult可选可由调用方保存,不作为事实源。
session state可选仅保存 scope、history 摘要和过期时间。
feedback/task由 Agent Access API 或 IssueTracker 创建。

13. 错误处理

错误码retryable场景处理
answer.invalid_requestfalseschema 或问题为空HTTP 400。
answer.forbidden_scopefalsepath/version 越权HTTP 403。
answer.dataset_not_allowedfalsedataset 越权HTTP 403。
answer.ragflow_unavailabletrueRAGFlow 不可用不生成虚假答案。
answer.no_answerfalse知识库无法回答HTTP 200,带 noAnswerReason。
answer.citation_missingfalserequireCitations 但无引用返回无答案或低置信。
answer.session_forbiddenfalsesession 扩大 scopeHTTP 403。
answer.session_expiredfalsesession 过期要求新建 session。

14. 安全与审计

以下事件必须审计:

  • 所有 answer 请求。
  • scope/dataset/session 拒绝。
  • 返回无答案和低置信度。
  • RAGFlow 或索引不可用。
  • citation 被过滤或删除。

审计记录不得包含 token、完整私有配置或未授权文档全文。

15. 测试要求

测试Fixture预期
no answerfixtures/common/answer/no-answer.json返回 answer.no_answer,HTTP 200。
citation path anchorfixtures/common/answer/citation-path-anchor.jsoncitation 可回跳到展示页面。
search citationfixtures/common/index/search-result-citation.jsonSearchResult 转 Citation。
forbidden scopefixtures/common/access/forbidden-scope.json返回 forbidden,不调用下游。
index partialfixtures/common/manifest/index-manifest.partial.json标记降级或低置信。
RAGFlow unavailablefuture answer ragflow unavailable fixture不生成虚假答案。

模块验收标准:

  • AnswerRequestAnswerResult 有 schema contract test。
  • requireCitations=true 时无 citation 不返回确定答案。
  • 越权 path/dataset 不出现在答案或 citation 中。
  • RAGFlow 私有结构不进入 API response。
  • no-answer actions 可被 Agent Access API 消费。

16. 设计决策

决策说明取舍
无答案返回 HTTP 200无答案是有效业务结果,不是传输错误。客户端必须读取 noAnswerReason。
Answer API 不直接创建任务写入动作统一走 Agent Access API。前端需要二次调用或后端受控转发。
Citation 必须标准化保证引用可回跳和可审计。需要维护 PageManifest 映射。
不依赖 RAGFlow 私有 ID保持跨索引目标稳定。需要额外 documentId/path 映射。

17. 待确认问题

  • 多轮 session 的历史是否纳入 AnswerResult audit,还是只保存摘要。
  • partial result 是否需要单独状态字段,还是用 confidence/errors 表达。
  • Answer API 是否允许直接调用 create_feedback,还是严格只返回 SuggestedAction。
  • working version 问答是否进入 MVP。
对此页面有疑问?

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

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