Aller au contenu principal

Combiner Computer Use avec d'autres tools

L’IA ne se limite pas à l’écran

Computer Use est puissant seul, mais il devient redoutable quand vous le combinez avec d’autres outils (tools) de l’API Claude. Le modèle peut utiliser Computer Use pour naviguer sur le web ET appeler des fonctions personnalisées pour traiter les données, interroger des bases de données ou interagir avec des API tierces.

L’architecture multi-tools

L’API Claude permet de déclarer plusieurs outils dans un même appel. Le modèle choisit l’outil le plus adapté à chaque étape :

import anthropic

client = anthropic.Anthropic()

tools = [
    # Outil 1 : Computer Use (navigation visuelle)
    {
        "type": "computer_20241022",
        "name": "computer",
        "display_width_px": 1280,
        "display_height_px": 720,
    },
    # Outil 2 : Sauvegarder dans une base de données
    {
        "name": "save_to_database",
        "description": "Sauvegarde des données extraites dans PostgreSQL.",
        "input_schema": {
            "type": "object",
            "properties": {
                "table": {"type": "string", "description": "Nom de la table"},
                "data": {"type": "object", "description": "Données à insérer"},
            },
            "required": ["table", "data"],
        },
    },
    # Outil 3 : Envoyer un email de notification
    {
        "name": "send_email",
        "description": "Envoie un email de notification.",
        "input_schema": {
            "type": "object",
            "properties": {
                "to": {"type": "string"},
                "subject": {"type": "string"},
                "body": {"type": "string"},
            },
            "required": ["to", "subject", "body"],
        },
    },
]

Dispatch des outils

Votre boucle principale doit maintenant router les appels vers le bon outil :

def dispatch_tool(tool_name: str, tool_input: dict, page=None):
    """Route l'appel vers le bon outil."""

    if tool_name == "computer":
        # Action Computer Use sur le navigateur
        execute_action(page, tool_input)
        return capture_screenshot(page)

    elif tool_name == "save_to_database":
        # Insertion en base de données
        return save_to_db(tool_input["table"], tool_input["data"])

    elif tool_name == "send_email":
        # Envoi d'email via SMTP
        return send_notification(
            to=tool_input["to"],
            subject=tool_input["subject"],
            body=tool_input["body"],
        )

    else:
        return {"error": f"Outil inconnu : {tool_name}"}

Cas concret : veille concurrentielle

Voici un workflow complet qui combine navigation web et traitement de données :

task = """
Tu es un agent de veille concurrentielle. Voici ta mission :

1. NAVIGATION (Computer Use) :
   - Va sur https://competitor.example.com/pricing
   - Extrais tous les plans tarifaires (nom, prix, fonctionnalités)

2. SAUVEGARDE (save_to_database) :
   - Sauvegarde chaque plan dans la table 'competitor_pricing'
   - Inclus la date d'extraction

3. NOTIFICATION (send_email) :
   - Envoie un résumé à [email protected]
   - Sujet : "Mise à jour tarifs [concurrent] - [date]"
   - Corps : tableau récapitulatif des prix
"""

response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=4096,
    tools=tools,
    system="Tu es un agent de veille. Utilise les outils disponibles.",
    messages=[{"role": "user", "content": task}],
)

Le modèle va automatiquement alterner entre Computer Use (pour naviguer) et les autres outils (pour sauvegarder et notifier).

Boucle multi-tools complète

def multi_tool_loop(task: str, page, max_iterations: int = 20):
    """Boucle principale avec plusieurs outils."""
    messages = [{"role": "user", "content": task}]

    for i in range(max_iterations):
        response = client.messages.create(
            model="claude-sonnet-4-20250514",
            max_tokens=4096,
            tools=tools,
            messages=messages,
        )

        # Ajouter la réponse du modèle
        messages.append({"role": "assistant", "content": response.content})

        # Fin de la tâche
        if response.stop_reason == "end_turn":
            for block in response.content:
                if hasattr(block, "text"):
                    print(f"Résultat final : {block.text}")
            break

        # Exécuter les outils demandés
        tool_results = []
        for block in response.content:
            if block.type == "tool_use":
                print(f"  Outil : {block.name}{block.input}")
                result = dispatch_tool(block.name, block.input, page)
                tool_results.append({
                    "type": "tool_result",
                    "tool_use_id": block.id,
                    "content": str(result),
                })

        messages.append({"role": "user", "content": tool_results})

    return messages

Outils complémentaires courants

Outil Usage avec Computer Use
Base de données Sauvegarder les données extraites
Email / Slack Notifier des résultats ou erreurs
API tierce Enrichir les données extraites (geocoding, validation)
Fichier CSV/Excel Exporter les résultats dans un format standard
Système de fichiers Sauvegarder des screenshots, des PDFs téléchargés

Points clés à retenir

  • Déclarez tous vos outils (Computer Use + custom) dans le même appel API
  • Le modèle choisit automatiquement l’outil le plus adapté à chaque étape
  • Le dispatch des outils se fait dans votre boucle principale côté client
  • Combiner navigation visuelle et traitement de données crée des agents très puissants
  • Gardez les outils simples et bien documentés pour que le modèle les utilise correctement