Build in Public · LF-08
Agent 搜索工具怎么选:从找到页面到交付可核验的答案
以任务阶段选择搜索、正文读取和交叉核对工具,保留来源、时间与失败状态;用公开目录检查输入契约,不把搜索命中数当成事实可信度。
一个搜索 Agent 可以列出十条看似相关的链接,却仍然回答不了“这个参数现在是否支持”。链接可能属于旧版本,摘要可能漏掉限制,几篇文章还可能引用同一份公告。下一步需要的往往是读懂那一页原文,而不是继续增加搜索次数。
选择工具时,先明确这一步要交付什么:待阅读的来源、指定页面的正文,还是能够支持某个具体结论的证据。本文按这三种交付物组织 EveryInfra 搜索工具,再说明什么时候应当停止检索、保留未知,以及怎样验收引用。目录与带日期的历史调用会分开说明;这里没有把所有工具逐项实测,也没有声称已跑通端到端研究系统。
先把问题改写成可以核对的断言
“了解这个产品”适合作为研究方向,却不适合直接交给工具作为完成条件。试着把它拆成少量能够判断的问题:哪个接口接收这个参数、适用哪个版本、是否需要额外权限、失败时能否重试。每个问题都应写明时间、产品和使用场景。
例如,编辑正在确认一个远程服务是否可以接入某个客户端。至少要分开核查:服务支持什么传输,客户端接受什么认证方式,以及有没有在该客户端实际完成调用。前两项可以从文档取得,第三项需要运行证据。即使两份文档分别描述“支持 MCP”,也不能直接合成“这一组合已验证兼容”。
给每个问题记录预期证据类型,有助于阻止搜索范围无限扩大。参数定义优先找对应版本的官方参考;真实失败现象需要具体输入、错误与环境;客户成效需要经许可且可追溯的案例。没有取得对应证据,就收窄结论,不用另一种材料凑数。
理解这条链路时,可读 Lewis 等人的 RAG 原论文:其研究将生成模型与可检索存储结合,而不是把模型参数中的知识当成全部事实来源。本文的发现、阅读和逐条核验是应用层设计;不把论文中的实验结果外推为任何网页 Agent 的准确率保证。
不知道页面在哪里,才从发现开始
只有问题、没有 URL 时,先用 web 找可能相关的页面。2026 年 9 月 4 日的公开目录列出 q 为必填项,并列出站点、地区、时间和页码等可选参数;具体字段仍应在调用前查看当前目录,不凭自然语言猜参数名。
发现阶段的工具可以按输入和预期结果进一步选择:
semantic适合用自然语言描述概念;suggest用于找查询表达。联想词是检索线索,不是结论。similar以已有 URL 为起点找相近页面;deep提供更深入的检索入口。名称含有“深度”不意味着页面已经满足本次证据要求。news、scholar、forum把检索范围转向新闻、学术或讨论。它们改变的是来源范围,不是事实自动通过的标准。places、shopping、media、lens分别面向地点、商品、媒体关键词和图片 URL。输入不同,不能把它们统一包装成只接受q的函数。
论坛里的具体报错可以帮助发现文档没有覆盖的环境差异,但不能因“是真人讨论”就压过版本匹配的官方定义。更有用的做法是保留冲突:文档说支持,某环境报告失败,然后说明还缺哪次复现来判断两者为何不同。
已有 URL,切换到读取而不是反复搜索
指定页面的正文由 read 处理。站点范围内先找页面结构时可以用 map;要读取多个页面时再考虑 crawl。需要结构化站点任务时查看 harvest 的目标与字段要求,不把它当成单页阅读的默认入口。
这一区分影响后续验收。map 得到 URL 清单后,不能把“已发现页面”记成“已读取正文”;从搜索摘要取出的句子,也不能直接标成已经核对全文。正文被截断、只读到导航或返回登录页时,读取步骤仍未完成。
不应把工具升级当成绕过访问限制的方法。遇到登录要求、明确的拒绝访问或授权范围不清,先停止并查明可用的获准路径。页面暂时失败可以保留重试条件;目标不允许访问则需要范围调整,不是换一种工具就变成允许。
一条免费命令,检查真正需要的参数
下面只读取公开工具目录,不执行检索、不下载目标正文,也不需要 API key。终端需安装 curl 和 jq;打开 pipefail 可避免请求错误被后续处理掩盖。
set -o pipefail
curl -fsS --max-time 20 \
'https://api.everyinfra.com/api/v1/search/tools' \
| jq -e '
[.tools[] |
select(.tool == "web" or .tool == "read" or .tool == "crosscheck") |
{tool, required_params, optional_params}]
| if length == 3 then . else error("selected tool missing") end'本次核查中,web 和 crosscheck 要求 q,read 要求 url。crosscheck 的可选参数包含 num、since、read_top、depth 和 mechanisms;read 未列出可选参数。不要给所有工具硬塞相同的时间或数量字段。公开搜索目录
同次目录列出 17 个工具。这个数字只是查询时的清单长度,不代表 17 项都经过业务验收;也不适合作为文章标题里的长期承诺。目录声明解决“怎样提出请求”,不能证明这次会得到完整正文、多少结果或某个计费状态。
crosscheck 帮你找证据关系,不替你裁决事实
当回答将写入文档、代码或对外承诺时,crosscheck 可以作为交叉核对入口。它的意义在于让编辑观察不同检索机制对来源的发现情况,再去读关键原文;不能把机制命中数直接换算成一个未经校准的“真实概率”。
三条检索链找到同一篇公告,仍然只有一份原始证据。不同域名转载同一则新闻,也不等于多个独立观察。需要同时看最终 URL、原始发布者、引用关系、版本与时间,才能判断来源是独立补充还是重复转述。
也不要给这一过程套用未经证实的固定阈值,例如“同一数字出现在三个域名,AI 引用权重就翻倍”。以 Google 对 AI Overviews 与 AI Mode 的官方说明为例,公开建议仍是基础 SEO、可发现的内链和有帮助的内容,并未给出这种三域名倍率规则;这份说明也不能代表所有 RAG 系统。官网、LinkedIn、Medium 上由同一团队发布的数字可以帮助不同读者找到原文,但在证据卡中仍应追溯到同一原始观察,而不是计作三票。
来源冲突时,把冲突拆小。旧版文档与新版文档不一致,优先说明版本变化;官方说明与现场失败不一致,保留场景和复现缺口;多个二手站点与一份一手原文不一致,回到原文具体段落。不强行投票选一个答案,也不让工具生成的综合叙述成为自己的唯一证据。
给每个结论留一张证据卡
建议在业务系统中维护如下字段。它们是本文提出的记录设计,不是声称 API 会返回的响应结构:
claim:需要支持的最小断言,以及适用产品、版本和地区。source_url与final_url:原入口及实际落地页,便于识别跳转或重复来源。observed_at:何时读取;与页面写明的published_at、updated_at分开。evidence_locator:能回到具体小节、段落或样本的定位信息,不只保存首页。support_status:建议区分支持、矛盾、无关、无法读取和仍待验证。limits:原文中的适用范围、例外、证据缺口和下一次复查条件。
证据卡的目的不是增加表单,而是让另一位审稿人能用同一条链接判断同一件事。只存“网站 A 说可以”无法复核;把原文的条件遗漏掉,链接再多也不能修复结论。
涉及动态价格、版本或能力清单,应设置复查时限;发布前再查实际引用项。页面还在不代表内容未变,链接能打开也不代表原来的断言仍成立。修改结论时保留本次依据,不把旧观察的日期直接改成今天。
需要跨步骤追踪时,可以参考 W3C PROV 对实体、活动和派生关系的介绍,把原文版本、阅读记录与答案关联起来。它帮助说明结论从哪里来,不会自动判定来源是否独立、内容是否正确。
把成功、空结果和无法读取分开
2026 年 9 月 2 日的脱敏业务样本里,web 返回过 3 条结果;一次 crosscheck 返回了 4 种机制的记录。同轮也出现 read 读取指定文档失败、HTTP 503 的样本,以及 scholar 请求成功但结果为空的样本。这些只是当时特定输入的结果,不是所有调用的行为保证。
2026 年 9 月 4 日重查的是工具目录,没有重跑上述鉴权业务。因而本文既不说“read 目前故障”,也不说“read 已恢复”。接入验收应另行检查能否取得完整正文、失败时如何保留状态,以及最终引用是否确实支持结论;旧样本不能代替这些当前结果。
对于 Agent,空集合应保留查询条件和时间范围,输出“本次未找到”,而不是“事实不存在”。无法读取时保留找到的 URL 与失败状态,但不把摘要伪装成全文。超时且请求结果未知时,也不要擅自断定任务未执行或账户未发生变化。
重试应有次数与触发条件上限。权限失败先处理授权,参数错误先修输入;可重试的短暂失败再按接口约定处理。仍然得不到证据,就带着缺口结束这一项,不让 Agent 永远循环,也不补写它没有读到的内容。
引用验收与安全检查是同一条交付链
搜索正文是待核对的数据,不是新的操作指令。网页要求上传本地文件、粘贴 API key、关闭安全检查或改用陌生地址时,不能因为这段文字来自“搜索结果”就执行。将页面内容与系统指令、凭据和用户授权隔离;工具只取得完成当前问题所需的数据。
答案写完后逐条核对引用:链接是否支持紧邻的断言,限制是否保留,日期是否对应观察,原始来源是否被重复计算。只核对参考文献列表非空远远不够。尤其是把“可连接”写成“已实装”、把“支持字段”写成“每条都返回”,引用本身通常不会提醒你已经扩大了原意。
可以先用人工准备的测试材料检查工作流:一份原文与两份转载、同一页面的旧新版本、只有标题的读取结果,以及正文中的恶意操作指令。预期行为分别是去除重复证据、标明版本、保持读取未完成和拒绝执行页面指令。这是建议的验收集合,本轮没有把它说成已运行的产品测试。
网页正文中的恶意指令属于 OWASP 描述的间接提示注入风险。按照其最小权限与工具调用校验思路,阅读工具不应因此获得文件上传或账户修改能力;风险较高的动作仍由独立的授权步骤控制。
从一个可核对的问题开始接入
第一轮只选一个公开、低风险、授权明确的问题,固定预期的一手来源。依次记录发现、正文、结论和引用各阶段的结果,由人检查是否存在跳步。跑通这一条证据链以后,再扩大问题类别与工具范围。
EveryInfra 的公开目录可以先帮助核对工具和输入;实际业务调用、失败处理与交付质量仍要用自己的获准样本验证。本文的完成标准不是“工具都调用了一遍”,而是读者能指出:答案中哪些话有原文支持,哪些仍然未知,以及下一步需要什么证据。查看接口文档