OpenAI、Claude、Perplexity 三大 AI 搜尋 (web search) API 串接指南

更新 發佈閱讀 18 分鐘
更新時間:2025.09.14

隨著 AI 大型語言模型(LLM)能力不斷提升,越來越多開發者與內容工作者開始關注如何透過LLM API 整合網路搜尋(web search)能力,補足 LLM 針對新知識的不足。

過去 Perplexity 被認為是「AI 網路搜尋」的霸主。然而近期 OpenAI 與 Claude 也相繼支援相關 API。

本文希望能統整目前 OpenAI、Claude、Perplexity 等主要平台的 AI 搜尋 API 的串接功能!包含三家的規格、串接方式、重要參數、使用限制與程式範例!

以下範例也都將以 Python 為例。

「注意:本篇專注於討論三家LLM大廠的『API』支援與使用,並非討論三家『聊天介面』的使用!」

OpenAI Web Search

三種搜尋邏輯:

  • 非推理式搜尋(使用非推理模型如 gpt-4o、gpt-4.1等,而非gpt-5):速度快,適合快速回答。
  • 代理搜尋(Agentic Search):模型會主動管理搜尋流程(像 agent 一樣),可以將搜尋納入「思考鏈」(chain of thought),解析各步結果,決定要不要繼續搜尋。
  • 深度研究(Deep Research):專門給需要深入、長時間、跨多來源網頁資料的任務。模型會以 agent 方式反覆搜尋、整合大量(可能數百個)來源。
編按:關於「深度研究」,也可以參考 OpenAI 自行推出的 Deep Research 方案

Responses API 寫法

編按:OpenAI 強力推薦 Responses API 寫法(Chat Completions 寫法較舊,猜測未來可能會被汰除)。OpenAI 在網路搜尋部分,兩個新舊 API 的運作分析可點

以下整理自官方網站

網路搜尋會被視為一個「工具」,是 OpenAI 內建的工具(內建工具包含網路搜尋、檔案搜尋、程式運作工具(Code Interpreter)等),因此可以「tools=[{"type": "web_search"}],」定義。

from openai import OpenAI
client = OpenAI()

response = client.responses.create(
model="gpt-5",
tools=[{"type": "web_search"}],
input="What was a positive news story from today?"
)

print(response.output_text)

舊版 OpenAI 推出的網路搜尋會使用「web_search_preview」指定。官方文件表示,「web_search_preview 這個版本功能較舊,不支援限制網域搜尋(domain filtering),也可能不支援某些參數。」

可使用模型包含:gpt-4o-mini、gpt-4o、gpt-4.1-mini、gpt-4.1、o4-mini、o3、gpt-5(推理:low/medium/high)皆可。
(不適用模型:gpt-5 minimal 和 gpt-4.1-nano)

使用網路搜尋回覆格式會附上「資料來源(citations)」,格式如下:

[
{
"type": "web_search_call",
"id": "ws_67c9fa0502748190b7dd390736892e100be649c1a5ff9609",
"status": "completed"
},
{
"id": "msg_67c9fa077e288190af08fdffda2e34f20be649c1a5ff9609",
"type": "message",
"status": "completed",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "On March 6, 2025, several news...",
"annotations": [
{
"type": "url_citation",
"start_index": 2606,
"end_index": 2758,
"url": "https://...",
"title": "Title..."
}
]
}
]
}
]

參數定義 - Domain Filtering:可限制網路搜尋的範圍。如果正在製作專業化工具,使用此參數可以避免一些農場文干擾 AI 閱讀。

response = client.responses.create(
model="gpt-5",
reasoning={"effort": "low"},
tools=[
{
"type": "web_search",
"filters": {
"allowed_domains": [
"pubmed.ncbi.nlm.nih.gov",
"clinicaltrials.gov",
"www.who.int",
"www.cdc.gov",
"www.fda.gov"
]
}
}
],
tool_choice="auto",
include=["web_search_call.action.sources"],
input="Please perform a web search on how semaglutide is used in the treatment of diabetes."
)
print(response.output_text)

