Skip to content

Embedding:把资料变成可检索的坐标

今天先记住

Embedding(向量表示)不是“高级搜索”的代名词。它在 Agent 系统里的作用,是把文本、代码片段、历史记录这类资料压成一组数字坐标,让系统能按语义相近程度找回材料。它不负责判断答案对不对,只负责帮 RAG 更可能拿到相关证据。

它在大地图里的位置

还是这条链路:

txt
用户目标
  -> 上下文 / 记忆
  -> 规划 / 决策
  -> 工具调用 / 外部系统
  -> 执行 / 观察结果
  -> 评估 / 修正
  -> 最终输出

昨天讲 RAG:Agent 回答前先查资料。今天往 RAG 里面看一层:Embedding 是“怎么查”的一种基础设施。用户问题先被转成向量,文档片段也提前转成向量;两边距离近,就被当作候选材料取回来。

所以它处在“上下文进入模型之前”。它不是模型的记忆本身,而是记忆和资料库的索引方式之一。

它到底是什么

可以把 Embedding 想成语义坐标。比如“工具调用失败怎么恢复”和“API 返回 500 后重试”字面不同,但语义接近,向量距离可能更近;而“工具调用”和“五金工具”字面都带工具,语义却可能较远。

工程上通常会做四步:切分文档、为每段生成向量、存进向量数据库或本地索引、查询时用问题向量找相近片段。真正影响效果的,不只是模型,也包括怎么切块、存哪些元数据、取回多少段、是否重排。

为什么 Agent 里会用到它

Agent 经常面对“用户说法”和“资料写法”不一致的问题。用户问“今天这篇课别重复”,资料里可能写的是 2026-07-19.md、frontmatter title、课程框架里的 Topic Path。纯关键词搜索很容易漏掉;Embedding 能把相近意思拉到一起。

但它也会犯具体错误:把语义相似但时间过期的材料取回来,把相似概念误当成同一概念,或者因为切块太碎丢掉关键约束。因此 Embedding 只解决“候选材料怎么找”,不解决“候选材料能不能直接信”。

怎么判断它有没有用

如果用户问题和资料措辞经常不一样,Embedding 很有用。

如果你只是在查精确文件名、订单号、函数名,关键词或结构化查询通常更稳。

如果资料有时间、权限、来源差异,向量命中后还必须用元数据过滤;不能只按相似度排序。

如果系统答错时你看不到“命中了哪些片段”,Embedding 流程就不可调试。至少要记录 query、命中文档、片段范围和分数。

最近冒出来的词

LangChain 在 2026-07-16 的 langchain==1.3.14 release 里提到 ToolErrorMiddleware。这是工具调用错误处理相关的中间件,不是一个新理论;它提醒我们,Agent 工程正在把“调用失败后怎么办”从临时 prompt 变成运行时能力。它和今天的 Embedding 不在同一层:Embedding 负责找资料,错误中间件负责工具执行失败后的状态处理。

来源提示:GitHub Releases,langchain-ai/langchain,2026-07-16。

一个小例子

txt
Input:
用户问:“之前讲过 Agent 的记忆了吗?今天别重复。”

Process:
1. 系统把问题转成向量。
2. 在 ai-agent 文章索引里检索相近片段。
3. 命中“短期状态和长期记忆”和“RAG”两篇。
4. 再用文件日期和标题判断:今天应继续讲 RAG 里的检索基础,而不是重复记忆。

Output:
选题变成“Embedding”;
上下文里只放入相关旧课标题和框架要求;
新文章解释“语义检索如何服务 RAG”。

这个例子可以拿来判断真实系统:如果它只说“我查过了”,但不能列出命中片段和为什么命中,你就很难知道它是在检索,还是在编一个检索过程。

常见误区

  1. 以为用了向量数据库就等于有 RAG。没有好的切块、过滤和重排,向量库只是仓库。
  2. 以为相似度高就一定正确。相似只代表像,不代表新、准、可用。
  3. 以为 Embedding 能替代结构化查询。精确 ID、时间范围、权限过滤仍应交给结构化字段。
  4. 以为取回越多越稳。噪音太多会挤掉真正关键的上下文。

今天自测

  1. Embedding 在 RAG 里主要解决哪一步?
  2. 为什么“相似”不等于“可信”?
  3. 一个 Agent 检索错资料时,你会先检查切块、过滤、排序里的哪一项?