Exemple (Python, une boucle manuelle; testée avec un substitut de l'API)
import anthropic
client = anthropic.Anthropic() # reads ANTHROPIC_API_KEY
TOOLS = [{
"name": "check_stock",
"description": "Check how many units of a product are in stock. Use the exact product name, for example 'blue mug'.",
"input_schema": {
"type": "object",
"properties": {"item": {"type": "string", "description": "Product name"}},
"required": ["item"],
},
}]
STOCK = {"blue mug": 12, "red mug": 0}
def check_stock(item):
return str(STOCK[item.lower()])
messages = [{"role": "user", "content": "Do we have blue mugs and red mugs?"}]
while True:
response = client.messages.create(
model="claude-opus-5-5", max_tokens=1024, tools=TOOLS, messages=messages
)
if response.stop_reason != "tool_use":
break
messages.append({"role": "assistant", "content": response.content})
results = []
for block in response.content:
if block.type == "tool_use":
results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": check_stock(**block.input),
})
messages.append({"role": "user", "content": results})
print("".join(b.text for b in response.content if b.type == "text"))
Cette boucle n'a encore ni limite ni gestion des erreurs. Les leçons 3 et 5 corrigent les deux.
ClaudeStuck? Copy a ready-made prompt for Claude
Copy this, open Claude, paste it, and Claude will walk you through the lesson step by step.
For a grown-up: Claude is for adults (18+). Copy this, paste it into Claude, and use the answer to explain the lesson to your child.
I'm learning "Agents à étapes multiples : outils, mémoire et fiabilité" on The Future Market. Lesson 1: "Ouvrir la boucle (la boucle manuelle de l'agent)".
What the lesson teaches:
- Quand Claude veut utiliser un outil client, la réponse a un stop_reason de tool_use et un ou plusieurs blocs tool_use. Chaque bloc a un id, un name et un input (les arguments).
- Votre code exécute l'outil, puis envoie un nouveau message user qui contient des blocs tool_result. Chaque résultat porte le tool_use_id de la demande à laquelle il répond, ainsi qu'un content et un is_error facultatif.
- Règles de formatage tirées de la documentation : les résultats d'outils doivent venir juste après le message de l'assistant qui les a demandés, et dans le message de l'utilisateur, les blocs tool_result doivent venir en premier. Tout texte vient après.
- Claude peut demander plusieurs outils dans un même tour. Répondez à chaque id tool_use par un tool_result correspondant.
- La boucle se termine quand stop_reason est autre chose que tool_use (par exemple end_turn).
- Les résultats d'outils contiennent souvent du contenu hors de votre contrôle, comme des pages Web ou des courriels. Considérez-le comme non fiable : il peut contenir des instructions destinées à tromper Claude (injection de consignes, ou prompt injection).
- Pourquoi le faire à la main? L'exécuteur d'outils est plus simple, mais la documentation d'Anthropic dit d'utiliser la boucle manuelle quand vous avez besoin de l'approbation d'un humain, d'une journalisation personnalisée ou d'une exécution conditionnelle. C'est exactement ce que ce cours ajoute.
The exercise I'm working on:
Lancez la boucle avec une question qui nécessite les deux tasses. Affichez len(response.content) au premier tour pour voir si Claude a demandé les deux outils en même temps. Puis écrivez deux phrases qui expliquent pourquoi chaque id tool_use a besoin d'un tool_result.
I'm stuck. Please:
1. Explain the main idea in plain, simple words with one everyday example.
2. Walk me through the exercise one small step at a time. Ask me what I've done so far before giving the next step.
3. Don't just give me the final answer. Help me do it myself, and check my work when I share it.
I'm a parent helping my child (about 8 years old) with a lesson called "Ouvrir la boucle (la boucle manuelle de l'agent)" from the course "Agents à étapes multiples : outils, mémoire et fiabilité".
Here's what the lesson says:
Dans le cours 1.4, un robot faisait les courses et vous ne voyiez que le résultat. Maintenant, c'est vous qui tenez le porte-bloc. Claude dit "Va voir dans la réserve, s'il te plaît", vous y allez, vous écrivez la réponse sur le porte-bloc et vous la lui remettez. Puis Claude décide de ce qu'il demandera ensuite. Ce va-et-vient, c'est tout l'agent.
The activity:
Lancez la boucle avec une question qui nécessite les deux tasses. Affichez len(response.content) au premier tour pour voir si Claude a demandé les deux outils en même temps. Puis écrivez deux phrases qui expliquent pourquoi chaque id tool_use a besoin d'un tool_result.
Please explain this so an 8-year-old understands: short sentences, a fun everyday example, and no hard words.
Then give me 3 simple questions I can ask my child to check they understood, and a way to do the activity together, one tiny step at a time.