为什么 Agent 需要一条专门的搜索 API
大模型的知识停在训练截止日。让 Agent 做实时决策,需要的不只是"能上网",而是结构化、可计费、可引用的网页接入层。
2026年9月16日
WebSearch 团队
为什么 Agent 需要一条专门的搜索 API
大模型的知识停在训练截止日。一旦问题涉及"最新"、"今天"、"现在的价格",模型只能编造。给 Agent 接网,听起来像调用一个搜索框,做起来才发现处处是坑。
直接抓网页为什么行不通
最朴素的做法是让 Agent 拿到 URL 后自己 fetch 整页 HTML。问题立刻出现:
- 上下文爆炸 — 一页 HTML 动辄几百 KB,导航、脚本、广告占掉绝大部分,正文淹没其中。
- 没有排序信号 — 搜索引擎用几百个信号排序结果,自己抓页面拿不到"哪个结果更可信"。
- 反爬与渲染 — 越来越多的站点需要 JS 渲染或有反爬策略,裸
fetch拿到的只是空壳。 - 成本不可控 — 每次调用烧多少 token、花多少钱,完全无法预估。
一条搜索 API 应该长什么样
给 Agent 用的搜索,和给人用的搜索,需求完全不同。人要的是十条蓝色链接;Agent 要的是可以直接进上下文的结构化证据:
{
"query": "latest papers on retrieval",
"results": [
{
"title": "Dense Passage Retrieval",
"url": "https://arxiv.org/abs/2004.04906",
"content": "DPR shows that dual-encoder retrievers...",
"score": 0.95
}
],
"response_time": 0.42
}
关键差异在三点:
- 正文而不是 HTML — 每条结果带清洗后的摘要或正文,模型直接引用,不用再解析 DOM。
- 确定性计费 — 一次调用一个价格(basic 1 积分、advanced 2 积分),Agent 框架可以做预算控制。
- 错误可预期 — 余额不足返回 432,限流返回 429,格式统一为
{ "detail": { "error": "..." } },重试逻辑好写。
Search 与 Extract 的分工
搜索解决"找到哪些页面",但很多时候你已经知道 URL——比如用户贴了一个链接,或者上一轮搜索给出了候选。这时需要的是定点抽取:把指定 URL 变成干净的 markdown。
WebSearch 把这两件事拆成两个端点:
POST /api/search— 查询进,排序后的结果列表出POST /api/extract— URL 列表进,逐页正文出(失败的 URL 单独列出,不收费)
组合起来就是 Agent 的标准动作:先 search 找候选,再 extract 取正文,最后让模型基于真实来源作答。
下一步
注册即送 1,000 积分,直接在 Playground 里试,或者读快速开始用 curl 跑通第一次调用。