← Retour au blog

Les arguments en faveur de l’envoi d’un agent IA sans framework

Par ··8 min de lecture
ai agent framework
ai agent frameworks
agentic framework
AI agents
LLM orchestration

Recherchez le cadre d’agent IA et vous obtenez des classements. Dix frameworks, huit frameworks, sept frameworks, chaque liste étant triée selon les meilleurs pour le prototypage, les meilleurs pour la production, les meilleurs pour le multi-agent. Les listes sont compétentes et elles sont pour la plupart d’accord les unes avec les autres, ce qui est le premier indice qu’aucune d’entre elles ne répond à une question difficile.

La question difficile n’est pas laquelle. Il s'agit de savoir si un cadre est la chose qui se dresse entre vous et un agent actif, et dans la plupart des builds que l'on nous demande d'examiner, ce n'est pas le cas. L'agent est une boucle. La boucle concerne une page de code. Ce qui manque, c'est généralement une décision que personne n'a prise sur ce que la chose peut toucher et quand elle doit s'arrêter, et aucun cadre ne fournit cela.

Ce que contient réellement un agent de production

Supprimez le vocabulaire et la forme est petite et terne. Il existe une boucle qui envoie une requête et lit la réponse. Il existe un outil de mappage de registre des noms de fonctions, avec un schéma pour chacune. Il existe une politique de nouvelle tentative pour les appels qui échouent de la manière habituelle. Il existe une transcription, car vous ne pouvez pas déboguer ce que vous n'avez pas enregistré. Et il y a un plafond sur les tours et les jetons, car c'est ce que vous payez qui choisit le nombre de pas à effectuer.

C’est toute la machine pour une large classe d’agents utiles. Vous en êtes propriétaire de chaque ligne, vous pouvez lire la requête qui a été envoyée et lorsqu'elle se comporte mal, la trace de la pile vous appartient. Les deux propriétés qui déterminent réellement la difficulté de la construction, ce que l'agent peut toucher et la durée de son exécution, font l'objet de le tri qui vaut la peine d'être utilisé pour les formes d'agent, et les deux sont des décisions que vous prenez dans votre propre code, indépendamment de ce que vous installez.

Ce qu'un framework vous apporte réellement

C'est la partie sur laquelle les articles de comparaison se précipitent, car la liste honnête est plus courte qu'une matrice de fonctionnalités et plus utile. Structure de graphique ou de machine à états, de sorte qu'un flux de travail de branchement est déclaré plutôt qu'imbriqué. Génération de schéma d'outils à partir de vos signatures de fonctions. Plomberie streaming et événementiel. Conventions de répartition du travail entre plusieurs agents. Crochets de traçage. Adaptateurs vers le magasin de vecteurs, le fournisseur de modèles et la file d'attente que vous exécutez déjà.

La plupart sont des commodités. Vous écririez chacun d’eux en un après-midi et le vôtre conviendrait mieux à votre système. Un élément de la liste est différent et il s’agit d’un état durable.

La documentation sur la persistance de LangGraph est la déclaration la plus claire de ce que cela signifie dans la pratique : un point de contrôle conserve l'état du graphique d'un thread en tant que points de contrôle, et les cas d'utilisation qu'il nomme sont humains dans les flux de travail en boucle, le voyage dans le temps et la tolérance aux pannes, pour les agents qui doivent reprendre après une interruption ou se remettre d'un échec. Ce n'est pas un après-midi de travail. Un magasin de points de contrôle correct, un chemin de relecture déterministe et un CV qui ne duplique pas un effet secondaire sont une véritable pièce d'ingénierie difficile, et c'est la seule chose sur la liste qui mérite d'être adoptée par quelqu'un d'autre.

Le coût que les comparaisons ne fixent pas

Un cadre se situe entre vous et la demande et la réponse du modèle, et c'est exactement là que le coût atterrit.

Le débogage passe par ses couches. La question à laquelle vous devez répondre à deux heures du matin est de savoir quel texte et quels schémas d'outils ont été réellement envoyés, et une abstraction dont le travail est de l'assembler pour vous est une abstraction que vous devez maintenant lire à l'envers. Lorsqu'un résultat d'outil ou une pièce jointe arrive dans la charge utile sous forme de blob codé, un décodage base64 sur la requête capturée est souvent le moyen le plus rapide de voir ce que le modèle a réellement été donné plutôt que ce que vous pensez qu'il a été donné.

