OpenAI API 聯網搜尋工具(web search)怎麼用:tools 裏加 web_search、引用來源、域名過濾和 external_web_access

想讓 API 裏的模型先上網查再回答?在 Responses API 的 tools 裏加一項 web_search 即可。本文講輸出裏的 web_search_call 和 url_citation、域名過濾、用戶位置、查看全部來源、search_context_size 與離線緩存模式,以及官方列出的限制。

NNathaniel bigo··原創首發·AI 輔助撰寫
9 分鐘讀完
資料核對於 2026-11-05 · 依據官方文檔與公開資料整理 其他 帳號
本文根據 OpenAI 官方《Web search》整理,資料核對於 2026-11-05。配圖為本站整理的示意圖,不是介面截圖。代碼裏的模型名取自官方當天示例,請以官方模型頁為準。本站(bigolab.com)不是 OpenAI 官方網站。API 是按用量計費的獨立服務,與 ChatGPT 訂閱分開計算,Key 的獲取見 /guides/openai-api-key。

適用於誰

  • 需要讓模型回答“今天發生了什麼”“最新版本是多少”這類時效問題的開發者;
  • 已會用 Responses API 發請求(不熟的先看 /guides/openai-responses-api),想給它加聯網能力的人;
  • 想在回答裏顯示來源連結、或限制只在某幾個網站裏搜的人。

結論先說

  1. 一行就能開:在 tools 裏加 {"type": "web_search"},不用自己寫搜尋代碼。
  2. 新接入用 web_search,舊的 web_search_preview 還能用,但不支持域名過濾等新選項。
  3. 模型不一定搜:tool_choice 為 auto 時它自己決定要不要搜,想強制就設 required 或指定這個工具。
  4. 回答裏的引用在 annotations,類型是 url_citation;官方要求把行內引用以顯眼的可點擊連結展示給用戶。
  5. 搜尋要額外計費:搜尋動作有工具調用費用,另外還有模型本身的 token 費用,數字以官方價格頁當天為準。

一次聯網搜尋請求的過程

圖:本站根據 OpenAI 官方《Web search》 整理的示意圖

一、最小示例

Python:

python
from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-6-astra",  # 以官方模型頁當天為準
    tools=[{"type": "web_search"}],
    input="今天有什麼積極向上的新聞?",
)

print(response.output_text)

Node.js(儲存為 .mjs):

javascript
import OpenAI from "openai";

const client = new OpenAI();

const response = await client.responses.create({
  model: "gpt-6-astra", // 以官方模型頁當天為準
  tools: [{ type: "web_search" }],
  input: "今天有什麼積極向上的新聞?",
});

console.log(response.output_text);

沒有 Key 或還沒跑通基礎請求的,先看 /guides/openai-api-python-quickstart 或 /guides/openai-api-nodejs-quickstart。

二、響應裏有什麼

一次帶搜尋的響應,output 裏通常有兩類項:

  • web_search_call:記錄搜尋動作,有 id、status 和 action。action 的類型可能是 search(帶查詢詞)、open_page(打開某個頁面)或 find_in_page(在頁面內查找)。搜尋類動作會產生工具調用費用;
  • message:真正的回答,文字在 content[0].text,引用放在 content[0].annotations。

每條 url_citation 包含 type、start_index、end_index、url、title。其中 start_index 和 end_index 指出這條引用對應回答文字的哪一段,你可以據此在頁面上做角標或連結。行內引用預設就帶上。官方明確要求:你向用戶展示聯網結果時,行內引用必須以顯眼的、可點擊的連結形式呈現。

三、限制搜尋範圍

域名過濾

用 filters 指定只搜某些網站,或者排除某些網站:

python
tools=[{
    "type": "web_search",
    "filters": {
        "allowed_domains": ["openai.com", "developers.openai.com"],
    },
}]

規則:allowed_domains 與 blocked_domains 各自最多 100 個域名;寫域名時不要帶協議,寫 openai.com,不要寫 https://openai.com/;子域名自動包含。這個功能只適用於 Responses API 的 web_search,舊的 web_search_preview 不支持。

用戶位置

問“附近有什麼”這類問題時,可以給個大致位置:

python
tools=[{
    "type": "web_search",
    "user_location": {
        "type": "approximate",
        "country": "US",
        "city": "Minneapolis",
        "region": "Minnesota",
        "timezone": "America/Chicago",
    },
}]

