🎁 新人 免费注册,送 10 次调用,最高 $1,免绑卡。

Web Fetch

把你已经知道 URL 的那个网页,整篇正文交给模型。加一个 tool 条目,Synthorai 负责抓取、清洗,把可读正文放进对话 —— 任意模型、任意渠道都能用。

最小请求

/v1/messagestools 里加上 synthorai:web_fetch,其余照旧:

curl https://synthorai.io/v1/messages \
  -H "x-api-key: $YOUR_KEY" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 1024,
    "tools": [{"type": "synthorai:web_fetch"}],
    "messages": [
      {"role": "user", "content": "Summarise https://docs.anthropic.com/en/docs/build-with-claude/tool-use"}
    ]
  }'

只有你加了 synthorai:web_fetch、且模型判断需要读页面时才会抓取。不加就是普通请求——行为和成本完全不变。

可选参数

synthorai:web_fetch 条目上的所有字段都可选:

参数说明
max_uses单次请求最多抓几个页面。默认 3,上限 10。这是花费闸,**跨重试生效** —— 声明 max_uses: 1 的请求即使内部换渠道重试,也最多只按一次抓取计费。
{
  "type": "synthorai:web_fetch",
  "max_uses": 2
}

与 Web Search 搭配

搜索负责找到页面,抓取负责读完它。两个都声明,模型就能先搜、挑一条靠谱的结果、再把整页读进来 —— 研究类问题通常需要的正是这个:

"tools": [
  {"type": "synthorai:web_search"},
  {"type": "synthorai:web_fetch"}
]

响应结构

每次抓取在 assistant 轮里表现为一对块,后面跟模型的回答:

{
  "type": "server_tool_use",
  "id": "srvtoolu_synth_...",
  "name": "web_fetch",
  "input": { "url": "https://example.com/page" }
},
{
  "type": "web_fetch_tool_result",
  "tool_use_id": "srvtoolu_synth_...",
  "content": {
    "type": "web_fetch_result",
    "url": "https://example.com/page",
    "title": "Example page",
    "content": { "type": "text", "text": "…page body…" }
  }
}

抓取次数会记在 usage 里,你可以自己对账:

"usage": {
  "input_tokens": 9241,
  "output_tokens": 412,
  "cache_read_input_tokens": 0,
  "cache_creation_input_tokens": 0,
  "server_tool_use": { "web_fetch_requests": 1 }
}

计费

项目价格
每抓取一个页面$0.01 / 次
Token(输入 + 输出)按所用模型的标准 input 单价
!

按次费不是全部成本。抓回的页面会作为 input token 进入对话,一篇长文动辄几千 token —— 多数模型上这部分 token 费会超过 $0.01 的抓取费。两笔都要算进预算。

三招把成本控住:

  • max_uses 设成任务真正需要的最小值 —— 它封顶整个请求的抓取费,含重试。
  • 让它抓明确的页面,而不是放它自己去探索。用户贴来的一个链接是一次抓取,"围绕这个话题读一读"可能是三次。
  • 同时看 usage.server_tool_use.web_fetch_requestsusage.input_tokens —— 钱通常花在后者。

限制与安全

  • 只抓 http / https 地址;URL 里内嵌账号密码的一律拒绝。
  • 私网、回环、链路本地与云元数据地址一律拒绝 —— web_fetch 只访问公网页面。
  • 正文进对话前会按配置的字符上限截断,单个超大页面无法把一次请求的成本撑到无上限。
  • 抓不下来的页面会以错误块返回,不会让整个请求失败;模型可以据此换个做法,或者不看这页直接作答。
  • 在你声明 synthorai:web_fetch 期间,裸名 web_fetch 是保留的 —— 用这个名字声明你自己的工具会得到一条指明工具名的 400。把你的工具改个名,或去掉 synthorai: 参数即可。
  • 被我们在出网之前拒掉的抓取 —— URL 不合法、命中黑名单、后端未配置 —— 不收费。已经打到后端却失败的会收费,因为后端向我们收了钱。两者都仍计入 max_uses

抓取内容的责任归属

web_fetch 是按你的指令去取一个页面。抓哪个 URL 由你决定,因此这次抓取本身、以及你如何使用取回的内容,责任在你。

  • 你必须本就有权访问该内容。这包括目标站点的服务条款、其 robots.txt、付费墙或登录边界,以及适用的著作权与数据库权利。经由我们抓取并不会给你带来你原本没有的访问权限。
  • 个人信息的义务仍在你这一侧。若抓回的页面含个人信息,在 GDPR、《个人信息保护法》及同类法域下你仍是该信息的处理者 —— 合法性基础、留存期限、以及任何删除请求都由你负责。
  • 因你的抓取而产生的主张由你承担。若权利人或站点运营方就你取回的内容提出主张,该主张指向你,相应成本由你承担。这与我们所路由的上游抓取服务商对我们的条款一致。
  • 模型输出不等于已获授权可再发布。基于抓取材料生成的回答可能复现其中片段。你是否可以再发布这段输出,取决于原始来源的许可,我们对此不作任何陈述或保证。

属于我们的部分:我们运行抓取基础设施、阻断内网与私有网段地址、执行你的管理员配置的域名黑名单,并且除服务本次请求外不留存抓回的页面内容。我们不审查单个 URL 的合法性 —— 也做不到,一个 URL 本身并不携带它的许可信息。

!

若某个 API key 引发可信的滥用投诉、或被抓取服务商标记,我们会停用该 key 的 web_fetch:服务商账号一旦被封,功能对**所有**客户都会中断。

常见问题

模型会去抓我没提过的页面吗?

它可以顺着同一轮对话里 synthorai:web_search 找到的 URL 继续读,这正是两者搭配的意义。它被明确要求不要凭空编造 URL;需要先找页面时应该先搜索。

页面需要登录、或者屏蔽爬虫怎么办?

这次抓取会返回一个错误块,模型不看这页继续作答。这次仍然计入 max_uses —— 因为我们确实代你发起了这次请求。

声明了工具但一次都没抓,会有影响吗?

没有。在模型真正抓取之前,计费与行为和普通请求完全一致。