Jak dodać Web Search w czasie rzeczywistym do agenta OpenAI lub Claude w 4 krokach

Chcesz, by Twój agent opierał odpowiedzi na aktualnych informacjach? Potrzebujesz dokładnie dwóch rzeczy: API wyszukiwania zwracającego snippety gotowe dla LLM oraz definicji narzędzia, które model może wywołać. Ten przewodnik robi obie rzeczy w 4 krokach.
TL;DR
- •Krok 1: zdobądź API key (za darmo) i przetestuj endpoint za pomocą curl.
- •Krok 2: pobierz tool schema OpenAI/Claude bezpośrednio z API — bez pisania JSON ręcznie.
- •Krok 3: zarejestruj narzędzie u swojego agenta (OpenAI Assistants, Anthropic Messages, LangChain lub n8n).
- •Krok 4: zaimplementuj handler narzędzia, który wywołuje /api/search/web i zwraca wyniki do modelu.
Dlaczego to jest krótkie
Większość poradników \"dodaj web search do swojego LLM\" jest długa, bo w rzeczywistości to poradniki o jakimś SDK do API wyszukiwania albo o ciężkim frameworku agentowym. Ten nie. Cała robota to: wybierz endpoint, zarejestruj go jako narzędzie, napisz 5-liniowy handler.
1Zdobądź API key (za darmo) i wywołaj endpoint
Zarejestruj się na apipick.com/dashboard/api-keys. Nowe konta otrzymują 100 darmowych credits — bez karty kredytowej. Utwórz key i przetestuj endpoint:
curl -X POST https://www.apipick.com/api/search/web \
-H "x-api-key: pk_yourkey" \
-H "Content-Type: application/json" \
-d '{"query": "what is retrieval augmented generation"}'Otrzymasz krótką, uszeregowaną listę tytułów, URL-i i snippetów. Potwierdzenie, że to działa w curl, oszczędza czas na debugging później.
2Pobierz tool schema (nie pisz go ręcznie)
API Pick udostępnia gotowe do wklejenia tool schemas pod GET /api/search/web/tool-schema. Odpowiedź zawiera zarówno definicję function w stylu OpenAI, jak i definicję tool use dla Claude.
curl https://www.apipick.com/api/search/web/tool-schemaZcache'uj wynik — nie zmienia się między wywołaniami. Pisanie function schemas ręcznie to najczęstsze źródło bugów w kodzie agentów (zły type, złe pola required, brakujący description).
3Zarejestruj narzędzie u swojego agenta
OpenAI Assistants
from openai import OpenAI
import requests
client = OpenAI()
schema = requests.get("https://www.apipick.com/api/search/web/tool-schema").json()
assistant = client.beta.assistants.create(
name="Research Agent",
model="gpt-4o",
instructions="Use web_search whenever the user asks about current events or anything that changes after your training cutoff.",
tools=[{"type": "function", "function": schema["openai"]}],
)Anthropic Claude
import anthropic
import requests
schema = requests.get("https://www.apipick.com/api/search/web/tool-schema").json()
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
tools=[schema["claude"]],
messages=[{"role": "user", "content": "Summarise this week's RAG research."}],
)LangChain
from langchain.tools import tool
import requests
@tool
def web_search(query: str) -> dict:
"""Real-time web search. Use for any question that needs current information."""
return requests.post(
"https://www.apipick.com/api/search/web",
headers={"x-api-key": "pk_yourkey"},
json={"query": query},
).json()n8n
Dodaj węzeł HTTP Request: method POST, URL https://www.apipick.com/api/search/web, nagłówek x-api-key: pk_yourkey, body JSON {"query": "{{ $json.query }}"}. Podłącz go do węzła agenta lub LLM Chain. Bez SDK.
4Obsłuż wywołanie narzędzia
W przypadku OpenAI Assistants, gdy run zatrzyma się ze statusem requires_action, uruchom wyszukiwanie i prześlij output:
import json, time, requests
from openai import OpenAI
client = OpenAI()
KEY = "pk_yourkey"
def run_with_tool(thread_id: str, assistant_id: str):
run = client.beta.threads.runs.create(thread_id=thread_id, assistant_id=assistant_id)
while True:
run = client.beta.threads.runs.retrieve(thread_id=thread_id, run_id=run.id)
if run.status == "requires_action":
outputs = []
for call in run.required_action.submit_tool_outputs.tool_calls:
if call.function.name == "web_search":
args = json.loads(call.function.arguments)
result = requests.post(
"https://www.apipick.com/api/search/web",
headers={"x-api-key": KEY},
json=args,
).json()
outputs.append({"tool_call_id": call.id, "output": json.dumps(result)})
client.beta.threads.runs.submit_tool_outputs(
thread_id=thread_id, run_id=run.id, tool_outputs=outputs,
)
elif run.status in ("completed", "failed", "cancelled", "expired"):
return run
time.sleep(0.5)Pętla Anthropic Messages API jest podobna — gdy odpowiedź zawiera blok tool_use, wywołaj API, a następnie odeślij wynik jako blok treści tool_result w kolejnej turze.
Dopinanie pętli
- Ustaw opis narzędzia z perspektywy modelu: \"Use this when the user asks about current events, breaking news, or anything that may have changed after your training cutoff.\" Nie mów \"to jest API do web search\".
- Cache'uj wyniki w swoim handlerze, gdy to samo query pojawia się dwa razy w sesji. Wyniki web search są stabilne przez ~minuty; nie musisz płacić 15 credits dwa razy w tej samej rozmowie.
- Dodaj filtr
start_date, gdy liczy się świeżość. \"Wiadomości z tego tygodnia\" bez filtra daty często zwracają nagłówki sprzed roku.
Dokąd dalej
Gdy Twój agent potrafi już wyszukiwać, naturalnym kolejnym krokiem jest czytanie podlinkowanych stron. Dodaj URL Content Extraction API jako drugie narzędzie — to samo auth, ta sama postać JSON, do 25 URL-i na wywołanie. Połączenie \"search + extract\" to najmniejszy użyteczny agent research.
Najczęściej zadawane pytania
Czy mogę użyć tego z OpenAI Responses API zamiast Assistants?
Tak. Ten sam tool schema działa w client.responses.create() — przekaż go przez tools=[{...}] dokładnie tak, jak pokazano w dokumentacji OpenAI. Kształt handlera jest identyczny: sparsuj tool_calls, uruchom POST /api/search/web, zwróć JSON.
Czy muszę sformatować wyniki przed zwróceniem ich do modelu?
Nie. POST /api/search/web zwraca uszeregowane title + URL + snippet przyjazny dla LLM. Przekaż surowy JSON jako wynik narzędzia. Model zacytuje snippety i podlinkuje URL-e.
Ile kosztuje każda tura agenta?
Każde wywołanie web search to 15 credits (~0,015 $ przy 5 $/5 000 credits). Typowa tura agenta używająca narzędzia raz to znacznie mniej niż jeden amerykański cent kosztu wyszukiwania — to tokeny LLM dominują.
Co jeśli model nigdy nie wywoła narzędzia?
Spraw, by opis narzędzia był konkretny. "Use this for any question that requires current or post-training information" działa znacznie lepiej niż "web search". Modele kierują się do narzędzi, których cel rozumieją.
Czy mogę ograniczyć wyniki do kraju lub zakresu dat?
Tak. Przekaż country_code (ISO 3166-1 alpha-2) i/lub start_date / end_date (YYYY-MM-DD). Dodaj je jako parametry w swoim tool schema, jeśli chcesz, żeby wybierał je model; albo zakoduj je na stałe w handlerze, jeśli Twój agent ma stały locale lub wymóg świeżości.
API użyte w tym artykule
Sarah Choy jest CEO API Pick. Pisze o budowaniu produkcyjnych API dla agentów AI i przepływów pracy z LLM.