De la même manière, la comptabilité des jetons devient plus difficile. Le framework décide quel historique renvoyer et comment le résumer, de sorte que le numéro qui vous est facturé est produit par un code que vous n'avez pas écrit. Comptez une étape tardive réaliste avec le compteur de jetons et passez-la dans le calculateur de coût LLM au nombre de pas attendu, car une boucle qui renvoie tout son contexte à chaque tour coûte un multiple du premier appel et ce multiple est défini par les choix de la bibliothèque, pas les vôtres.

Ensuite, il y a le désabonnement. Ces projets évoluent rapidement, leurs interfaces changent et un changement radical dans votre couche d'orchestration est un changement au cœur du produit plutôt qu'à sa périphérie. C’est un échange acceptable contre un état durable. C'est un mauvais métier pour la génération de schémas d'outils.

Les deux situations qui en justifient une

Les deux sont réels, et si vous êtes dans l’un d’eux, adoptez un cadre et arrêtez de lire les articles de comparaison.

L'exécution doit survivre à un redémarrage. Si un seul travail dure des minutes ou des heures, s'arrête pour qu'un humain approuve quelque chose et doit reprendre là où il s'est arrêté après un crash ou un déploiement, vous avez besoin de persévérance, de relecture et de reprise. C'est la capacité décrite ci-dessus, elle est difficile à construire correctement, et un framework qui la traite comme le centre de sa conception plutôt que comme un plugin en vaut la dépendance.

Plusieurs ingénieurs travaillent sur le même agent. Un vocabulaire partagé a une réelle valeur lorsqu'il y a suffisamment de personnes en désaccord sur la structure. Un cadre fournit un nom, un endroit où placer chaque élément et un modèle de révision que personne n'a à inventer. La flexibilité à laquelle vous renoncez permet d'acquérir de la cohérence, ce qui est le bon sens pour cette taille et le mauvais sens pour un ingénieur et un agent.

Remarquez ce qui ne figure pas sur cette liste. La coordination multi-agents n'est pas une raison en soi, car plusieurs agents constituent un échange de contexte plutôt qu'une mise à niveau. Il ne faut pas non plus vouloir le traçage, que vous pouvez obtenir à partir d'un outil d'observabilité sans céder le contrôle de la boucle.

Décidez-en avant d'acheter

Chacun de ces éléments change la réponse, et aucun d’entre eux n’est une question à laquelle un cadre répond pour vous.

  • Énumérez les outils d'écriture. Chaque action qui modifie quelque chose en dehors de l'agent, répertoriée, avec une décision pour chacune si elle se déclenche sans surveillance, nécessite une confirmation ou peut uniquement être proposée. C’est la décision en matière de responsabilité et elle vous appartient.
  • Définissez le plafond. Nombre maximum de tours, nombre total maximum de jetons et comportement à la limite. Une boucle ouverte sans boucle est une facture illimitée.
  • Décidez si une exécution doit survivre à un redémarrage. C'est la question qui sélectionne réellement pour ou contre un framework, alors répondez-y explicitement plutôt que de la découvrir en production.
  • Décidez à qui appartient le texte d'invite. Si la réponse est la bibliothèque, vous avez accepté que la chaîne la plus importante du système soit assemblée hors de votre vue.
  • Décidez comment vous saurez que cela fonctionne. Un ensemble noté de cas réels, qui fait l'objet de comment évaluer un système LLM, vous indique si un changement a aidé. Sans cela, chaque migration de framework est une question de goût.

Comment nous les construisons

Nos propres agents de production sont la petite machine décrite en haut : une boucle que nous possédons, un registre d'outils, une politique de nouvelle tentative, une transcription de chaque appel et des plafonds stricts fixés par nous. Les portes d'approbation sur les outils d'écriture sont du code simple dans la boucle, car c'est là que nous voulons qu'elles soient visibles lors de la révision.

Nous avons supprimé un framework d'une version client, et ce qui s'est amélioré n'était pas la vitesse. C'est que la requête exacte adressée au modèle est devenue lisible dans un seul fichier, donc une mauvaise réponse a cessé d'être une recherche à travers les couches et est devenue une différence. Les cas où nous en conserverions un sont les deux ci-dessus, et lorsque le flux de travail d'un client a besoin d'un état durable pouvant être repris, nous recherchons une bibliothèque plutôt que d'écrire un magasin de points de contrôle à partir de rien.

La version honnête de toute cette catégorie, que les listes classées ne peuvent pas imprimer parce qu’elles existent pour classer, est que la question cadre se situe en aval des questions de conception. Si vous ne pouvez pas dire dans laquelle des deux situations vous vous trouvez, vous ne choisissez pas un cadre, vous adoptez une valeur par défaut et héritez de ses opinions. Déterminer d'abord ce que vous construisez est la commande la moins chère, et c'est à peu près à cela que se résume notre approche des constructions personnalisées.

Articles similaires