代码语言
知识点思维导图
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。
三、在线问答链路
- 校验用户、租户、书籍与章节访问权限。
- 保留问题原文,必要时生成语义改写。
- 用同一 Embedding 模型编码 Query。
- Milvus 在 ACL 过滤条件内召回子块。
- 按
parent_id去重并补全父块/相邻块。 - Rerank 后在 Token 预算内选择证据。
- 模型结构化返回答案与
chunk_id引用。 - 程序校验引用只来自 Context,再映射书名、章节和页码。
若书中没有证据,返回“无法从当前书籍确认”,不要用模型常识伪装成书中观点。
四、父块扩展与去重
五、电子书特有坏案例
- 双栏 PDF 解析顺序错误,章节文字互相穿插。
- 扫描页 OCR 把页码、脚注或公式识别错。
- 章节标题未继承,短段落向量失去主题。
- 整章直接向量化,细节问题无法精确定位。
- 多个相邻子块重复命中,占满 Context。
- 页码来自 PDF 物理页而读者使用印刷页,引用需同时说明。
- 书籍更新后旧版索引和语义缓存没有失效。
六、验收指标
- 目录/页码解析准确率、OCR 抽样准确率和空页率。
- 章节级与段落级 Recall@K、MRR 和引用页准确率。
- 父块扩展后的条件完整率与 Context 重复率。
- 证据不足拒答准确率、答案忠实度与引用覆盖率。
- 建库吞吐、索引对账、在线 P95、Token 和单问成本。
七、最小可运行验证
前两个 Python 代码块共同组成 rag_book.py。它们通过 embed_batch、insert_rows 和 get_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。
学完自测
选择所有正确答案;提交后逐项核对判断依据。