Tavily i SerpAPI do wyszukiwania przez agenta
Konfiguracja API, konstruowanie zapytań i parsowanie wyników dla narzędzi wyszukiwania internetowego.
Tavily i SerpAPI do wyszukiwania przez agenta to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.
Dlaczego agenci potrzebują wyszukiwania w sieci
LLM mają datę odcięcia wiedzy. W przypadku pytań o bieżące wydarzenia, aktualne ceny, najnowsze wiadomości lub szybko zmieniające się tematy dane treningowe modelu są nieaktualne.
Narzędzia do wyszukiwania w sieci, takie jak Tavily i SerpApi, zapewniają agentom dostęp do internetu w czasie rzeczywistym, wypełniając lukę między statycznymi danymi treningowymi a bieżącą rzeczywistością.
Tavily: rozwiązanie stworzone z myślą o agentach AI
Tavily to interfejs API wyszukiwania zaprojektowany specjalnie dla agentów AI. W przeciwieństwie do ogólnego skrobania sieci zwraca czyste, uporządkowane wyniki z wcześniej wyodrębnioną treścią — bez potrzeby parsowania HTML.
Zainstaluj za pomocą pip install tavily-python. Klucz API można uzyskać na stronie tavily.com.
from tavily import TavilyClient
import os
client = TavilyClient(api_key=os.getenv('TAVILY_API_KEY'))
results = client.search(
query='latest OpenAI GPT-5 release date',
max_results=5
)
for r in results['results']:
print(r['title'])
print(r['url'])
print(r['content'][:200])
print('---')Parametry wyszukiwania Tavily
Tavily oferuje kilka parametrów sterujących działaniem wyszukiwania. Najbardziej przydatne w przypadku agentów to max_results, search_depth oraz include_domains / exclude_domains.
# Basic search
results = client.search(
query='Python async best practices 2024',
max_results=5,
search_depth='basic' # 'basic' (fast) or 'advanced' (slower, deeper)
)
# Domain-filtered search
results = client.search(
query='machine learning papers',
max_results=5,
include_domains=['arxiv.org', 'papers.nips.cc', 'openreview.net']
)
# Exclude low-quality domains
results = client.search(
query='stock market today',
max_results=5,
exclude_domains=['pinterest.com', 'quora.com']
)Struktura wyników Tavily
Każdy wynik Tavily zawiera: title, url, content (wyodrębniony tekst), score (trafność) oraz opcjonalnie published_date. Pole content zawiera czysty tekst — bez tagów HTML.
results = client.search('Claude AI pricing 2024', max_results=3)
for r in results['results']:
print(f"Title: {r['title']}")
print(f"URL: {r['url']}")
print(f"Score: {r.get('score', 'N/A')}")
print(f"Date: {r.get('published_date', 'unknown')}")
print(f"Content: {r['content'][:300]}")
print()
# Tavily also returns 'answer' — a direct answer synthesized from results
if results.get('answer'):
print('Direct answer:', results['answer'])SerpApi: programistyczny dostęp do wyszukiwarki Google
SerpApi zapewnia ustrukturyzowany dostęp do wyszukiwarek Google, Bing, YouTube i innych. Zwraca bogate dane, w tym wyniki organiczne, panele wiedzy, wyróżnione fragmenty oraz wyniki zakupów.
Zainstaluj za pomocą pip install google-search-results.
from serpapi import GoogleSearch
import os
params = {
'q': 'best Python web frameworks 2024',
'api_key': os.getenv('SERPAPI_KEY'),
'num': 5, # number of results
'hl': 'en', # language
'gl': 'us', # country
'safe': 'active' # safe search
}
search = GoogleSearch(params)
results = search.get_dict()
for r in results.get('organic_results', []):
print(r['title'])
print(r['link'])
print(r.get('snippet', ''))
print()Struktura wyników SerpApi
SerpApi zwraca bogatsze ustrukturyzowane dane niż Tavily. Kluczowe pola w organic_results to: title, link, snippet i position. Wyróżnione fragmenty pojawiają się osobno w polu answer_box.
def extract_serp_results(serp_data, max_results=5):
results = []
# Featured snippet / answer box (highest priority)
if 'answer_box' in serp_data:
box = serp_data['answer_box']
results.append({
'title': box.get('title', 'Featured Snippet'),
'url': box.get('link', ''),
'snippet': box.get('answer') or box.get('snippet', ''),
'is_featured': True
})
# Organic results
for r in serp_data.get('organic_results', [])[:max_results]:
results.append({
'title': r.get('title', ''),
'url': r.get('link', ''),
'snippet': r.get('snippet', ''),
'position': r.get('position', 0),
'is_featured': False
})
return results
if __name__ == '__main__':
demo_serp = {
'answer_box': {'title': 'Python version', 'link': 'https://python.org', 'answer': '3.13'},
'organic_results': [
{'title': 'Python Docs', 'link': 'https://docs.python.org', 'snippet': 'Official docs', 'position': 1},
],
}
for r in extract_serp_results(demo_serp):
print(f"{'[FEATURED] ' if r['is_featured'] else ''}{r['title']} - {r['url']}")
Opcje aktualności i filtrowanie według daty
W przypadku zapytań zależnych od czasu należy filtrować wyniki według daty publikacji. Tavily obsługuje parametr days, a SerpApi parametr tbs (wyszukiwanie według czasu).
# Tavily: results from last 7 days
recent_results = client.search(
query='AI news',
max_results=5,
days=7 # only results published in last 7 days
)
# SerpApi: results from last month
params = {
'q': 'AI news',
'api_key': os.getenv('SERPAPI_KEY'),
'tbs': 'qdr:m', # qdr:d=day, qdr:w=week, qdr:m=month, qdr:y=year
'num': 5
}
search = GoogleSearch(params)
results = search.get_dict()Tworzenie narzędzia wyszukiwania dla LangChain
Aby używać Tavily lub SerpApi wewnątrz agenta LangChain, należy opakować funkcję wyszukiwania jako Tool. Agent będzie mógł wywoływać ją jak każde inne narzędzie, kierując się dostarczonym opisem.
from langchain.tools import Tool
from tavily import TavilyClient
import os
tavily = TavilyClient(api_key=os.getenv('TAVILY_API_KEY'))
def tavily_search(query: str) -> str:
results = tavily.search(query=query, max_results=3, search_depth='basic')
output = []
for r in results['results']:
output.append(f"Title: {r['title']}\nURL: {r['url']}\nContent: {r['content'][:500]}")
return '\n\n'.join(output)
web_search_tool = Tool(
name='web_search',
func=tavily_search,
description='Search the web for current information. Input: a search query string. Returns top results with title, URL, and content.'
)Filtrowanie domen w celu kontroli jakości
Nie wszystkie wyniki wyszukiwania są wiarygodne. Filtrowanie domen pozwala ograniczyć wyszukiwanie do zaufanych źródeł (na potrzeby badań) lub wykluczyć domeny zawierające dużo spamu (w przypadku ogólnych zapytań).
TRUSTED_DOMAINS = {
'medical': ['nih.gov', 'who.int', 'mayoclinic.org', 'pubmed.ncbi.nlm.nih.gov'],
'legal': ['law.cornell.edu', 'supreme.justia.com', 'congress.gov'],
'tech': ['docs.python.org', 'developer.mozilla.org', 'stackoverflow.com'],
'finance': ['sec.gov', 'federalreserve.gov', 'bloomberg.com']
}
SPAM_DOMAINS = ['pinterest.com', 'quora.com', 'answers.yahoo.com', 'wikihow.com']
def domain_aware_search(query, domain_category=None):
kwargs = {'query': query, 'max_results': 5, 'exclude_domains': SPAM_DOMAINS}
if domain_category and domain_category in TRUSTED_DOMAINS:
kwargs['include_domains'] = TRUSTED_DOMAINS[domain_category]
return client.search(**kwargs)Obsługa błędów wyszukiwania i limitów zapytań
Usługi Tavily i SerpApi mają limity zapytań. Należy zaimplementować mechanizm ponawiania prób z wykładniczym opóźnieniem oraz prawidłowo obsługiwać sytuację, w której wyszukiwanie nie zwraca wyników.
import time
def robust_search(query, max_retries=3):
for attempt in range(max_retries):
try:
results = client.search(query=query, max_results=5)
if results and results.get('results'):
return results['results']
print(f'No results for: {query}')
return []
except Exception as e:
if '429' in str(e) or 'rate' in str(e).lower():
wait = 2 ** attempt # 1s, 2s, 4s
print(f'Rate limited. Waiting {wait}s...')
time.sleep(wait)
else:
print(f'Search error: {e}')
return []
return []Normalizacja długości fragmentów
Fragmenty wyników mogą znacznie różnić się długością: niektóre mają 50 znaków, a inne 2000. Normalizacja długości fragmentów zapewnia każdemu źródłu równą reprezentację w kontekście LLM.
MAX_SNIPPET_CHARS = 600
MIN_SNIPPET_CHARS = 100
def normalize_snippets(results):
normalized = []
for r in results:
content = r.get('content') or r.get('snippet', '')
# Truncate long snippets at sentence boundary
if len(content) > MAX_SNIPPET_CHARS:
# Find last sentence end before limit
cutoff = content.rfind('. ', 0, MAX_SNIPPET_CHARS)
content = content[:cutoff + 1] if cutoff > 0 else content[:MAX_SNIPPET_CHARS]
# Skip very short snippets
if len(content) < MIN_SNIPPET_CHARS:
continue
normalized.append({**r, 'content': content})
return normalized
if __name__ == '__main__':
demo_results = [
{'content': 'Short.'},
{'content': 'A' * 200 + '. ' + 'B' * 500},
]
for r in normalize_snippets(demo_results):
print(f"Length {len(r['content'])}: {r['content'][:60]}...")
Sprawdzenie wiedzy
Jaka jest najważniejsza przewaga Tavily nad ogólnym podejściem opartym na skrobaniu sieci w przypadku agentów AI?
Podsumowanie: Tavily i SerpApi do wyszukiwania przez agentów
Interfejsy API wyszukiwania w sieci zapewniają agentom dostęp do aktualnych informacji wykraczających poza datę odcięcia ich danych treningowych. Tavily został stworzony z myślą o agentach AI i oferuje czyste wyodrębnianie treści, natomiast SerpApi zapewnia bogatsze ustrukturyzowane dane Google, w tym wyróżnione fragmenty i panele wiedzy.
Najważniejsze praktyki to filtrowanie domen w celu kontroli jakości, stosowanie filtrów aktualności w przypadku zapytań zależnych od czasu, normalizowanie długości fragmentów oraz implementowanie ponawiania prób z opóźnieniem w celu obsługi limitów zapytań.
Ucz się AI Agents dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 60
- Lekcje
- 239
Często zadawane pytania
Czy lekcja „Tavily i SerpAPI do wyszukiwania przez agenta” jest bezpłatna?
Tak — pełny tekst „Tavily i SerpAPI do wyszukiwania przez agenta” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.
Co nauczysz się w „Tavily i SerpAPI do wyszukiwania przez agenta”?
Konfiguracja API, konstruowanie zapytań i parsowanie wyników dla narzędzi wyszukiwania internetowego. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć AI Agents?
Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Tavily i SerpAPI do wyszukiwania przez agenta”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?
Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Tavily i SerpAPI do wyszukiwania przez agenta
- Ranking i filtrowanie wyników wyszukiwania
- Wzorzec pętli pogłębionego researchu
- Łączenie wyszukiwania internetowego z RAG