Skip to content

RAG 链路

按“表示 → 流水线 → 工具化”的顺序学习,逐步把文档变成 Agent 可使用的证据来源。

文章重点
Embedding 基础向量、相似度和索引的工程直觉
RAG 完整链路分块、入库、检索和生成
把 RAG 做成 Agent 的工具让 Agent 自己决定何时检索

学习清单

下面按文章分组列出问题和详细参考答案。完成每组后,建议用自己的业务数据再跑一遍,确认不仅会背概念,也能定位失败原因。

Embedding 基础

  • 用 embedding 模型把几句话转成向量,确认它就是一串固定长度的数字

    • 预期结果:每条输入得到长度相同的数值数组,并能打印模型名、维度、是否归一化和请求耗时。

    • 验收标准:入库文本和查询文本使用同一模型、同一维度与预处理规则;你能解释向量不是关键词列表,也不能直接还原原文。

  • 对比 384 / 768 / 1536 / 3072 维向量的存储成本

    • 预期结果:按 条数 × 维度 × 每个数的字节数 估算原始存储,并分别考虑 float32、压缩、索引、metadata 和副本开销。

    • 验收标准:能说明 100 万条向量从 1536 维变成 3072 维时原始向量大致翻倍,但不能据此断言检索质量也翻倍;最终选择要用质量、延迟和成本评测支撑。

  • 算几对句子的 cosine similarity,验证“语义近 = 值大”

    • 预期结果:同义改写通常比无关句得分更高,并能处理向量归一化、零向量和分数方向。

    • 验收标准:手算或代码实现的公式与库结果一致,明确区分 cosine similarity、cosine distance 和 L2 distance,且不把不同模型的分数直接横向比较。

  • 找一个“语义搜索会漏、关键词能命中”的例子(如订单号、错误码、SKU)

    • 预期结果:构造包含精确编号、版本号或否定词的文本,观察纯向量检索可能把语义相近但编号错误的内容排在前面。

    • 验收标准:能说明 BM25、全文索引或 metadata 精确过滤如何补足该问题,并记录一个 hybrid search 更可靠的查询样例。

  • 把一批句子存进 Chroma / FAISS / pgvector,输入查询看返回顺序

    • 预期结果:检索接口返回 id、原文、相似度和元数据,结果按库约定的距离或相似度排序。

    • 验收标准:先用 brute-force 或小数据集建立基线,再确认向量维度、距离度量、top_k 和空集合行为都正确;若使用 FAISS,要自己补齐原文、元数据和持久化管理。

  • 给每条 chunk 加 sourcepageembedding_modeldimension 等元数据

    • 预期结果:每条记录能追溯原文位置、版本、租户或权限范围,并能按 metadata 过滤和展示引用。

    • 验收标准:换 embedding 模型或分块版本时可以区分旧数据,查询维度不匹配会在写入前被拒绝,答案错误时能根据 id 定位原文。

  • 用 K-Means 或 HDBSCAN 给 100 条文本聚类,人工检查每组主题是否一致

    • 预期结果:输出每条文本的 cluster、离群点或置信信息,并为每组查看代表样本和高频主题词。

    • 验收标准:能解释聚类是不预先给标签的自动分堆,区分 K-Means 需要 K 与 HDBSCAN 可识别噪声;silhouette 等指标只能辅助,最终要做人工抽检。

  • 用固定测试问题比较“纯向量检索”和“hybrid + rerank”的差异

    • 预期结果:对同一批问题记录 top_k 召回、正确证据排名、延迟、资源和最终答案变化,并分别覆盖同义表达与精确编号。

    • 验收标准:能说明 hybrid 负责合并 dense 与关键词候选,rerank 负责精排,不把“分数更高”直接当成答案更正确;若没有收益,要能指出数据和参数原因。

