Grounding(扎根/依据支撑)是让语言模型从”听起来对”变成”能够展示证据”的关键。一个有依据支撑的回答建立在提问时检索到的证据之上,并指出它所使用的来源,方便读者或另一个系统进行核查。
对于在网络上执行操作的智能体而言,基于实时数据的 grounding 不是可选项。它们所要回答的问题涉及今天的价格、当下的库存情况,以及某个页面今天早上写了什么。这篇说明文章将介绍什么是 grounding、实时网络 grounding 循环是如何运作的,以及它在哪些地方会悄无声息地失效。关于住宅基础设施为何对 grounding 至关重要的论述,详见为什么大语言模型需要住宅代理来实现 AI grounding。
什么是 LLM grounding,什么不是
| 方法 | 知识来源 | 时效性 | 能否引用来源 |
|---|---|---|---|
| 仅靠模型知识 | 训练数据,固化在权重中 | 与训练截止日期一样陈旧 | 否 |
| 微调 | 训练进权重中的新数据 | 与上次训练运行一样陈旧 | 否 |
| 对私有索引进行检索 | 预先建立索引的文档 | 与上次索引一样新 | 是 |
| 实时网络 grounding | 在回答时搜索并抓取的页面 | 最新 | 是 |
Grounding 是指将答案限定在检索到的证据范围内并加以引用的做法。对自有文档的检索和实时网络 grounding 都符合这一定义。实时网络 grounding 的独特之处在于,证据是在提问时抓取的,这正是智能体处理任何时效性强、地域性强或超出其训练数据范围的问题时所需要的。
Grounding 循环
针对智能体的实时网络 grounding 循环通常包含七个步骤。
- 规划查询。 将用户的请求转化为一个或多个搜索查询,包括答案应体现的市场和语言。
- 搜索。 从搜索引擎获取候选来源。
- 筛选。 选择要阅读的结果,优先选取一手且权威的来源。
- 抓取。 获取页面内容。
- 提取。 从每个页面中提取相关段落。
- 附引用作答。 根据段落生成答案,并为每个论断附上引用。
- 验证。 检查每个论断是否确实得到其引用段落的支持。
每个步骤都有延迟预算。搜索和抓取占用大部分时间,并行抓取多个来源通常是保持智能体响应速度的关键。
Grounding 在哪里会失效
多数 grounding 失效不会产生错误,而是产生建立在糟糕证据之上的、看似自信的答案。
被拦截或遇到验证挑战的抓取。 一次返回验证挑战页面或空壳内容的抓取,不会给模型提供任何可用的东西,而一个什么都没得到的模型往往会从记忆中填补空白。解决办法是让抓取失败变得明确:向模型传递清晰的”该来源无法获取”信息,而不是空的上下文,并且宁可用较少的来源作答,也不要用凭空捏造的来源作答。
错误的市场或语言。 从错误国家抓取的页面可能显示不同的价格、库存情况,甚至不同的产品。如果智能体是在为马德里的用户作答,证据就应该反映马德里的情况。将语言和时区信号与出口节点相匹配同样重要;参见匹配代理的地理位置、时区和区域设置。
陈旧的缓存。 缓存抓取到的页面可以节省时间和成本,但如果缓存的存续时间超过了问题所需要的时效性,就会悄无声息地返回昨天的事实。应根据查询类型设置缓存生命周期,价格和新闻类应设置得短,参考资料类可以设置得长。
只有渲染后才存在的内容。 许多页面使用 JavaScript 加载数据。单纯的抓取只能返回框架而拿不到实际内容;参见什么时候需要网页抓取 API。
隐藏在抓取页面中的指令。 这是智能体特有的安全失效问题。一个网页可能包含被刻意写成看似是对模型指令的文本。如果智能体把抓取到的内容当作指令来执行,就可能被诱导泄露数据或采取其用户从未要求的操作。应将每个抓取到的页面都视为不可信的数据,而绝不是命令:让检索到的文本与智能体自身的指令明确分离,根据检索内容限制智能体可调用的工具,并对有实质影响的操作要求进行确认。
引用漂移。 被引用的页面在给出答案之后可能会发生变化。应保留被引用段落的快照或哈希值,以便该引用始终可核查。
代理和 API 在循环中的位置
循环中有两个步骤会接触开放网络:搜索和抓取。
搜索 通常最好由 SERP API 来处理,它能针对给定的位置和设备返回结构化结果,而无需智能体亲自浏览搜索引擎。相关论述见为什么 AI 智能体需要实时 SERP API。
抓取 是代理基础设施发挥作用的地方。智能体会从许多互不相关的网站抓取内容,涉及多个市场,往往并行进行,而最重要的网站往往也是防护最严的网站。用户所在市场的住宅出口节点能返回当地用户所看到的页面。使用 Shifter 网关时,市场和会话是在针对 p.shifter.io:443 的凭证中设置的:
customer-USERNAME-country-es-city-madrid:PASSWORD
customer-USERNAME-country-es-city-madrid-sid-task-5521-ttl-600:PASSWORD
第一行在每次请求时都轮换出口节点,适合并行抓取多个独立来源。第二行将同一个出口节点保持十分钟,适合在同一网站上进行需要保持一致性的多页任务。相关权衡取舍见粘性代理与轮换住宅代理对比。
对于需要渲染的页面,网页抓取 API 可以在一次请求中处理浏览器、重试和提取工作,并且只对成功的响应收费。智能体基础设施的产品视图见面向 AI 智能体的代理页面,选择服务商的标准见适合浏览网页的 AI 智能体的最佳代理。
时效性、成本和延迟
每次有依据支撑的回答都要花费一定数量的搜索加上一定数量的抓取,并且每一次都会增加延迟。以下三个做法能让二者都保持在可控范围内。
- 并行抓取,并在有足够的独立来源达成一致后尽早停止。
- 按问题类型缓存,生命周期要与底层事实的变化速度相匹配。
- 优先选用一手来源。 一个权威页面胜过数个转述它的页面。
评估一个有依据支撑的智能体
要直接衡量 grounding 本身,而不只是答案质量。
| 指标 | 衡量的内容 |
|---|---|
| 依据支撑程度 | 得到所引用段落支持的论断所占比例 |
| 引用准确性 | 被引用的页面是否确实包含该论断 |
| 时效性 | 针对时效性问题,证据的新旧程度 |
| 抓取失败率 | 按网站和市场划分,证据无法获取的频率 |
| 无支撑回答率 | 智能体在缺少证据的情况下仍然作答的频率 |
构建一组答案会发生变化的、具有时效性和市场特定性的测试问题,并按计划定期重新运行。今天能通过测试的有依据支撑的智能体,可能会因为某个来源改变了其页面标记而在下个月失效。
站在正确的一边
智能体代表人类浏览网络,理应据此行事:遵守网站条款和爬虫规则,保持请求频率适度,不绕过登录或付费墙,并记录下抓取了什么内容以及何时抓取。更广泛的框架见面向 AI 数据采集的合乎道德的住宅代理。
常见问题
Grounding 与检索增强生成(retrieval-augmented generation)是一回事吗?
检索增强生成是实现 grounding 的一种方式。Grounding 是更广泛的做法,指将答案与检索到的、可引用的证据联系起来,无论证据来自私有索引还是实时网络。
智能体在实时网络数据上做 grounding 需要代理吗?
在低量级的情况下,或许不需要。但在规模化场景下,涉及众多网站和市场,来自单一地址的抓取会被限速或屏蔽,而被屏蔽的抓取正是最常见的、悄无声息的 grounding 失效原因。
我们如何保护智能体免受隐藏在网页中的指令的影响?
将抓取到的内容视为不可信的数据,使其与智能体自身的指令保持分离,限制检索内容能够触发的工具,并对有实质影响的操作要求确认。
智能体应该直接浏览搜索引擎吗?
对于搜索这一步骤,SERP API 通常更快、更便宜、更可靠。浏览操作最好保留用于抓取搜索返回的页面。
结论
Grounding 通过用提问时抓取的证据构建答案并加以引用,使智能体的答案变得可核查。这个循环很简单:规划、搜索、筛选、抓取、提取、作答、验证。而失效往往悄无声息:被屏蔽的抓取由记忆填补、来自错误市场的页面、陈旧的缓存、未经渲染的内容、隐藏的指令,以及会漂移的引用。
要让抓取失败变得明确,从用户所在市场进行抓取,按问题类型缓存,将检索到的文本视为不可信内容,并直接衡量依据支撑程度。关于训练数据与 grounding 数据有何不同,参见如何从开放网络构建大规模训练数据集。