type 固定寫 approximate;country 是兩位 ISO 國家代碼;city、region 是自由文本;timezone 是 IANA 時區名。

四、查看全部來源

回答裏的引用只是模型最終採用的幾條。想看它查過的所有網址,請求裏加:

python
include=["web_search_call.action.sources"]

官方說這個來源列表通常比引用列表更長。實時數據類來源會帶有 oai-sports、oai-weather、oai-finance 這樣的標籤。

五、幾個參數怎麼選

web_search 的常用參數

圖:本站根據 OpenAI 官方《Web search》 整理的示意圖

  • search_context_size:取 low、medium(預設)、high,控制給模型多少搜尋上下文。官方特別說明,它不是精確的 token 數,也不保證來源或引用的數量;
  • external_web_access:布爾值,預設 true,即實時聯網。設為 false 是隻用緩存、不訪問外部網絡的離線模式;舊的 web_search_preview 會忽略這個參數;
  • tool_choice:auto 時模型可能直接回答不去搜,要保證搜尋就用 required 或指定該工具;
  • return_token_budget:只用於託管的 web_search 與 GPT-5 及以上的推理模型,取值 default 或 unlimited,官方提醒 unlimited 可能增加延遲和費用,要謹慎,長任務可配合 background: true。

六、官方列出的限制

  • 聯網搜尋的上下文窗口最多 128k,不管模型本身窗口多大;
  • 速率限制沿用底層模型的分級限制,提高限額的辦法見 /guides/openai-api-usage-tiers-rate-limits;
  • 官方提醒:gpt-5.4 搭配推理強度 none 可能得到質素較低的搜尋結果;仍在用 gpt-5 的,推理強度要高於 minimal;
  • Chat Completions 裏只有 gpt-5-search-api 一個搜尋模型,它每次回答前都會先搜,但不支持域名過濾、來源列表、實時訪問控制;官方建議僅為保持舊集成才用;
  • 安全上,官方建議把公開網頁搜尋和訪問私有數據的 MCP 查詢放在不同請求裏,以降低提示注入的風險;
  • 官方頁面還提到一些舊的搜尋預覽模型已經安排下線,如果你的代碼還在用,請到官方頁面核對日期。

常見問題

Q:為什麼有時候明明開了工具,模型沒搜?

tool_choice 預設是 auto,模型認為不需要就不會搜。要強制搜尋,把它設為 required。

Q:能不能讓搜尋結果只來自我信任的網站?

用 filters.allowed_domains,最多 100 個域名。

Q:怎麼在介面上顯示來源?

讀 annotations 裏的 url_citation,用 url 和 title 做連結,並按官方要求讓連結顯眼可點擊。

Q:要不要同時讓回答按固定格式輸出?

可以,格式化輸出見 /guides/openai-api-structured-outputs;讓模型自己調用你寫的函數見 /guides/openai-api-function-calling。

Q:遇到 429 或其他報錯?

按 /guides/openai-api-error-codes 排查。價格見 /guides/openai-api-price-official-table,以官方當天為準。

參考資料

  • OpenAI 官方:Web search — https://developers.openai.com/api/docs/guides/tools-web-search

