Index Adapter 技术设计
# Index Adapter 技术设计
修订记录
| 版本 | 日期 | 修订说明 |
|---|---|---|
| v0.1 | 2026-05-01 | 建立当前设计基线;延续 kunora-wiki 作为 llm-wiki 方案的既有产品封板和工程设计,不推倒重来。 |
1. 摘要
Index Adapter 负责把已发布、可索引的 kunora-wiki 文档转换为标准 IndexDocument,并同步到 RAGFlow、Meilisearch 等外部索引目标。RAGFlow 和 Meilisearch 的部署、常规配置和运维属于产品实施;进入 development 的部分是自研 adapter 契约、索引文档结构、幂等 upsert/delete、错误映射和 IndexManifest。
Index Adapter 不生成答案、不修改 Git 内容、不决定页面是否正式发布。它只消费 PageManifest、PublishManifest、DocumentRecord 和 IndexConfig,输出索引目标状态与可审计的 IndexManifest。
2. 模块目标
- 根据
IndexConfig选择 enabled index targets,包括 RAGFlow approved/working datasets 和 Meilisearch index。 - 从已发布页面生成标准
IndexDocument。 - 对 RAGFlow、Meilisearch 执行幂等 upsert/delete。
- 记录每个 target 的 indexed/partial/failed 状态。
- 生成
IndexManifest,供 Answer API、Agent Access API 和 drift check 使用。 - 把外部索引服务错误转换为标准
ErrorObject。
3. 非目标
- 不实现第二套 RAG 问答。
- 不把 RAGFlow 或 Meilisearch 的内部 ID 作为 LLM-WIKI 主 ID。
- 不修改
publish/**或state/page-manifest.json。 - 不决定页面质量状态,只消费
qaVisible和includeQualityStatus。 - 不直接创建 PR 或 check;失败状态交给 ReviewBridge。
- 不管理外部索引服务部署、容量、备份和权限产品化配置。
4. 上下文边界
Index Adapter 位于 L2 Publish/Index 层。它可以依赖 ConfigManager、WorkspaceStore、RagflowClient、SearchIndexClient,但不能依赖 Answer API 或 AgentBridge。
5. 输入与输出
5.1 输入
| 输入 | 来源 | 说明 |
|---|---|---|
IndexConfig | ConfigManager | 索引目标、启用状态、可索引质量状态。 |
RagflowConfig | ConfigManager | RAGFlow dataset 和连接引用。 |
PageManifest | WorkspaceStore / Display Adapter | 页面 URL、qaVisible、qualityStatus。 |
PublishManifest | DisplayBackend Adapter | 本次发布页面和 publishRunId。 |
DocumentRecord[] | WorkspaceStore | 文档内容、hash、source metadata。 |
previous IndexManifest | WorkspaceStore/state | delete/drift 对账。 |
5.2 输出
| 输出 | 消费者 | 说明 |
|---|---|---|
IndexDocument[] | RagflowClient、SearchIndexClient | 标准索引输入。 |
IndexManifest | Answer API、Agent Access API、ReviewBridge | 索引目标状态。 |
| target operation report | workflow、ReviewBridge | upsert/delete 成功失败明细。 |
SearchResult[] | Answer API、Agent Access API | 可选搜索查询契约。 |
ErrorObject[] | ReviewBridge、workflow | target 不可用、部分失败、schema 错误。 |
6. 依赖的 common 契约
| 契约 | 用途 |
|---|---|
IndexConfig | target 选择和过滤规则。 |
RagflowConfig | RAGFlow target 连接和 dataset。 |
PageManifest | qaVisible、URL、qualityStatus。 |
PublishManifest | 本次发布事实。 |
DocumentRecord | 文档内容和 hash。 |
IndexDocument | 外部索引 upsert 标准输入。 |
IndexManifest | 索引状态持久化。 |
SearchResult | 查询结果标准化。 |
RagflowClient / SearchIndexClient | 外部目标 adapter。 |
ErrorObject | 错误与降级输出。 |
7. 索引选择规则
文档进入索引必须同时满足:
- 页面存在于当前
PageManifest。 - 页面在当前
PublishManifest中属于已发布或可见状态。 qaVisible=true。qualityStatus属于 target 的includeQualityStatus。publishPath和siteUrl合法。- 文档内容可读取且
contentHash与 manifest 一致。
不满足条件的文档不得 upsert;如果上一版索引中存在,需要根据 delete 策略生成 delete 操作。
7.1 RAGFlow Dataset 分层
MVP 固定使用两个 RAGFlow dataset 语义:
| Dataset | 用途 | 内容来源 | 消费者 |
|---|---|---|---|
llm-wiki-approved | 正式问答事实链 | 已审批、已发布或可发布、qaVisible=true 的正式文档 | Answer API、Agent Access API 的正式 ask。 |
llm-wiki-working | 智能体迭代上下文 | 允许迭代的工作区文档、待整理内容或冲突处理上下文 | AgentBridge、受控 Agent Access 工具。 |
规则:
- 正式问答默认只能访问
llm-wiki-approved。 - AgentBridge 可以通过授权 scope 使用
llm-wiki-working,但输出仍必须回到 Release PR。 - 两个 dataset 必须分别记录 target status,不能用 working dataset 结果替代 approved dataset。
llm-wiki-working失败只阻断对应迭代任务,不影响正式问答。
8. 核心流程
8.1 构建索引计划
8.2 执行索引计划
流程要求:
- 各 target 独立执行,单个 target 失败不回滚其他 target。
- 同一 target 内部分失败必须记录到
IndexManifest。 - Git 内容和 publish manifest 不因索引失败而回滚。
- target 不可用时 Answer API 应能根据
IndexManifest降级。