Lesson 09 练习
python lessons/09_engineering/code.py启动交互式问答助手,按练习要求操作。
练习 1:体验引用溯源
启动后问一个需要具体信息的问题,比如:
> 我工作4年能休几天年假?
观察:答案里应该有【材料N】标注。答案末尾的材料清单里有来源文件名吗?根据标注能定位到原文吗?
思考:引用溯源对一个"可信的问答系统"有多重要?如果没有溯源,用户怎么验证答案对错?
绋试 2:体验 embedding 缓存
第一次启动时,你会看到"新增/更新 X 个块"。退出后再次启动,观察输出。
观察:第二次启动应该显示"跳过 N 个未改动的文件,命中缓存"——不再调用 embedding API。
验证缓存失效:用编辑器随便改一下 data/sample_docs/employee_handbook.md(加个字),再启动,看那个文件是否被重新向量化了。
思考:缓存机制让"加载几百个文档"从几分钟变成几秒。这种"按文件 hash 增量更新"的思路,在哪些场景特别有价值?(提示:文档库频繁更新、CI/CD 部署)
练习 3:测试多文档跨主题问答
分别问这两个不同文档的问题:
> 年假有几天? (来自 employee_handbook.md)
> VPN 怎么连? (来自 it_policy.md)
> 报销和密码修改分别是多久? (跨两个文档)
观察:检索能正确从不同文件召回相关内容吗?来源标注能区分两个文件吗?
思考:多文档管理 + 来源标注,让 RAG 能服务"知识库"而非"单篇文档"。这是生产级 RAG 的基本能力。
练习 4:加入你自己的文档(最有价值)
把你自己的一个文档(产品手册、学习笔记、项目文档……)转成 md 放进 data/sample_docs/,重启程序,问关于你自己文档的问题。
思考:这就是你自己的第一个"私有知识问答助手"!想想还能怎么扩展——接入 PDF?做成网页界面?加上对话历史?
练习 5(进阶):加入混合检索
回顾 Lesson 06。这个助手目前只有向量检索。试着把 BM25 + RRF 混合检索加进来:
- 把
retrieve函数改成同时做向量检索和 BM25 检索 - 用 RRF 融合两路结果
用带编号的问题测试(比如"账号 ACME-001"),看混合检索是否提升了召回。
思考:这证明了前 8 课学的技术都是"积木",可以自由组合。一个完整的生产级 RAG,往往是这些技术的组合。
✅ 课程毕业检查
完成本课后,你应该能:
- 独立搭建一个能用的 RAG 问答助手(接入自己的文档)
- 理解 RAG 每个环节的原理和取舍
- 知道怎么用评估体系量化优化效果
- 清楚生产级 RAG 需要哪些工程化能力
- 具备继续探索 Agentic RAG、多模态 RAG 的基础
🎉 恭喜完成全部 9 课!你已经从零掌握了 RAG 的完整知识体系。