工作坊 02:RAG 课程问答小项目
关联模块:模块 4:RAG 与知识增强
工作坊 02:RAG 课程问答小项目
项目定位
这是课程的第一个实战工作坊。
目标不是做一个复杂系统,而是让学习者把 RAG 的核心链路跑通:整理资料、切分文档、检索片段、组装上下文、生成回答、标注引用、评估错误。
适合人群
- 已学完模块 1、模块 3、模块 4.1、4.2、4.3 的学习者。
- 想理解 AI 知识库问答系统如何落地的产品、内容、教育和开发学习者。
- 有基础编程能力的学习者可以做代码实现;非编程学习者可以完成产品设计版。
项目目标
完成一个“基于课程资料的问答助手”原型。
它应该能:
- 接收用户关于课程内容的问题。
- 从课程资料中找到相关片段。
- 基于片段生成回答。
- 标注答案来源。
- 在资料不足时承认不知道。
- 记录失败案例,进入优化清单。
项目范围
第一版只处理
- Markdown 课程讲义。
- 单轮问答。
- 文本输入和文本输出。
- 课程资料内部检索。
- 基础引用。
第一版不处理
- 多轮复杂对话。
- 用户权限系统。
- PDF/OCR。
- 图片、音频、视频。
- 自动发布或外部动作。
- 高并发和生产部署。
先把骨架跑通。第一版就想做成企业级平台,通常会收获企业级头痛。
输入资料
建议使用:
LLMCourse/01_foundations/LLMCourse/02_core_principles/LLMCourse/03_prompting_collaboration/LLMCourse/04_rag_knowledge/
第一版不要把整个仓库都丢进去。
项目流程
Step 1:定义问题集
先准备 20 个测试问题。
建议类型:
| 类型 | 示例 |
|---|---|
| 概念解释 | LLM 到底是什么? |
| 对比问题 | RAG 和微调有什么区别? |
| 应用问题 | 什么时候需要向量检索? |
| 边界问题 | RAG 能彻底解决幻觉吗? |
| 课程导航 | 我应该先学 Prompt 还是 RAG? |
| 资料不足 | 课程有没有讲某个未覆盖工具? |
Step 2:整理文档
确定哪些文件进入知识库。
记录:
- 文件路径
- 模块
- 单元
- 标题
- 难度
- 是否进入第一版
Step 3:设计 Chunk
推荐第一版按标题结构切分:
- 保留一级标题和二级标题。
- 每个 Chunk 尽量围绕一个小主题。
- 不拆断列表和代码块。
- 每个 Chunk 附带来源路径和小标题。
Step 4:建立检索
可选实现方式:
产品设计版
不写代码,手动模拟:
- 对每个问题人工找 3 个相关片段。
- 把片段交给 LLM。
- 要求 LLM 基于片段回答。
- 检查回答是否引用正确。
代码原型版
实现最小链路:
- 读取 Markdown。
- 切分 Chunk。
- 生成 Embedding。
- 做相似度检索。
- 返回 Top-k。
- 组装 Prompt。
- 调用模型生成回答。
Step 5:设计回答 Prompt
基础模板:
你是 LLM 与 AI 课程的学习助手。
请只根据以下课程资料回答用户问题。
如果资料不足,请明确说“课程资料中没有提供足够信息”。
回答后列出引用来源。
课程资料:
{{retrieved_chunks}}
用户问题:
{{question}}
输出格式:
1. 简明回答
2. 关键解释
3. 引用来源
4. 如果需要,给出后续学习建议
Step 6:评估回答
每个问题都按以下维度打分:
| 维度 | 说明 | 分数 |
|---|---|---|
| 相关性 | 是否回答了问题 | 1-5 |
| 基于资料 | 是否真的使用检索片段 | 1-5 |
| 准确性 | 是否有事实错误 | 1-5 |
| 引用质量 | 引用是否存在并支持结论 | 1-5 |
| 表达清晰 | 是否适合目标学习者 | 1-5 |
| 不确定性处理 | 资料不足时是否承认 | 1-5 |
Step 7:记录失败案例
每次失败都记录:
- 用户问题
- 检索结果
- 模型回答
- 错误类型
- 可能原因
- 修复建议
错误类型:
- 没检索到正确资料。
- 检索到资料但排序太低。
- 资料正确但模型误读。
- 回答没有引用。
- 引用不支持结论。
- 资料不足却强行回答。
交付物
产品设计版交付物
project-plan.md:项目方案。test-questions.md:20 个测试问题。chunk-design.md:切分策略。prompt-template.md:回答 Prompt。evaluation-report.md:评估报告。failure-log.md:失败案例。
代码原型版交付物
- 文档读取脚本。
- Chunk 切分脚本。
- 检索实现。
- 问答入口。
- 评估样例。
- README 使用说明。
评分 Rubric
| 维度 | 优秀 | 合格 | 需改进 |
|---|---|---|---|
| 问题集 | 覆盖概念、对比、应用、边界和资料不足 | 覆盖 3 类以上问题 | 问题单一 |
| Chunk 设计 | 尊重文档结构,来源清楚 | 基本可检索 | 切分随意 |
| 检索质量 | 多数问题能找回关键资料 | 一半以上可用 | 经常找错 |
| 回答质量 | 准确、清楚、有引用 | 基本回答问题 | 幻觉明显 |
| 错误分析 | 能定位失败环节 | 有失败记录 | 只看最终答案 |
| 产品意识 | 有边界、风险和迭代计划 | 有基本流程 | 只追求 Demo |
延伸挑战
完成基础版后,可以继续做:
- 增加关键词 + 向量混合检索。
- 增加重排。
- 增加多轮对话查询改写。
- 增加课程模块过滤。
- 增加引用点击跳转。
- 增加失败案例可视化。
与课程模块的关系
本项目对应:
4.1 为什么需要 RAG4.2 向量检索基础4.3 RAG 系统设计9.1 幻觉与可靠性5.2 Function Calling / Tool Use
Takeaway
RAG 小项目的重点不是做一个看起来很酷的聊天框,而是亲手经历“资料怎么进来、问题怎么检索、回答怎么生成、错误怎么定位”的完整链路。跑通这条链,才真正理解 RAG。