Aller au contenu principal

L'outil batch

Claude peut inclure plusieurs blocs tool_use dans un seul message, mais en pratique, il envoie souvent des reponses separees pour chaque outil. L’outil batch est une astuce pour forcer l’execution parallele.

Le probleme

Quand on demande a Claude de programmer deux rappels pour la meme date, il fait typiquement le premier appel, attend le resultat, puis fait le second. Des allers-retours inutiles.

Le schema de l’outil batch

batch_tool_schema = {
    "name": "batch_tool",
    "description": "Execute plusieurs appels d'outils simultanement",
    "input_schema": {
        "type": "object",
        "properties": {
            "invocations": {
                "type": "array",
                "description": "Les appels d'outils a executer",
                "items": {
                    "type": "object",
                    "properties": {
                        "name": {
                            "type": "string",
                            "description": "Nom de l'outil a invoquer"
                        },
                        "arguments": {
                            "type": "object",
                            "description": "Arguments a passer a l'outil"
                        }
                    }
                }
            }
        }
    }
}

Traitement des appels batch

def run_batch(invocations=[]):
    batch_output = []
    for invocation in invocations:
        name = invocation["name"]
        args = json.loads(invocation["arguments"])
        tool_output = run_tool(name, args)
        batch_output.append({
            "tool_name": name,
            "output": tool_output
        })
    return batch_output

Avec le batch tool, Claude regroupe les operations liees : une requete utilisateur, une reponse avec le batch, et un seul suivi avec tous les resultats. Moins de latence, plus d’efficacite.