Extraction flexible avec outils
Sur cette page
L’extraction par outil de la leçon 31 est fiable, mais chaque nouveau format de données exige son schéma, et chaque évolution une réécriture. Le cours officiel propose une astuce : un outil générique, dont le schéma accepte n’importe quel objet, et une structure décrite dans le prompt.
Un outil qui accepte tout
to_json_schema = {
"toolSpec": {
"name": "to_json",
"description": "Reçoit les données extraites, sous la forme d'un objet JSON dont la structure est décrite dans la demande.",
"inputSchema": {
"json": {
"type": "object",
"additionalProperties": True,
}
},
}
}
Le schéma ne contraint presque rien : un objet, avec toutes les propriétés qu’on voudra. C’est le prompt qui décrit la structure attendue. L’outil ne peut donc pas être strict : les sorties garanties exigent "additionalProperties": False.
Décrire la structure dans le prompt
messages = []
add_user_message(messages, f"""Analyse l'article ci-dessous et extrais ses données clés, puis appelle l'outil to_json.
<article>
{article_text}
</article>
Quand tu appelles to_json, passe la structure suivante :
{{
"title": str, # titre de l'article
"author": str, # auteur de l'article
"topics": List[str] # sujets abordés
}}""")
result = chat(messages, tools=[to_json_schema], tool_choice="to_json")
data = next(part["toolUse"]["input"] for part in result["parts"] if "toolUse" in part)
La structure est décrite en pseudo-code, avec des types Python et un commentaire par champ. Ce n’est pas du JSON Schema, mais Claude le lit comme un contrat. Les accolades sont doublées ({{ et }}) parce que le prompt est une f-string : elles s’affichent simples dans le texte envoyé.
Changer la structure en une ligne
L’avantage apparaît quand le format évolue. Pour ajouter le nombre de sujets, une ligne suffit dans le prompt :
"num_topics": int # nombre de sujets abordés
Aucun schéma à modifier.
Quand choisir quoi
- L’outil flexible convient au prototypage, aux extractions simples et aux formats qui changent souvent.
- Le schéma dédié, avec
strict, s’impose pour l’extraction critique en production, les structures imbriquées complexes et les cas où la précision est non négociable.
Selon le cours officiel, l’approche flexible donne environ 90 % de la qualité pour 10 % du travail de mise en place. Sur un modèle qui refuse le choix d’outil forcé, la leçon 31 donne les alternatives.
À vous de jouer
De flexible à strict. Faites évoluer la structure trois fois avec l’outil to_json (ajoutez la date, le nombre de mots, une liste de citations), puis écrivez le schéma dédié de la version finale avec "strict": True. Lancez les deux sur cinq articles : où la version flexible se trompe-t-elle ?
Sources officielles : Flexible tool extraction (Claude Academy) · Get validated JSON results from models (documentation AWS)
Points clés à retenir
- Un outil
to_jsonqui accepte tout objet, et la structure décrite dans le prompt. - Changer de format revient à changer une ligne du prompt.
- Pas de garantie formelle : un schéma ouvert ne peut pas être
strict. - Flexible pour prototyper, schéma dédié et
strictpour la production.