代码语言

知识点思维导图

29 个知识节点

Milvus(02) - Milvus RAG 实战:电子书离线建库与引用问答

读完后,你应能完成以下任务:

  • 绘制“Milvus(02) - Milvus RAG 实战:电子书离线建库与引用问答 / 项目目标和数据契约”的关键对象与数据流,解释“引用只从这些字段映射,不能让模型自由编页码。”,并用源码位置、日志或 Trace 标注证据。
  • 为“Milvus(02) - Milvus RAG 实战:电子书离线建库与引用问答 / 离线建库骨架”设计正常与异常输入,验证“离线任务要记录文档版本、每批状态与失败原因;”,输出首个偏差位置与回归测试结果。
  • 实现“Milvus(02) - Milvus RAG 实战:电子书离线建库与引用问答 / 在线问答链路”的最小代码或配置,检验“校验用户、租户、书籍与章节访问权限。 -> 保留问题原文,必要时生成语义改写。 -> 用同一 Embedding 模型编码 Query。 -> Milvus 在 ACL 过滤条件内召回子块。”,输出命令、结果与 Diff,并说明不适用边界。

更新日期:2026/08/11

一、项目目标和数据契约

用户问“作者怎样解释上下文压缩”时,系统要返回答案、书名、章节、页码和原文片段。电子书正文长、跨页、同一概念分散,推荐父子分块:章节/小节为父块,段落级子块生成向量;命中子块后回取父块或相邻段落。

每个子块保存:chunk_id/document_id/parent_id/book_title/heading_path/page_start/page_end/source_uri/text/tenant_id/acl/embedding_version。引用只从这些字段映射,不能让模型自由编页码。

二、离线建库骨架

离线任务要记录文档版本、每批状态与失败原因;重跑时按稳定主键 upsert,并删除新版本中不再存在的旧 Chunk。

三、在线问答链路

  1. 校验用户、租户、书籍与章节访问权限。
  2. 保留问题原文,必要时生成语义改写。
  3. 用同一 Embedding 模型编码 Query。
  4. Milvus 在 ACL 过滤条件内召回子块。
  5. parent_id 去重并补全父块/相邻块。
  6. Rerank 后在 Token 预算内选择证据。
  7. 模型结构化返回答案与 chunk_id 引用。
  8. 程序校验引用只来自 Context,再映射书名、章节和页码。

若书中没有证据,返回“无法从当前书籍确认”,不要用模型常识伪装成书中观点。

四、父块扩展与去重

五、电子书特有坏案例

  • 双栏 PDF 解析顺序错误,章节文字互相穿插。
  • 扫描页 OCR 把页码、脚注或公式识别错。
  • 章节标题未继承,短段落向量失去主题。
  • 整章直接向量化,细节问题无法精确定位。
  • 多个相邻子块重复命中,占满 Context。
  • 页码来自 PDF 物理页而读者使用印刷页,引用需同时说明。
  • 书籍更新后旧版索引和语义缓存没有失效。

六、验收指标

  • 目录/页码解析准确率、OCR 抽样准确率和空页率。
  • 章节级与段落级 Recall@K、MRR 和引用页准确率。
  • 父块扩展后的条件完整率与 Context 重复率。
  • 证据不足拒答准确率、答案忠实度与引用覆盖率。
  • 建库吞吐、索引对账、在线 P95、Token 和单问成本。

七、最小可运行验证

前两个 Python 代码块共同组成 rag_book.py。它们通过 embed_batchinsert_rowsget_parent 隔离了外部服务,因此可以先验证批处理、稳定主键和父块去重,再接入 Milvus。新建下面的 test_rag_book.py

运行命令和预期结果:

python -m unittest -v
test_build_index_keeps_metadata ... ok
test_parent_context_is_deduplicated ... ok

这个测试不声称验证了 Milvus 网络、Schema 或索引参数。接入真实 pymilvus 适配器后,还要在隔离测试 Collection 中验证向量维度、tenant_id/acl 过滤、重复 upsert、删除传播和索引切换;这些属于集成测试,不能由内存替身代替。

八、总结

  • 项目目标和数据契约:引用只从这些字段映射,不能让模型自由编页码。
  • 离线建库骨架:离线任务要记录文档版本、每批状态与失败原因;
  • 在线问答链路:校验用户、租户、书籍与章节访问权限。 -> 保留问题原文,必要时生成语义改写。 -> 用同一 Embedding 模型编码 Query。 -> Milvus 在 ACL 过滤条件内召回子块。
  • 电子书特有坏案例:双栏 PDF 解析顺序错误,章节文字互相穿插。
  • 验收指标:目录/页码解析准确率、OCR 抽样准确率和空页率。
  • 最小可运行验证:它们通过 embed_batch、insert_rows 和 get_parent 隔离了外部服务,因此可以先验证批处理、稳定主键和父块去重,再接入 Milvus。

学完自测

选择所有正确答案;提交后逐项核对判断依据。

1在“Milvus RAG 实战:电子书离线建库与引用问答”中,需要同时满足“项目目标和数据契约”与“离线建库骨架”。给定正文约束“引用只从这些字段映射,不能让模型自由编页码。”,哪些判断保持了原有处理机制?多选
2“Milvus RAG 实战:电子书离线建库与引用问答”出现偏差:“在“Milvus RAG 实战:电子书离线建库与引用问答 / 在线问答链路”中,即使不满足“3. 用同一 Embedding 模型编码 Query”,结果与副作用仍会保持不变。”已成为实际行为。围绕“在线问答链路”与“电子书特有坏案例”,哪些判断能定位被改变的职责或边界?多选
3评审“Milvus RAG 实战:电子书离线建库与引用问答”方案时,验收条件包含“目录/页码解析准确率、OCR 抽样准确率和空页率。”。关于“验收指标”与“最小可运行验证”的哪些决策符合正文机制?多选