Présentation
Les boucles d'agents ne sont pas aussi simples qu'elles le semblent. Elles sont souvent présentées comme une seule boucle, alors qu'en réalité, il s'agit de trois boucles qui forment une expérience « agente » pour un client.
La boucle d'inférence
La boucle d'inférence est la première « boucle externe » que l'on crée lors de la construction d'un agent. Elle envoie une invite de système, des messages d'utilisateur et d'assistant, ainsi que des outils disponibles à un point de terminaison de « complétion de chat » d'un modèle de langage large (LLM). Les modèles de langage large, tels que ceux d'Anthropic ou d'OpenAI, utilisent une conception d'API sans état, ce qui signifie que le fournisseur de modèle n'a pas connaissance de la conversation précédente.
chatMessages = [
{
role: "system",
content: "You are a couples therapist. You help people either make it work, or make them realize it will never work. The user you're speaking with is named Tom."
},
{
role: "user",
content: "I kinda miss Laney, what should I write to her?"
}
]
La boucle d'inférence a trois responsabilités : appeler l'API de complétion de chat, passer une demande d'utilisation d'outil à la boucle d'outil et gérer la persistance de l'historique de chat.
La boucle d'outil
Les LLM sont des « cerveaux dans un bocal » qui ne fournissent pas de valeur fonctionnelle par eux-mêmes. Les outils que l'on donne à un LLM sont ce qui les rend agents. Lorsque l'on indique à un modèle « voici les outils que vous avez » dans la boucle d'inférence externe, le modèle peut essayer d'utiliser ces outils dans son inférence (réponse).
tools = [
{
type: "function",
function: {
name: "send_ex_girlfriend_an_email",
parameters: {
type: "object",
properties: { email_message: {type: "string"} },
required: ["email_message"]
}
}
}
]
La boucle d'outil doit rechercher l'outil que le modèle a inféré qu'il devait utiliser et appeler la fonction correspondante avec les paramètres fournis par le modèle.
La boucle humaine
La boucle humaine, également appelée « boucle de sécurité » ou « boucle de sanité », est une fonction d'approbation qui permet de contrôler les implémentations agentes. Elle n'est pas une boucle programmatique, mais plutôt une fonction d'appel bloquant qui permet à un approbateur de décider si l'utilisation d'un outil doit être approuvée ou non.
decision = wait_for_approval(tool.parameters)
Cette boucle est essentielle pour garantir que les agents agissent de manière sécurisée et responsable.