EN·ES·DE·PT·FR
⌘K

Boucle Agent & Récupération d'Erreurs

La boucle agentique principale : recevoir un message, appeler le LLM, exécuter les outils, itérer, répondre.

Flux de la Boucle Agent

  1. Persister le message utilisateur — stocké avec un score d'importance
  2. Auto-router le modèle — classifier la complexité de la requête (si non forcé manuellement)
  3. Construire le prompt système — prompt de base + compétences correspondantes + faits connus
  4. Récupérer le contexte — récupération tri-hybride de la mémoire
  5. Itérer (jusqu'à max_iterations) :
    • Collecter les anciens souvenirs épinglés + messages récents (dédupliqués)
    • Construire la liste de messages au format OpenAI
    • Appeler le LLM avec récupération d'erreur classifiée
    • Si appels d'outils → exécuter chacun, persister les résultats, continuer la boucle
    • Si pas d'appels d'outils OU dernière itération → retourner la réponse texte
  6. Nombre max d'itérations atteint → retourner un message de timeout

Budget d'Itérations Dynamique

L'agent dispose d'un outil intégré request_more_iterations qui étend le budget de la boucle lorsque la limite actuelle est insuffisante :

  • Étend le budget de 10 itérations par appel
  • Un plafond strict empêche l'extension illimitée (typiquement 25 au total)
  • Nécessite un paramètre reason expliquant ce qui reste à faire
  • Utilisé lorsque l'agent a un plan clair mais manquerait d'itérations en cours de tâche

Stratégie de Récupération d'Erreurs

La méthode call_llm_with_recovery classifie les erreurs et réagit en conséquence :

Type d'ErreurStratégie
Auth / BillingRetourner immédiatement à l'utilisateur — pas de nouvelle tentative
Rate LimitAttendre retry_after_secs (plafonné à 60s), réessayer une fois
Timeout / Network / Server ErrorAttendre 2s, réessayer une fois ; en cas d'échec, basculer vers le modèle précédent
Not Found (bad model)Basculer immédiatement vers le modèle de secours
UnknownPropager comme erreur
Last Known Good
Après chaque appel LLM réussi, la configuration actuelle est sauvegardée en tant que config.toml.lastgood. Cela permet la récupération automatique après des changements de configuration incorrects.

Correction de l'Ordre des Messages

Pour satisfaire les contraintes des fournisseurs Gemini, Anthropic et OpenAI, aidaemon exécute une correction en trois passes sur l'historique des messages avant chaque appel LLM :

  1. Passe 1 : Fusionner les messages consécutifs du même rôle (combine les tableaux tool_calls)
  2. Passe 2 : Supprimer les résultats d'outils orphelins (pas de tool_call assistant correspondant) et retirer les tool_calls orphelins (pas de résultat d'outil correspondant)
  3. Passe 3 : Fusionner à nouveau après que la suppression des orphelins peut créer de nouveaux messages consécutifs du même rôle

Exécution des Outils

Pendant la boucle, chaque appel d'outil reçoit :

  • _session_id — injecté automatiquement pour le suivi de session
  • _untrusted_source — indicateur défini pour les sessions provenant de déclencheurs

Détection de Blocage & Répétition

La boucle agent inclut des protections contre les blocages :

  • Détection de blocage — si le même outil est appelé 3+ fois consécutivement avec des arguments similaires, la boucle s'interrompt
  • Détection de répétition — détecte le texte de réponse répété et force une interruption
  • Limite stricte d'itérations — par défaut 10, extensible à 25 via request_more_iterations

Types de Sessions

Type de SessionFormatTrusted
Chat TelegramID du chat en chaîneOui
Canal Slackslack:{channel_id} ou slack:{channel_id}:{thread_ts}Oui
Canal Discorddiscord:{channel_id}Oui
Déclencheur emailemail_triggerNon
Déclencheur d'événementevent_{uuid}Non
Sous-agentsub-{depth}-{uuid}Hérité