RAG 完整链路

  • 用一份自己的文档搭完整 RAG,跑通“入库 -> 检索 -> 生成”

    • 预期结果:文档经过加载、清洗、分块、向量化、入库后,用户问题能召回证据并生成带来源的回答。

    • 验收标准:日志能分别看到 chunk 数、embedding 状态、召回结果、最终 prompt 和引用;重启或重复执行不会产生不可控的重复数据。

  • 试三种分块大小,对比正确证据是否能进入 top-k

    • 预期结果:建立至少三组 chunk size/overlap 配置,记录正确证据的 Recall@k、排名、证据完整性、上下文 token 和延迟。

    • 验收标准:能解释某个尺寸为什么切断条件或引入噪声,并用一组真实问题而不是单个 demo 选择默认配置。

  • 给每个 chunk 加来源、页码、标题和版本信息

    • 预期结果:检索结果可回到原文件、页码、章节和生效版本,最终回答能展示稳定的引用标识。

    • 验收标准:更新文档后能区分新旧版本,删除文档后旧 chunk 不再被召回,且引用信息不会因为 chunk 重排而指向错误位置。

  • 问一个资料里没有的问题,验证模型是否说“资料中未提及”

    • 预期结果:空结果或低置信候选被识别为“缺少证据”,系统明确告知知识库未找到,而不是用常识补答案。

    • 验收标准:同时测试“确实没有资料”和“资料有但 query 写得差”两种情况,前者应拒答或请求补充,后者允许受控改写后重试并记录原因。

  • 加一个带例外条件的问题,检查答案有没有漏掉限制

    • 预期结果:检索和生成结果同时包含通用规则、例外、适用范围和时间条件,回答不会只摘走前半句。

    • 验收标准:在评测样例中把必须出现的条件和禁止出现的错误结论写出来,答案缺少例外时判为失败,即使主结论看起来正确。

  • 对比纯向量检索和混合检索在编号、版本、错误码问题上的差异

    • 预期结果:纯向量方案在语义改写上有优势,BM25/全文检索在订单号、错误码、版本号等精确词上更稳定,混合方案通过合并去重获得互补候选。

    • 验收标准:记录两种方法的命中率、排名和延迟,并说明分数归一化、候选合并和权限过滤的位置,不能只比较一次返回结果。

  • 加 reranker,观察 top-k 排序是否更贴近问题

    • 预期结果:先召回较大的候选集,再由 reranker 按“问题-证据”相关性重排,真正包含答案和限制的 chunk 更靠前。

    • 验收标准:比较 rerank 前后的 MRR/Recall@k、延迟和成本,确认 reranker 只处理候选集且异常时有降级路径。

  • 准备 20 条小评测集,每次改分块或 prompt 后回归一遍

    • 预期结果:评测集覆盖有答案、无答案、例外条件、精确编号、权限和过期版本等情况,每条有期望来源、必须包含和禁止包含项。

    • 验收标准:每次改动都能生成可比较的结果,发现“检索变好但答案变差”或“平均分上升但关键问题退化”时能定位到具体样例。

把 RAG 做成 Agent 的工具

  • 05-rag/rag-pipeline 的检索逻辑封装成 search_knowledge_base(query)

    • 预期结果:工具内部完成 query embedding、检索、过滤、排序和结果格式化,对 Agent 暴露稳定的输入输出接口。

    • 验收标准:同一 query 可重复得到可追溯的 hit,工具不直接生成最终答案,并能返回空结果、参数错误和依赖超时等结构化状态。

  • 给工具写清楚 description:什么时候该查,什么时候不要查

    • 预期结果:description 明确工具能力、触发条件、不要调用的场景、参数含义和结果边界,例如内部制度要查、闲聊和当前文本改写不必查。

    • 验收标准:用“该查 / 不该查 / 模糊问题”测试调用决策,记录误调和漏调,而不是只看工具能否成功返回数据。

  • 让工具返回 text / source / score / metadata,而不是直接返回最终答案

    • 预期结果:每条 hit 同时带证据文本、来源、检索分数、原始 id 和权限允许的元数据,模型可以据此组织回答和引用。

    • 验收标准:来源能回到原始 chunk,分数不会被当成真实性证明,返回内容经过截断和去重且不会把无权资料泄露给模型。

  • 接入 03-tool-use/tool-calling/tool-loop,让 Agent 自己决定何时检索

    • 预期结果:Agent 对闲聊、翻译、当前上下文总结不调用检索,对内部制度、产品细节和“根据资料”类问题调用检索,并能在结果不足时继续或停止。

    • 验收标准:assistant tool call、工具结果和 tool_call_id 配对正确,工具异常不会破坏循环,最大轮数和总预算生效。

  • 设计一组“该查 / 不该查 / 查不到 / 需要多轮查”的测试问题

    • 预期结果:测试集覆盖调用决策、query 改写、空结果、条件补查和最终拒答,每条都标注期望行为。

    • 验收标准:统计漏查、误查、无效重查和错误回答四类失败,并能判断问题来自 description、system prompt、检索质量还是停止策略。

  • 打印每次 tool call 的 query,观察模型是否会把用户问题改写成适合检索的表达

    • 预期结果:日志同时保留用户原话、会话上下文摘要、实际 query、filters、top_k 和返回 hit,能够看到代词是否被实体替换、限制条件是否保留。

    • 验收标准:精确编号、时间、版本等关键约束不能在改写中丢失,敏感信息需脱敏后再进入普通调试日志。

  • 给工具加空结果和异常返回,验证模型不会直接崩掉

    • 预期结果:空结果区分“确实没有资料”和“权限过滤后不可见”,异常包含类型、是否可重试和用户可理解的下一步。

    • 验收标准:可重试错误最多有限重试,不可重试错误会安全结束或转人工;模型不会把错误对象当作事实证据。

  • 加最大轮数和重复调用检测,防止 Agent 原地打转

    • 预期结果:系统对相同工具、相同参数、相同过滤条件的重复调用进行计数,并在无新证据时提前停止。

    • 验收标准:达到重复阈值、最大轮数、超时或 token 预算后均能返回可解释的中间状态,同时保留 trace 供复盘。

  • 在最终答案里附来源,验证模型没有编造资料中不存在的内容

    • 预期结果:答案中的关键结论能映射到返回 hit 的来源标识,资料未提及时明确说明缺少依据。

    • 验收标准:用包含答案、没有答案、证据冲突和恶意指令文本的样例回归,既检查引用存在,也检查引用是否真的支持对应结论。

持续学习,持续实践。