參數定義 - location:限制搜尋地區(個人較少使用)

response = client.responses.create(
model="o4-mini",
tools=[{
"type": "web_search",
"user_location": {
"type": "approximate",
"country": "GB",
"city": "London",
"region": "London",
}
}],
input="What are the best restaurants around Granary Square?",
)
print(response.output_text)

參數定義 - search_context_size:可調整網路檢索回來上下文內容的數量(資料量)。

response = client.responses.create(
model="gpt-4.1",
tools=[{
"type": "web_search_preview",
"search_context_size": "low",
}],
input="What movie won best picture in 2025?",
)

OpenAI Agents SDK 寫法

最新支援「WebSearchTool()」OpenAI 內建工具。官方不太詳細文件請參考XD。

from agents import Agent, Runner, WebSearchTool

agent = Agent(
name="Assistant",
tools=[
WebSearchTool()
],
)

async def main():
result = await Runner.run(agent, "Which coffee shop should I go to, taking into account my preferences and the weather today in SF?")
print(result.final_output)

參數定義 - Domain Filtering:可限制網路搜尋的範圍。如果正在製作專業化工具,使用此參數可以避免一些農場文干擾 AI 閱讀。

官方文件不太清楚,筆者自行測試補充
from openai.types.responses.web_search_tool import Filters

web_search_agent = Agent(
name="Web Search Agent",
instructions='You are a Taiwan professional news analyst. Your task is to do the web search.',
tools=[
WebSearchTool(filters=Filters(
allowed_domains=["zh.wikipedia.org"]
))
],
model="gpt-4.1",
)

詳細參數對應可參考

Claude Web Search

筆者撰寫此文的本週,Claude API 才全面支援網路搜尋。(已正式官宣,但網頁仍寫「beta測試」版XD)

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
model="claude-opus-4-1-20250805",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Please analyze the content at https://example.com/article"
}
],
tools=[{
"type": "web_fetch_20250910",
"name": "web_fetch",
"max_uses": 5
}],
extra_headers={
"anthropic-beta": "web-fetch-2025-09-10"
}
)
print(response)

參數有以下可調:

    • max_uses: 限制每次對話最多可抓取多少個網頁(無預設上限)。
    • allowed_domains / blocked_domains: 白名單或黑名單限制允許抓取的網域,可防止敏感資訊洩漏或限制僅能存取特定站點。可使用 subpath(e.g. example.com/blog)。官方有提醒,請使用「example.com」而非「https://example.com」。此外,不能同時使用白名單跟黑名單,只能擇一使用。
    • max_content_tokens: 限制每次抓取後最大納入對話的 token 數,超過將截斷內容,避免花費過多 token 成本。
    • citations: 可控制是否在回應中啟用段落級引用,引用來源可追蹤到具體位置。

此外,官方很貼心的建議大家,用 max_content_tokens 這個參數,限制每次抓內容時最多納入多少 token,這樣就能依自己的用途和預算「控管最大消耗量」。

範例(說明常見情境下的 token 用量):

  • 一般網頁(10KB)大約佔用 2,500 token
  • 大型說明文件網頁(100KB)大約 25,000 token
  • 一份大型學術 PDF(500KB)約 125,000 token

Perplexity Web Search

Perplexity 本身就是以網路搜尋起家,個人覺得效果很好,且有很多參數靈活可調,但筆者認為對於繁體中文世界而言,輸出品質有待加強(較多中國用語、不小心輸出簡體字...努力下 prompt 解決XD)。

import requests

response = requests.post(
'https://api.perplexity.ai/chat/completions',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'model': 'sonar-pro',
'messages': [
{
'role': 'system',
'content: "You are a Taiwan professional news analyst based on Taiwan. Your task is to do the web search. Use 繁體中文、台灣用語 to reply. DO NOT USE English or 簡體中文。絕對不能使用大陸用語"
}
{
'role': 'user',
'content': "What are the major AI developments and announcements from today across the tech industry?"
}
],
'search_domain_filter': ["zh.wikipedia.org"],
'search_recency_filter': 'month'
}
)

