Aller au contenu principal

Quiz : utilisation des outils avec Claude

Testez vos connaissances sur l’utilisation des outils avec l’API Claude. Chaque question porte sur un concept aborde dans les lecons precedentes.


Question 1 : Detection des appels d’outils

Comment savoir si Claude veut utiliser un outil dans sa reponse ?

Voir la reponse

On verifie le champ stop_reason de la reponse. Quand Claude veut appeler un outil, ce champ vaut "tool_use". Si la valeur est differente (par exemple "end_turn"), Claude a termine et fournit sa reponse finale.

if response.stop_reason == "tool_use":
    # Claude veut utiliser un outil
    tool_results = run_tools(response)

Question 2 : Blocs de resultats d’outils

Quel champ permet de faire le lien entre un bloc tool_use et son bloc tool_result correspondant ?

Voir la reponse

C’est le champ tool_use_id. Chaque bloc tool_use a un identifiant unique, et le bloc tool_result correspondant doit utiliser exactement le meme identifiant dans son champ tool_use_id.

tool_result_block = {
    "type": "tool_result",
    "tool_use_id": tool_request.id,  # Doit correspondre a l'id du tool_use
    "content": json.dumps(result),
    "is_error": False
}

Question 3 : Gestion des erreurs

Que se passe-t-il si un outil echoue pendant son execution ? Faut-il quand meme renvoyer un resultat a Claude ?

Voir la reponse

Oui, il faut toujours renvoyer un bloc de resultat, meme en cas d’erreur. On utilise le champ is_error: True pour signaler l’echec. Claude pourra alors adapter sa reponse (retenter, demander des clarifications, ou informer l’utilisateur).

except Exception as e:
    tool_result_block = {
        "type": "tool_result",
        "tool_use_id": tool_request.id,
        "content": f"Error: {e}",
        "is_error": True
    }

Question 4 : Forcer l’utilisation d’un outil

Comment forcer Claude a utiliser un outil specifique nomme "extract_data" ?

Voir la reponse

On utilise le parametre tool_choice avec le type "tool" et le nom de l’outil :

response = chat(
    messages,
    tools=[extract_data_schema],
    tool_choice={"type": "tool", "name": "extract_data"}
)

Les trois options de tool_choice sont :

  • {"type": "auto"} — Claude decide seul (par defaut)
  • {"type": "any"} — Claude doit utiliser un outil, au choix
  • {"type": "tool", "name": "NOM"} — Claude doit utiliser l’outil specifie

Question 5 : L’outil batch

Quel est l’interet principal de l’outil batch ?

Voir la reponse

L’outil batch permet de reduire le nombre d’allers-retours avec l’API en encourageant Claude a regrouper plusieurs appels d’outils independants dans une seule requete. Au lieu de faire un aller-retour par outil, Claude appelle le batch tool une seule fois avec la liste de toutes les operations a effectuer.

C’est un meta-outil qui accepte une liste d’invocations, chacune contenant le nom de l’outil et ses arguments.


Question 6 : Donnees structurees via les outils

Comment utiliser les outils pour extraire des donnees structurees, sans que l’outil ait une vraie implementation ?

Voir la reponse

On cree un schema JSON qui decrit la structure de donnees souhaitee, on le declare comme outil, et on force Claude a l’utiliser via tool_choice. Les donnees structurees se trouvent dans le champ input du bloc tool_use de la reponse :

structured_data = response.content[0].input

Il n’est pas necessaire de fournir un resultat d’outil en retour — on recupere simplement les donnees et on s’arrete la.


Question 7 : Streaming granulaire

Quelle est la difference principale entre le streaming standard et le mode fine_grained pour les outils ?

Voir la reponse

En mode standard, l’API met en tampon et valide les fragments JSON avant de les envoyer. Elle attend qu’une paire cle-valeur de premier niveau soit complete et valide avant de transmettre les donnees.

En mode fine_grained, la validation JSON est desactivee cote API. Les fragments arrivent des que Claude les genere, sans mise en tampon. C’est plus rapide mais le JSON peut etre invalide — votre code doit gerer ces cas avec un try/except sur json.loads().

Le mode granulaire est utile pour les applications ou la reactivite est critique.