Aller au contenu principal

Patterns de combinaison d'outils

Combiner les outils pour des taches complexes

Les outils de Grok deviennent veritablement puissants quand vous les combinez. Une recherche web seule fournit des donnees brutes. Ajoutez l’execution de code, et vous pouvez analyser ces donnees. Ajoutez vos fonctions personnalisees, et vous pouvez agir sur les resultats. Cette lecon presente les patterns de combinaison les plus utiles.

Pattern 1 : Recherche + Analyse

Le cas d’usage le plus courant combine la recherche web avec l’execution de code pour collecter des donnees et en tirer des conclusions :

response = await client.chat.completions.create(
    model="grok-4",
    messages=[{
        "role": "user",
        "content": "Recherche les cours de Tesla, Apple et Microsoft sur les 30 derniers jours. "
                   "Calcule la performance relative et identifie la tendance."
    }],
    tools=[
        {"type": "web_search"},
        {"type": "code_execution"}
    ],
    max_turns=5
)

Grok commence par une recherche web pour obtenir les donnees financieres, puis utilise l’execution de code pour calculer les performances et tracer un graphique. Tout se passe dans une seule requete grace au max_turns suffisant.

Pattern 2 : Actualites multi-sources

La combinaison de Web Search et X Search offre une couverture complete sur un sujet :

response = await client.chat.completions.create(
    model="grok-4",
    messages=[{
        "role": "user",
        "content": "Quelles sont les reactions a l'annonce de la nouvelle reglementation IA en Europe ? "
                   "Compare les sources officielles et les reactions sur X."
    }],
    tools=[
        {"type": "web_search"},
        {"type": "x_search"}
    ],
    max_turns=5
)

La recherche web capture les articles de presse et les communiques officiels, tandis que la recherche X capture les reactions en temps reel et les opinions.

Pattern 3 : Extraction multi-sources avec fonctions

Pour des workflows plus complexes, combinez les outils serveur avec vos fonctions personnalisees :

tools = [
    {"type": "web_search"},
    {"type": "code_execution"},
    {
        "type": "function",
        "function": {
            "name": "save_to_database",
            "description": "Sauvegarde les resultats structures dans la base de donnees",
            "parameters": {
                "type": "object",
                "properties": {
                    "category": {"type": "string"},
                    "data": {"type": "object"},
                    "source_urls": {"type": "array", "items": {"type": "string"}}
                },
                "required": ["category", "data"]
            }
        }
    }
]

async def research_and_save(topic: str) -> str:
    messages = [{"role": "user", "content": f"Recherche et analyse : {topic}. "
                 "Sauvegarde les resultats structures."}]

    while True:
        response = await client.chat.completions.create(
            model="grok-4",
            messages=messages,
            tools=tools,
            max_turns=5
        )

        message = response.choices[0].message

        if not message.tool_calls:
            return message.content

        messages.append(message)
        for tc in message.tool_calls:
            if tc.function.name == "save_to_database":
                result = await save_to_db(json.loads(tc.function.arguments))
                messages.append({
                    "role": "tool",
                    "tool_call_id": tc.id,
                    "content": json.dumps(result)
                })

Dans ce pattern, Grok recherche les informations, les analyse avec du code, puis appelle votre fonction pour sauvegarder les resultats. Le workflow est entierement autonome.

Pattern 4 : Validation croisee

Utilisez plusieurs sources pour verifier la fiabilite d’une information :

response = await client.chat.completions.create(
    model="grok-4",
    messages=[{
        "role": "user",
        "content": "Verifie cette affirmation en croisant les sources : "
                   "'La France a produit 70% de son electricite a partir du nucleaire en 2024.' "
                   "Compare les donnees de plusieurs sources officielles."
    }],
    tools=[
        {"type": "web_search"},
        {"type": "code_execution"}
    ],
    max_turns=8
)

Avec un max_turns plus eleve, Grok peut effectuer plusieurs recherches successives pour croiser les informations et utiliser l’execution de code pour comparer les chiffres.

Bonnes pratiques

Specifier les outils dans le prompt

Ne vous contentez pas de declarer les outils dans le parametre tools. Indiquez explicitement dans votre prompt ce que vous attendez :

# BON : le prompt guide l'utilisation des outils
"Recherche les donnees, puis utilise le code pour generer un tableau comparatif.
Sauvegarde le resultat final via save_to_database."

# MAUVAIS : le prompt ne mentionne pas les outils
"Donne-moi les informations sur ce sujet."

Limiter les outils aux besoins

N’activez pas tous les outils si vous n’en avez besoin que d’un seul. Chaque outil ajoute du contexte dans le prompt systeme, consommant des tokens et pouvant distraire le modele.

Points cles a retenir

  • Recherche + Code Execution permet de collecter et analyser des donnees en une seule requete
  • Web Search + X Search offre une couverture complete (articles + reactions)
  • Les fonctions personnalisees etendent les capacites au-dela de ce que les outils serveur offrent
  • Guidez explicitement Grok dans votre prompt sur les outils a utiliser
  • Adaptez max_turns a la complexite du workflow (5-8 pour les combinaisons multi-outils)
  • N’activez que les outils necessaires pour optimiser la consommation de tokens