CMU AI AGENTS / 同一个循环,进入三种真实环境 / 第 32 课

搜索结果很相关,为什么最后的结论仍然错?

检索要服务当前研究缺口,相关不等于支持结论;查询、推理上下文、排序、预算分配共同影响证据覆盖。

完整讲解 · 条件对照 · 理解检查所在单元与学习顺序官方课件全页浏览

检索器找到了相关网页,为什么 Agent 还是答不出当前问题?

上一节把研究拆成一组尚待验证的主张。Agent 每次搜索都在为其中一个缺口找证据。但检索器通常只看到这一次传入的查询,不自动拥有 Agent 前面读过的所有资料。本课从原课的 Simon 与 Turing Award 例子解释“相关”和“对当前一步有用”的差别,不展开大规模向量索引实现。

查名字与查关系,是不同的需求

原课问题是“谁与 Simon 共同获得图灵奖?”资料库里有三条:Newell 与 Simon 于 1975 年获图灵奖;Simon 于 1978 年获得经济学诺贝尔奖;CMU 校园建筑与路线。第二条确实与 Simon 有关,却不能回答“和谁共同获图灵奖”。

如果 Agent 只发送 Simon award,它丢掉了任务中最关键的关系。一个检索器完全可能优先返回介绍 Simon 奖项的长传记。这里不是网页内容一定错误,而是本轮输入没有清晰表达缺口。

官方原课件 · Lecture 10 · PDF 第 102 页原课:检索有用的是回答共同获奖关系的文档
查询 Who shared the Turing Award with Simon,对三条文档编码后优先匹配 Newell and Simon 1975 Turing Award

比较文档 1 和 2:都有 Simon 和奖项,只有文档 1 含共同获奖的人。相似度排序是找候选,读内容才知道有没有回答关系。

向量分数告诉我们什么

双编码器把查询与文档分别变成向量,用点积等相似度给候选排序。为了手算,取教学查询向量 (1,0);文档 A 向量 (0.8,0.1),B 为 (0.6,0.7)。点积分别为 1×0.8+0×0.1=0.8 与 1×0.6+0×0.7=0.6,所以 A 排在 B 前。

这两个维度只是用于演算点积的人工向量,不是某模型真实 embedding,也不能解释成“第一维是图灵奖”。0.8 同样不是事实有 80% 概率正确。编码器只根据训练得到一种排序函数,检索结果还要通过原文核对。

若查询向量改成 (0,1),同样文档分数变成 0.1 与 0.7,顺序反转。这个小算式说明,文档集合不变,查询表达的方向改变也能改变排序。真实系统里语义与向量的关系更复杂,但查询遗漏关键关系仍可能使检索目标偏移。

Agent 想得很清楚,为什么工具不知道

模型可能在上下文中已经记下“知道 Simon,缺共同获奖者,排除诺贝尔奖”。如果工具调用只传 Simon award,后面三个限制都不会穿过接口边界。把推理写在上一条助手消息里,不等于检索 API 收到了它。

官方原课件 · Lecture 10 · PDF 第 105 页原课:检索器常常只拿到最新查询
Agent 包含任务、历史推理、旧查询和证据,但只有最新 query 传给 Retriever

沿箭头检查数据实际流向。左边信息很多,右边输入很少;缺口发生在接口,不应只怪检索器“没理解我”。

最直接的改善是把当前缺口写进可独立理解的查询,比如 Herbert Simon Turing Award shared with,随后核对原文实体与年份。更进一步,可以训练检索器同时接收当前推理状态和查询,让它学习什么资料对这一轮有用。原课介绍的 AgentIR 属于后一种路线。

官方原课件 · Lecture 10 · PDF 第 106 页原课:让检索器接收当前推理与查询
AgentIR 将 reasoning 与 query 同时送入检索器,并训练其识别对当前推理步骤有帮助的文档

改动有两部分:输入多了当前推理;训练目标也要匹配“对本轮有用”。只把整段历史拼得很长,不保证未经适配的检索器会更好。

观察过程 · 改变条件

让查询带着缺口出门

先读 Agent 已知事实,再检查工具输入实际保留了多少。

教学构造场景 · 按下方规则逐步回放;不调用真实模型,不代表实际成功率。

这一轮的输入

资料库含共同图灵奖、诺贝尔奖、校园路线

  1. 1. 当前缺口

    Agent 已知 Simon,真正缺的是共同获图灵奖的人。

  2. 2. 工具输入

    只发送 Simon award,关系和奖项类型丢失。

  3. 3. 读回候选

    假设返回诺贝尔奖介绍,实体相关但不能回答共同获奖者。

当前缺口

Agent 已知 Simon,真正缺的是共同获图灵奖的人。

1 / 3
先预测,再核对结果与原因还需要澄清查询并检索。

内部知道的约束没有穿过工具接口。

这组回放固定资料库,只改变查询是否带出缺失关系。返回顺序是教学场景设定,用于解释接口信息流,不宣称某搜索引擎实际会按此排序。

更多历史也会带来噪声

反过来,把整个研究过程都发给检索器未必最好。历史中可能有已解决的问题、错误猜测、过时资料。我们需要当前缺口和必要约束,而不是所有文字。若 Agent 最初猜错“是诺贝尔奖”,不断把猜测放进新查询,还会把检索推向错误方向。

应把已确认事实、待验证假设和查询目标分开记录。得到新证据后,允许推翻原假设;若同义改写总返回同一组资料,就考虑是否问错了关系、来源集合缺失或需要另一种工具。增加 top-k 可以扩展候选,但也会增加阅读成本,不能取代问题表达。

怎么决定下一次搜索值不值得

先列当前报告最重要的缺口,再估计这次搜索能补哪一个。给每次调用设一个可核对的问题,比如“找到共同获奖者原始记录”,而不是“了解更多”。读回结果时记录有无新增证据;连续得到重复资料时,应改变策略或明确未知,而不是把搜索次数当进展。

验收用保留的中间研究状态测试:同一个全局问题,在不同阶段需要的文档是否不同;查询中是否保留实体、关系、时间限制;排序靠前的文档是否实际支持当前主张。检索质量与最终报告质量相关,但不能用最终答案对错完全替代本轮文档有用性的判断。

检索器只能依据收到的信息排序,Agent 要把“现在缺什么”准确传出去。
理解题 1:文档提到了 Simon,为什么仍可能无助于这次搜索?

它可能只介绍诺贝尔奖,没有共同获得图灵奖的关系。实体相关只是必要线索,不等于能补上当前缺口。

理解题 2:点积 0.8 是否意味着事实正确率 80%?

不是。它是相似度分数,数值含义取决于编码与归一化。事实支持关系还要读取原文判断。

理解题 3:把全部历史传进去一定胜过短查询吗?

不一定。多余或错误历史会引入噪声,检索器也未必训练过这种输入。应传与当前缺口有关的已知事实和限制,并通过对照评测选择接口。

现在研究过程已经能追踪证据。下一节问训练问题:怎样让模型学会这套过程,而不只是学会报告的文风?