Tavily e SerpAPI per la ricerca degli agenti
Configurazione delle API, costruzione delle query e parsing dei risultati per gli strumenti di ricerca web
Tavily e SerpAPI per la ricerca degli agenti è una lezione AI Agents gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Agents, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Agents include 4 lezioni in totale.
Perché gli agenti hanno bisogno della ricerca web
Gli LLM hanno una data limite di conoscenza. Per domande su eventi attuali, prezzi in tempo reale, notizie recenti o argomenti in rapida evoluzione, i dati di addestramento del modello non sono aggiornati.
Gli strumenti di ricerca web come Tavily e SerpApi offrono agli agenti accesso a Internet in tempo reale, colmando il divario tra i dati di addestramento statici e la realtà attuale.
Tavily: progettato appositamente per gli agenti AI
Tavily è un'API di ricerca progettata specificamente per gli agenti AI. A differenza dello scraping web generico, restituisce risultati puliti e strutturati con contenuti pre-estratti: non è necessario analizzare l'HTML.
Installi con pip install tavily-python. Ottenga una chiave API all'indirizzo 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('---')Parametri di ricerca di Tavily
Tavily offre diversi parametri per controllare il comportamento della ricerca. I più utili per gli agenti sono max_results, search_depth e 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']
)Struttura dei risultati di Tavily
Ogni risultato di Tavily contiene: title, url, content (testo estratto), score (rilevanza) e, facoltativamente, published_date. Il campo content contiene testo pulito, senza tag 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: accesso programmatico a Google
SerpApi fornisce accesso strutturato a Google, Bing, YouTube e altri motori di ricerca. Restituisce dati dettagliati, tra cui risultati organici, riquadri informativi, snippet in evidenza e risultati di shopping.
Installi con 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()Struttura dei risultati di SerpApi
SerpApi restituisce dati strutturati più ricchi di Tavily. I campi principali di organic_results sono: title, link, snippet e position. Gli snippet in evidenza compaiono separatamente in 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']}")
Opzioni di aggiornamento e filtraggio per data
Per le query sensibili al fattore tempo, filtri i risultati in base alla data di pubblicazione. Tavily supporta il parametro days; SerpApi supporta il parametro tbs (ricerca basata sul tempo).
# 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()Creazione di uno strumento di ricerca per LangChain
Per utilizzare Tavily o SerpApi all'interno di un agente LangChain, incapsuli la funzione di ricerca in un Tool. L'agente potrà quindi chiamarlo come qualsiasi altro strumento, in base alla descrizione fornita.
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.'
)Filtraggio dei domini per il controllo della qualità
Non tutti i risultati di ricerca sono affidabili. Il filtraggio dei domini consente di limitare le ricerche a fonti attendibili (per la ricerca) o di escludere domini ricchi di spam (per le query generiche).
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)Gestione degli errori di ricerca e dei limiti di frequenza
Sia Tavily sia SerpApi hanno limiti di frequenza. Implementi la logica di retry con backoff esponenziale e gestisca correttamente il caso in cui la ricerca non restituisca risultati.
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 []Normalizzazione della lunghezza degli snippet
La lunghezza degli snippet dei risultati varia enormemente: alcuni contengono 50 caratteri, altri 2000 caratteri. Normalizzare la lunghezza degli snippet garantisce a ogni fonte una rappresentazione equivalente nel contesto dell'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]}...")
Verifica delle conoscenze
Qual è il principale vantaggio di Tavily rispetto a un approccio di scraping web generico per gli agenti AI?
Riepilogo: Tavily e SerpApi per la ricerca degli agenti
Le API di ricerca web consentono agli agenti di accedere a informazioni aggiornate oltre la data limite dei loro dati di addestramento. Tavily è progettato appositamente per gli agenti AI e offre un'estrazione pulita dei contenuti; SerpApi fornisce dati Google strutturati più ricchi, inclusi snippet in evidenza e riquadri informativi.
Pratiche fondamentali: utilizzi il filtraggio dei domini per il controllo della qualità, applichi filtri di aggiornamento per le query sensibili al fattore tempo, normalizzi la lunghezza degli snippet e implementi la logica di retry con backoff per gestire i limiti di frequenza.
Impara AI Agents con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 60
- Lezioni
- 239
Domande Frequenti
La lezione «Tavily e SerpAPI per la ricerca degli agenti» è gratuita?
Sì — il testo completo di «Tavily e SerpAPI per la ricerca degli agenti» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Agents, passa a CoddyKit PRO. Il corso AI Agents include 4 lezioni in totale.
Cosa imparerò in «Tavily e SerpAPI per la ricerca degli agenti»?
Configurazione delle API, costruzione delle query e parsing dei risultati per gli strumenti di ricerca web Eserciti AI Agents con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare AI Agents?
Non è richiesta alcuna esperienza precedente. AI Agents su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Tavily e SerpAPI per la ricerca degli agenti»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione AI Agents?
Sì. Ogni lezione AI Agents include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Tavily e SerpAPI per la ricerca degli agenti
- Classificazione e filtraggio dei risultati di ricerca
- Pattern del ciclo di ricerca approfondita
- Combinazione della ricerca web con RAG