Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

title: “参考答案:RAG Systems”

参考答案:RAG Systems

对应题目:

这不是标准唯一答案,而是“合格答案长什么样”。


1.

RAG 可以理解成:

  • 先去外部知识里找相关材料
  • 再把找到的材料一起给模型
  • 让模型基于这些材料回答

它和直接问大模型的区别是:

  • 直接问更依赖模型参数里原本记住的知识
  • RAG 更依赖当前检索到的上下文
  • 所以 RAG 更适合接私有知识、最新知识、特定文档

2.

最小 RAG 主链路通常是:

  1. 准备文档
  2. 把文档切块
  3. 为每个 chunk 建 embedding / index
  4. 用户提问
  5. 用 query 去检索相关 chunk
  6. 把检索结果拼进 prompt
  7. 让模型基于这些上下文回答

3.

因为生成阶段依赖检索阶段给的材料。

如果检索错了、漏了、噪声太大:

  • 模型就可能缺少关键事实
  • 或被无关内容干扰
  • 最后即使语言流畅,答案也可能不准

4.

chunk 太大:

  • 一次塞入的信息太杂
  • 检索粒度太粗
  • 容易检到包含目标但噪声很多的内容

chunk 太小:

  • 上下文被切碎
  • 检索到的片段可能缺少完整语义
  • 需要更多拼接才能回答

5.

retrieval 负责:

  • 找相关材料

generation 负责:

  • 基于材料组织成自然语言回答

6.

优先检查三层:

  1. 数据和 chunk 层
  2. retrieval 层
  3. prompt / answer synthesis 层

如果这三层都没问题,再去看模型选择和更复杂增强。


7.

当用户问题本身不够适合检索时,query rewriting 有帮助。

比如:

  • 问题太模糊
  • 关键词不完整
  • 用户表达方式和文档表达方式不一致

8.

因为初始检索经常会带来噪声。

filtering / reranking 的价值是:

  • 留下更相关内容
  • 去掉明显无关的 chunk
  • 提高最终上下文质量

9.

因为复杂问题不一定一次检索就能回答。

planner / executor 结构适合:

  • 先拆问题
  • 再按步骤查
  • 中间根据结果调整下一步

这更像多步搜索,而不是一次性问答。


10.

source attribution 的意义包括:

  • 方便人工核验
  • 增强用户信任
  • 帮助定位错误来源
  • 让系统更适合知识工作流

11.

rag-from-scratch 最适合帮你学:

  • 最小 RAG 主链路
  • notebook 式实验
  • 检索和生成是如何连起来的

12.

complex-RAG-guide 相比基础 RAG,多补了这些关键层:

  • cleaning
  • filtering
  • query rewriting
  • planner / re-planner
  • evaluation

13.

正确学法不是全看,而是:

  1. 按 technique 分类
  2. 每次只挑少量技术点
  3. 问“它在优化哪一层”
  4. 最后做对照实验

14.

deep-searcher 更像系统:

  • 支持更多 provider 组合
  • 有更完整配置层
  • 有数据加载、查询、CLI、服务化思路

而 notebook demo 更偏教学和原型验证。


15.

合格答案应该能画出:

  • 文档
  • chunk / index
  • query
  • retrieval
  • context assembly
  • generation
  • answer

16.

一个合格实验应该包含:

  • 固定问题集
  • 只改 top-k
  • 比较回答准确性、相关性、噪声
  • 最好记录 source 质量变化

17.

合理答案示例:

  • 文档切块
  • 检索
  • 带来源的回答生成

理由:

  • 这是最小可用系统
  • 先把主链路做稳,比一开始上 planner 更重要

18.

合理删法示例:

  • 先删 planner
  • 先删复杂 evaluation

原因:

  • v1 最重要的是跑通主链路
  • 复杂模块应该在问题真实存在后再引入