Web Fetch
把你已有 URL 的頁面全文交給模型。加一個工具條目,Synthorai 就會抓取頁面、清理內容,把可讀正文放進對話——任何模型、任何通道都適用。
最小請求
在 /v1/messages 的 tools 加入 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 單價 |
按次抓取費不是全部成本。抓取的頁面會作為輸入 token 進入對話,一篇長文可能是數千個——在多數模型上,token 成本超過 $0.01 的費用。兩者都要列入預算。
三個保持可預測的方法:
- 把
max_uses設為任務所需的最小值——它是整個請求(含重試)的費用上限。 - 抓取特定頁面,而不是讓模型自行探索。使用者貼的 URL 是一次抓取;「圍繞主題讀一讀」可能是三次。
- 把
usage.server_tool_use.web_fetch_requests與usage.input_tokens放在一起看——錢通常花在後者。
限制與安全
- 只抓取
http與httpsURL。內嵌憑證的 URL 會被駁回。 - 私有、迴環、link-local 與雲端中繼資料位址一律拒絕——web_fetch 只到達公開頁面。
- 頁面正文在進入對話前會按配置的字元上限截斷,單一超大頁面無法無限膨脹一個請求。
- 無法抓取的頁面以錯誤區塊返回,而不是讓整個請求失敗;模型可以對此作出反應,或在沒有該頁面的情況下作答。
- 宣告
synthorai:web_fetch期間,裸名稱web_fetch被保留——以該名稱宣告你自己的工具會收到點名的400。請改名,或移除synthorai:參數。 - 在離開我們網路前就被拒絕的抓取——駁回的 URL、封鎖的網域、未配置的後端——不收費。到達供應商端並在那裡失敗的抓取會收費,因為供應商向我們收了費。兩者都計入
max_uses。
你對所抓取內容的責任
web_fetch 依你的指示抓取頁面。抓哪個 URL 由你決定,因此該次抓取、以及你對返回內容的使用,都由你負責。
- 你必須擁有存取該內容的權利。包括目標網站的服務條款、其
robots.txt、任何付費牆或登入邊界,以及適用的著作權與資料庫權利。經由我們抓取不會授予你原本沒有的存取權。 - 個人資料仍是你的義務。若抓取的頁面含個人資訊,在 GDPR、PIPL 及同等制度下你仍是其控制者——包括合法依據、保存,以及任何刪除請求。
- 因你的抓取而生的主張由你承擔。若權利人或網站營運者就你取得的內容提出主張,該主張指向你,費用由你承擔。這與我們所經由的上游檢索供應商的條款一致。
- 模型輸出並未獲得再利用許可。基於抓取素材的模型回答可能重現其中片段。能否再發布該輸出取決於來源的授權,我們對此不作任何陳述。
我們負責的部分:營運檢索基礎設施、封鎖內部與私有網路位址、遵守你的管理員配置的網域封鎖清單、且在完成你的請求之外不保留抓取的頁面內容。我們不審查、也無法審查個別 URL 的合法性——URL 本身不攜帶授權。
對收到可信濫用回報、或被檢索供應商標記的 API 金鑰,我們會停用其 web_fetch——因為供應商帳號一旦被停權,所有客戶的功能都會一起下線。
常見問題
模型會抓取我沒提到的頁面嗎?
它可以追蹤同一段對話中經 synthorai:web_search 找到的 URL,這正是兩者結合的意義。它被指示不得虛構 URL;需要找頁面時應先搜尋。
頁面需要登入或封鎖爬蟲時會怎樣?
那次抓取會返回錯誤區塊,模型在沒有該頁面的情況下繼續。由於請求確實已代你發出,該次抓取仍計入 max_uses。
沒有抓取任何頁面時,宣告這個工具會改變什麼嗎?
不會。在模型真正抓取內容之前,計費與行為都與普通請求完全相同。