0Pricing
AI Agents · Leçon

Tavily et SerpAPI pour la recherche des agents

Configuration de l’API, construction des requêtes et analyse des résultats pour les outils de recherche Web.

Tavily et SerpAPI pour la recherche des agents est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.

Pourquoi les agents ont besoin de la recherche Web

Les LLM ont une date de coupure de leurs connaissances. Pour les questions portant sur l'actualité, les prix en temps réel, les informations récentes ou les sujets qui évoluent rapidement, les données d'entraînement du modèle sont obsolètes.

Les outils de recherche Web comme Tavily et SerpApi donnent aux agents un accès en temps réel à Internet, comblant l'écart entre les données d'entraînement statiques et la réalité actuelle.

Tavily : conçu spécifiquement pour les agents IA

Tavily est une API de recherche conçue spécifiquement pour les agents IA. Contrairement à l'extraction Web générale, elle renvoie des résultats propres et structurés avec du contenu préextrait : aucune analyse HTML n'est nécessaire.

Installez-la avec pip install tavily-python. Obtenez une clé API sur 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('---')

Paramètres de recherche de Tavily

Tavily propose plusieurs paramètres pour contrôler le comportement de la recherche. Les plus utiles pour les agents sont max_results, search_depth et 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']
)

Structure des résultats de Tavily

Chaque résultat de Tavily contient : title, url, content (texte extrait), score (pertinence) et éventuellement published_date. Le champ content contient du texte propre, sans balises 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 : accès programmatique à la recherche Google

SerpApi fournit un accès structuré à Google, Bing, YouTube et à d'autres moteurs de recherche. Elle renvoie des données riches, notamment des résultats naturels, des panneaux de connaissances, des extraits optimisés et des résultats d'achat.

Installez-la avec 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()

Structure des résultats de SerpApi

SerpApi renvoie des données structurées plus riches que Tavily. Les champs clés de organic_results sont : title, link, snippet et position. Les extraits optimisés apparaissent séparément sous 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']}")

Options de fraîcheur et filtrage par date

Pour les requêtes sensibles au facteur temps, filtrez les résultats selon leur date de publication. Tavily prend en charge le paramètre days ; SerpApi prend en charge le paramètre tbs (recherche basée sur le temps).

# 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()

Création d'un outil de recherche pour LangChain

Pour utiliser Tavily ou SerpApi au sein d'un agent LangChain, encapsulez la fonction de recherche dans un Tool. L'agent peut ensuite l'appeler comme n'importe quel autre outil, en fonction de la description que vous fournissez.

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.'
)

Filtrage des domaines pour contrôler la qualité

Les résultats de recherche ne sont pas tous fiables. Le filtrage des domaines vous permet de limiter les recherches à des sources de confiance, pour la recherche, ou d'exclure les domaines fortement associés au spam, pour les requêtes générales.

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)

Gestion des erreurs de recherche et des limites de débit

Tavily et SerpApi imposent toutes deux des limites de débit. Mettez en œuvre une logique de nouvelle tentative avec temporisation exponentielle et gérez correctement le cas où la recherche ne renvoie aucun résultat.

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 []

Normalisation de la longueur des extraits

La longueur des extraits de résultats varie énormément : certains font 50 caractères, d'autres 2 000 caractères. Normaliser la longueur des extraits garantit que chaque source bénéficie d'une représentation équivalente dans le contexte du 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]}...")

Vérification des connaissances

Quel est le principal avantage de Tavily par rapport à une approche générale d'extraction Web pour les agents IA ?

Récapitulatif : Tavily et SerpApi pour la recherche des agents

Les API de recherche Web donnent aux agents accès à des informations actuelles qui dépassent la date de coupure de leurs connaissances. Tavily est conçu pour les agents IA et offre une extraction propre du contenu ; SerpApi fournit des données Google structurées plus riches, notamment des extraits optimisés et des panneaux de connaissances.

Bonnes pratiques : utilisez le filtrage des domaines pour contrôler la qualité, appliquez des filtres de fraîcheur pour les requêtes sensibles au facteur temps, normalisez la longueur des extraits et mettez en œuvre une logique de nouvelle tentative avec temporisation progressive pour gérer les limites de débit.

Questions Fréquemment Posées

La leçon « Tavily et SerpAPI pour la recherche des agents » est-elle gratuite ?

Oui — le texte complet de « Tavily et SerpAPI pour la recherche des agents » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Tavily et SerpAPI pour la recherche des agents » ?

Configuration de l’API, construction des requêtes et analyse des résultats pour les outils de recherche Web. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer AI Agents ?

Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Tavily et SerpAPI pour la recherche des agents » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?

Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Tavily et SerpAPI pour la recherche des agents
  2. Classer et filtrer les résultats de recherche
  3. Schéma de boucle de recherche approfondie
  4. Combiner recherche Web et RAG
← Retour à AI Agents