print(response.json())

參數有以下可調:

  • search_mode 設定搜尋模式(web(預設)/ academic)
  • reasoning_effort設定每個查詢投入的推理資源(low/medium/high):僅 sonar-deep-research 模型下有效。
  • search_domain_filter 設定搜尋網域範圍(e.g. week/day)
// Allowlist: Only search these domains
"search_domain_filter": ["wikipedia.org", "github.com", "stackoverflow.com"]

// Denylist: Exclude these domains
"search_domain_filter": ["-reddit.com", "-pinterest.com", "-quora.com"]
  • search_recency_filter 設定搜尋時間
  • return_images 設定是否需圖片回傳(False(預設)/ True)
  • return_related_questions 可回傳後續問題(False(預設)/ True)

其餘參數與過去 OpenAI Completions API 雷同,也都有調整溫度、是否 Streaming、格式化輸出(Strucutred Output) 等參數,詳細可至 API 網站查看。


留言
avatar-img
留言分享你的想法!
avatar-img
CT
81會員
91內容數
加入沙龍追蹤 CT 更多文章!
CT的其他內容
2025/09/08
OpenAI Agents SDK 更新 Session 機制,大幅簡化 AI 記憶管理,讓開發支援對話型 AI、Agent 更輕鬆!本文介紹 Session 原理、三種記憶方法(OpenAI Conversations API、SQLite、SQLAlchemy),設計 AI Agent 更輕鬆!
Thumbnail
2025/09/08
OpenAI Agents SDK 更新 Session 機制,大幅簡化 AI 記憶管理,讓開發支援對話型 AI、Agent 更輕鬆!本文介紹 Session 原理、三種記憶方法(OpenAI Conversations API、SQLite、SQLAlchemy),設計 AI Agent 更輕鬆!
Thumbnail
2025/09/01
深入探討 OpenAI Agents SDK 的核心功能,包含 Agent、Context 使用、結構化輸出 (Output Types)、Handoffs、工具使用行為控制、以及進階技巧如強迫工具使用、自訂工具函式和 Tool Use Behavior 等建立更強大且高效的 AI Agent。
Thumbnail
2025/09/01
深入探討 OpenAI Agents SDK 的核心功能,包含 Agent、Context 使用、結構化輸出 (Output Types)、Handoffs、工具使用行為控制、以及進階技巧如強迫工具使用、自訂工具函式和 Tool Use Behavior 等建立更強大且高效的 AI Agent。
Thumbnail
2025/07/18
Claude Code 提供了一套 可自動化執行的 Hooks 機制,幫助我們在大型專案中避免常見錯誤、保持程式碼品質穩定。這篇文章將分享幾個實用的 Claude Code Hooks 範例與進階技巧,讓你打造更聰明、更可靠的開發流程。
Thumbnail
2025/07/18
Claude Code 提供了一套 可自動化執行的 Hooks 機制,幫助我們在大型專案中避免常見錯誤、保持程式碼品質穩定。這篇文章將分享幾個實用的 Claude Code Hooks 範例與進階技巧,讓你打造更聰明、更可靠的開發流程。
Thumbnail
看更多
你可能也想看
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
數據分析與解讀 隨著數據的爆炸式增長,能夠分析、解讀和應用數據的能力變得至關重要。這包括熟悉數據分析工具和技術,如統計學、數據挖掘、機器學習等。然而,僅靠短時間的數據分析並不足以提供深入見解。 要熟悉數據分析工具和技術,如統計學、數據挖掘和機器學習,可以從以下幾個方面入手: 基礎知識的學習
Thumbnail
數據分析與解讀 隨著數據的爆炸式增長,能夠分析、解讀和應用數據的能力變得至關重要。這包括熟悉數據分析工具和技術,如統計學、數據挖掘、機器學習等。然而,僅靠短時間的數據分析並不足以提供深入見解。 要熟悉數據分析工具和技術,如統計學、數據挖掘和機器學習,可以從以下幾個方面入手: 基礎知識的學習
Thumbnail
呈上篇文章,針對單排的圖像文字增加間隔,但如果文字是雙排呢 [OpenCV][Python]OCR分割及增加間隔[單排文字]
Thumbnail
呈上篇文章,針對單排的圖像文字增加間隔,但如果文字是雙排呢 [OpenCV][Python]OCR分割及增加間隔[單排文字]
Thumbnail
本文將說明如何去辨識出圖片文字​位置及高寬。
Thumbnail
本文將說明如何去辨識出圖片文字​位置及高寬。
Thumbnail
本文介紹了AI助手在數據收集和訓練過程中的工作原理和不斷進步的過程。關注的內容包括從公開的網絡資源、書籍、文章等渠道收集數據,數據的清洗和結構化處理,知識庫的增量更新以及訓練算法和模型的優化。如果大家對AI助手的發展還有任何其他感興趣的話題或建議,歡迎隨時告訴我們,讓我們共同探索,攜手進步。
Thumbnail
本文介紹了AI助手在數據收集和訓練過程中的工作原理和不斷進步的過程。關注的內容包括從公開的網絡資源、書籍、文章等渠道收集數據,數據的清洗和結構化處理,知識庫的增量更新以及訓練算法和模型的優化。如果大家對AI助手的發展還有任何其他感興趣的話題或建議,歡迎隨時告訴我們,讓我們共同探索,攜手進步。
Thumbnail
當我們在開發一個AI應用服務時, 常常會需要載入大模型, But… 我們總不可能每一次的請求就載入一次模型吧! 這樣太沒有效率了, 也非常的浪費資源, 因此我們通常會希望應用程式啟動時就能夠載入模型, 之後每一次的請求只要讓模型進行運算即可, 那麼在FastAPI的框架中究竟要如何使用呢? 首
Thumbnail
當我們在開發一個AI應用服務時, 常常會需要載入大模型, But… 我們總不可能每一次的請求就載入一次模型吧! 這樣太沒有效率了, 也非常的浪費資源, 因此我們通常會希望應用程式啟動時就能夠載入模型, 之後每一次的請求只要讓模型進行運算即可, 那麼在FastAPI的框架中究竟要如何使用呢? 首
Thumbnail
介紹OpenCV中的cv2.matchTemplate和cv2.minMaxLoc函數的使用方法和參數,提供程式範例以及相關特徵匹配的詳細介紹,讓讀者對此有更深入的瞭解。
Thumbnail
介紹OpenCV中的cv2.matchTemplate和cv2.minMaxLoc函數的使用方法和參數,提供程式範例以及相關特徵匹配的詳細介紹,讓讀者對此有更深入的瞭解。
Thumbnail
本文介紹如何用Python繪製散布圖與迴歸線
Thumbnail
本文介紹如何用Python繪製散布圖與迴歸線
Thumbnail
在 AI 研究的領域中,理解和解釋語言模型如何處理和回應特定輸入始終是一項巨大挑戰。這種復雜性不僅限於模型的規模和結構,還涉及到它們如何在內部做出決策。為了應對這一挑戰,OpenAI 推出了一款名為 Transformer Debugger (TDB) 的工具,旨在深入探索小型語言模型的行為
Thumbnail
在 AI 研究的領域中,理解和解釋語言模型如何處理和回應特定輸入始終是一項巨大挑戰。這種復雜性不僅限於模型的規模和結構,還涉及到它們如何在內部做出決策。為了應對這一挑戰,OpenAI 推出了一款名為 Transformer Debugger (TDB) 的工具,旨在深入探索小型語言模型的行為
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News