Nathaniel 的更多內容

  1. 01

    Claude Code 處理大倉庫:怎麼讓它只看需要的目錄(子目錄 CLAUDE.md、claudeMdExcludes、deny 規則)

    倉庫太大,Claude Code 總在讀無關文件、讀進別的包的規則?本文按官方大倉庫指南講:從哪個目錄啟動、子目錄 CLAUDE.md、claudeMdExcludes、Read 的 deny 規則、worktree.sparsePaths、additionalDirectories,以及一份合併後的配置示例。

    Claude0
  2. 02

    Claude Code 在 CI 裏跑:從本機 claude -p 到 GitHub Actions 的完整例子(自動審 PR、控成本)

    一條線走完 Claude Code 的 CI 用法:先在本機用 claude --bare -p 配 --json-schema 跑通,再寫進 GitHub Actions 用 claude-code-action@v1 自動審 PR,最後加上 --max-turns、超時、並發限制來控成本,並附上常見故障的排查順序。

    Claude0
  3. 03

    Claude Code 自定義 subagent 實例:測試員、調試員、只讀調研員、只讀數據庫員怎麼寫

    四個可直接改的 subagent 實例:跑測試的 test-runner、找根因的 debugger、只讀調研員、用 PreToolUse hook 限成只讀 SQL 的 db-reader;講 tools、disallowedTools、model、maxTurns 怎麼配,怎麼點名調用。

    Claude0
  4. 04

    Claude Code 的 CLAUDE.md 模板:前端、後端、數據分析各一份,附拆分與自檢方法

    直接拿去改的三份 CLAUDE.md 模板(前端、後端、數據分析),每份都控制在官方建議的 200 行以內;再講怎麼用 .claude/rules 的 paths 拆出專屬規則、用 @ 導入長文檔,以及用 /context all 和 /doctor prompt-audit 檢查是否生效。

    Claude0
  5. 05

    Claude Code 自己寫一個插件並發布到 marketplace:plugin.json、marketplace.json、validate 到團隊安裝的完整流程

    想把自己寫的 Skill、Hook 打包給團隊用?按 Claude Code 官方 Plugins 文檔,從目錄結構、plugin.json、claude plugin validate,到寫 marketplace.json、推到 Git、讓同事一條命令安裝,再到版本更新,走完一遍完整流程。

    Claude0
  6. 06

    Claude Code 寫一個會自動觸發的 Skill:從需求到觸發,用 description、when_to_use 和 paths 控制它什麼時候出場

    寫好的 Skill 總是不觸發,或者什麼都觸發?本文按 Claude Code 官方「Extend Claude with skills」走一遍完整實例:把「改數據庫遷移前先檢查」寫成一個會自動出場的 Skill,包含 description、when_to_use、paths、附帶腳本、觸發測試和評估。

    Claude0

同產品的其他教學

  1. 01

    ChatGPT 閃卡(flashcards)和互動小測(quizzes):是什麼、怎麼觸發、誰能用

    ChatGPT 現在能直接做可翻面的閃卡,也能在對話裏出題讓你作答。本文按官方發佈說明講這兩個功能是什麼、怎麼要求 ChatGPT 生成、閃卡怎麼翻面自評和儲存、各自在哪些套餐和裝置可用,並給出幾條自擬的提示詞寫法。

    ChatGPT0
  2. 02

    ChatGPT 手機端「切換帳號」(Switch account):同時登入兩個帳號怎麼加、怎麼切、哪些東西互不相通

    ChatGPT 的 iOS 和 Android 應用正在推送帳號切換:最多同時保持登入 2 個帳號,在 Settings > Switch account 裏添加、切換、退出。本文按官方幫助頁講步驟、限制、通知、訂閱歸屬,以及它和切換工作區的區別。

    ChatGPT0
  3. 03

    ChatGPT 鎖定對話(Locked chats):是什麼、怎麼開、誰能用,以及它不能做到什麼

    ChatGPT 的 Locked chats 能把指定對話從歷史、置頂和搜尋裏藏起來,用 4 位 PIN 或裝置驗證打開。本文講怎麼鎖、怎麼解鎖、忘了 PIN 的後果,以及官方明確說它不做的事(不是加密、不改保留期限)。

    ChatGPT0
  4. 04

    OpenAI API 文件上載與 PDF 輸入怎麼寫:input_file、file_id、file_url、base64 和 50 MB 限制

    想讓模型讀你的 PDF、Word 或 CSV?Responses API 用 input_file 傳文件,有 file_id、file_url、base64 三種方式。本文講 Files API 上載、purpose 怎麼選、單文件和單請求 50 MB 限制、各類文件怎麼解析,以及什麼時候該改用文件搜尋。

    ChatGPT0
  5. 05

    OpenAI API 的 token 怎麼算、怎麼估算費用:input_tokens 計數接口、tiktoken 和隱藏的輸出 token

    發請求前想知道會用多少 token?官方有 Responses 的 input_tokens 計數接口,能把文字、圖片、文件、工具定義一起算準;本地 tiktoken 只適合純文本。本文給 Python 和 Node 示例,講輸出 token 為什麼可能比看到的多,以及怎麼估算費用。

    ChatGPT0
  6. 06

    OpenAI API Node.js / TypeScript 快速上手:npm install openai、example.mjs 第一個請求,到流式、函數調用、聯網搜尋

    用 Node.js 調 OpenAI API:設定 OPENAI_API_KEY 環境變量,npm install openai,新建 example.mjs,用 client.responses.create 發出第一個請求。並列出圖片、文件、流式、函數調用、聯網搜尋和錯誤捕獲的 Node 寫法。

    ChatGPT0

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~