本页目录
Lesson 09 — 工程化:接近生产可用
本课目标:把前 8 课学的拼成一个接近生产可用的小系统——一个带引用溯源、缓存、流式输出、多文档支持的交互式问答助手。这是整个课程的"毕业作品"。
这课没有新原理,而是讲工程化:怎么让 RAG 从"能跑的 demo"变成"好用的应用"。
1. demo 和生产级 RAG 的差距
前 8 课你已经掌握了 RAG 的所有核心原理。但一个"能跑的 demo"和"生产级应用"之间,还有这些工程差距:
| demo | 生产级 |
|---|---|
| 硬编码几条知识 | 加载整个文档库(多文件、多格式) |
| 每次重新向量化 | 缓存 embedding,增量更新 |
| 一次性运行 | 交互式,持续对话 |
| 答案无来源 | 引用溯源,可追溯 |
| 等整段输出 | 流式输出,打字机效果 |
| 出错就崩 | 错误处理、降级 |
| 单机单用户 | 并发、权限、监控 |
本课聚焦前面几项(交互、引用、缓存、流式、多文档),让你做出一个自己日常真能用的问答助手。并发/权限/监控属于运维范畴,留给你后续探索。
2. 引用溯源的落地
Lesson 05 讲过引用溯源的概念,这课把它做扎实。关键设计:
检索时:记录每条文档的"来源元数据"(哪个文件、第几段)
拼 prompt 时:给每条材料编号【材料1】【材料2】
生成时:要求模型在答案中引用【材料N】
展示时:答案末尾列出"引用来源"清单,用户可核对
好处: - 用户能点开原文核对(可信度) - 出错时容易定位(是哪条材料带偏了模型) - 专业感(像搜索引擎的来源链接)
3. Embedding 缓存:省钱省时的关键
每次启动程序都把所有文档重新向量化,既慢又费钱。生产级 RAG 必须缓存:
首次运行:
文档 → 向量化 → 存 Chroma → 同时记录"哪些文档已处理"
后续运行:
检查哪些文档是新的/改过的 → 只向量化增量部分 → 复用已有向量
缓存策略: - 按文件路径 + 修改时间判断是否需要重新向量化 - 文档没变就直接用已有的 Chroma 集合,跳过向量化 - 这让"加载几百个文档"从几分钟变成几秒
🎯 核心认知:embedding 调用是 RAG 里最频繁的 API 花费来源。缓存是生产级 RAG 的必备优化。
4. 多文档管理
真实场景不会只有一个 employee_handbook.md。你需要:
- 扫描整个目录的所有 md/txt 文件
- 每个文件切块后向量化
- 用 metadata 记录"这条来自哪个文件"(供引用溯源用)
- 文件增删改时,增量更新向量库
本课 code.py 会加载 data/sample_docs/ 下所有 md 文件,自动切块、向量化、打来源标签。
5. 交互式 + 流式
把 RAG 包成一个 REPL(读取-求值-打印循环):
> 我工作4年能休几天年假?
正在检索...
📚 找到 2 条相关材料:
[1] (来自 employee_handbook.md) 年假:入职满1年...
[2] (来自 employee_handbook.md) 年假天数根据职级...
🤖 根据材料,入职满3年享有10天...【材料1】
> 再问一个问题...
流式输出让"第一个字"立刻出现,体感速度大幅提升(参考 Lesson 05)。
6. RAG + Agent:下一步的方向
RAG 解决了"基于文档问答"。但更强大的形态是 Agent——让大模型自主决定: - 什么时候需要检索(不是每个问题都要查文档) - 检索什么(可能要多次检索、逐步逼近) - 是否需要调用其他工具(计算器、数据库、API)
比如用户问"帮我算下我今年的年假余额",Agent 会: 1. 检索年假制度(RAG) 2. 调用 HR 系统查你的入职日期和已休天数(工具) 3. 计算余额(计算) 4. 综合回答
这就是 Agentic RAG,是 RAG 的进化方向。学完这 9 课,你已经具备了理解 Agent 的全部基础。
7. 本课代码会做什么
code.py 是一个交互式命令行问答助手,集成前 8 课所有技术:
- ✅ 加载
data/sample_docs/所有 md 文件(多文档) - ✅ 切块 + 向量化 + 存 Chroma(Lesson 04)
- ✅ embedding 缓存(不重复向量化)
- ✅ 向量检索(Lesson 03)
- ✅ 引用溯源(答案带【材料N】+ 来源文件,Lesson 05)
- ✅ 流式输出(Lesson 05)
- ✅ 交互式 REPL(持续问答,输 exit 退出)
- ✅ 防幻觉 prompt(Lesson 05)
8. 跑起来
python lessons/09_engineering/code.py
然后就可以持续提问了:
> 我工作4年能休几天年假?
> 报销截止日期是多久?
> 公司wifi密码是多少? ← 测试防幻觉,应该拒答
> exit ← 退出
🎓 课程完结
恭喜!学完这 9 课,你已经从零掌握了 RAG 的完整知识体系:
| 课 | 主题 | 核心认知 |
|---|---|---|
| 01 | 跑通第一个 RAG | RAG = 检索 + 生成 |
| 02 | Embedding | 向量 = 语义坐标 |
| 03 | 向量检索 | 检索 = 算距离 + 排序 |
| 04 | 切块 | 一个 chunk = 一个语义单元 |
| 05 | Prompt | "我不知道"比错答有价值 |
| 06 | 混合检索+Rerank | 向量不是万能的 |
| 07 | Query 改写 | 问题侧也要优化 |
| 08 | 评估 | 用数据说话,不凭感觉 |
| 09 | 工程化 | 把原理拼成产品 |
接下来你可以:接入自己的文档库做一个真正能用的问答助手,或继续探索 Agentic RAG、多模态 RAG 等进阶方向。