Agent Engineering 课程阅读
首页/课程一 · RAG 手写/工程化:接近生产可用

在 GitHub 查看原文

本页目录

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 等进阶方向。