Anthropic résume les moyens simples et efficaces de construire des intelligences performantes

Au cours de l'année écoulée, nous avons travaillé avec des équipes construisant des agents LLM (Large Language Model) dans de nombreux secteurs d'activité. Nous avons constaté que les implémentations les plus réussies n'utilisent pas de cadres complexes ou de bibliothèques spécialisées, mais qu'elles sont construites à partir de modèles simples et composables.

Dans ce billet, nous partagerons nos expériences avec les clients et les agents de construction, et fournirons aux développeurs des conseils pratiques pour créer des agents efficaces.

Intelligent/agent/Agent a la même signification dans ce qui suit.

 

Qu'est-ce qu'un agent ?

Le terme "agent" peut être défini de différentes manières. Certains clients définissent les agents comme des systèmes entièrement autonomes qui peuvent fonctionner de manière indépendante pendant de longues périodes, en utilisant une variété d'outils pour effectuer des tâches complexes. D'autres l'utilisent pour décrire des implémentations plus normatives qui suivent des flux de travail prédéfinis. Chez Anthropic, nous désignons ces variantes par les termes suivants Systèmes agencésMais il y a un défi architectural à relever pour le flux de travail répondre en chantant agir au nom de qqn. dans une position de responsabilité Des distinctions importantes ont été faites :

  • flux de travail est un système qui orchestre les LLM et les outils à travers des chemins de code prédéfinis.
  • agir au nom de qqn. dans une position de responsabilité est un système dans lequel le LLM dirige dynamiquement ses propres processus et l'utilisation d'outils afin de garder le contrôle sur la manière dont les tâches sont accomplies.

Nous examinons ci-dessous ces deux systèmes d'agents plus en détail. Dans l'annexe 1 ("Agents en pratique"), nous décrivons deux domaines dans lesquels l'utilisation de ces systèmes par les clients s'est avérée particulièrement utile.

 

Quand (et quand) utiliser des proxys

Lors de la création d'applications avec LLM, nous recommandons de rechercher la solution la plus simple possible et de n'ajouter de la complexité que lorsque cela s'avère nécessaire. Cela peut signifier ne pas construire du tout de systèmes agentis. Les systèmes mandataires sacrifient souvent la latence et le coût pour une meilleure performance des tâches, et vous devez vous demander si ce compromis en vaut la peine.

Les flux de travail offrent prévisibilité et cohérence pour des tâches bien définies lorsqu'une plus grande complexité est requise, tandis que les agents sont plus performants lorsque la flexibilité et l'échelonnement des décisions basées sur des modèles sont nécessaires. Cependant, pour de nombreuses applications, l'optimisation d'un seul appel LLM, combinée à la recherche et aux exemples contextuels, est souvent suffisante.

 

Quand et comment utiliser les cadres

Il existe un certain nombre de cadres qui facilitent la mise en œuvre des systèmes agencés, notamment

Ces cadres facilitent le processus de développement en simplifiant les tâches standard de bas niveau telles que l'appel des LLM, la définition et l'analyse des outils et la liaison des appels entre eux. Cependant, ils ont tendance à ajouter des couches d'abstraction supplémentaires qui peuvent masquer les indications et les réponses sous-jacentes, ce qui rend le débogage plus difficile. Cela peut également faire pencher la balance en faveur d'une complexité accrue, alors qu'en réalité une configuration plus simple peut suffire.

Nous recommandons aux développeurs de commencer par utiliser directement l'API LLM : de nombreux modèles peuvent être mis en œuvre avec quelques lignes de code. Si vous utilisez un cadre, assurez-vous de comprendre le code sous-jacent. Les fausses hypothèses sur la logique sous-jacente du cadre sont une source fréquente d'erreurs pour le client.

Voir notre livre de cuisine pour quelques exemples de mise en œuvre.

 

Blocs de construction, flux de travail et agents

Dans cette section, nous explorerons les modèles de systèmes agentis communs que nous voyons dans les environnements de production. Nous commencerons par l'élément de base, le LLM amélioré, puis nous augmenterons progressivement la complexité, depuis les flux de travail combinatoires simples jusqu'aux agents autonomes.

Éléments constitutifs : LLM amélioré

L'élément de base du système agentique est le LLM amélioré, qui intègre des fonctions améliorées telles que la recherche, les outils et la mémoire. Notre modèle actuel peut utiliser ces fonctions de manière proactive - en générant ses propres requêtes de recherche, en sélectionnant les outils appropriés et en décidant des informations à conserver.

Anthropic总结构建高效智能体简单且有效的方法
LLM amélioré

 

Nous vous recommandons de vous concentrer sur deux aspects clés de la mise en œuvre : personnaliser ces fonctionnalités pour les adapter à votre cas d'utilisation spécifique et veiller à ce qu'elles fournissent une interface facile à utiliser et bien documentée au LLM. Bien que ces améliorations puissent être mises en œuvre de différentes manières, une approche consiste à utiliser notre protocole de contexte de modèle récemment publié, qui permet aux développeurs de s'intégrer dans l'écosystème croissant d'outils tiers par le biais d'une simple mise en œuvre côté client.

Dans la suite du présent document, nous supposons que ces améliorations sont accessibles lors de chaque appel au LLM.

Workflow : Enchaînement d'invites

La chaîne d'indices décompose la tâche en une série d'étapes, chaque appel au Grand Modèle de Langage (LLM) traitant la sortie de l'étape précédente. Vous pouvez ajouter des contrôles procéduraux (voir "gate" dans la figure ci-dessous) à toute étape intermédiaire pour vous assurer que le processus est toujours sur la bonne voie.

Anthropic总结构建高效智能体简单且有效的方法
Flux de travail de la chaîne de repères

 

Quand utiliser ce flux de travail :
Ce flux de travail est idéal lorsque les tâches peuvent être facilement et clairement décomposées en sous-tâches fixes. L'objectif principal est d'améliorer la précision tout en réduisant la latence en rationalisant chaque appel LLM en tâches plus faciles à gérer.

Exemples d'application de la chaîne de repères :

  • Générer des textes marketing et les traduire dans différentes langues.
  • Rédiger un plan du document, vérifier que le plan répond à certains critères, puis rédiger le document sur la base du plan.

Workflow : Routage

Le routage permet de classer les données et de les diriger vers une tâche de suivi spécialisée. Ce flux de travail permet de séparer les préoccupations et d'élaborer des messages-guides plus spécialisés. L'optimisation pour un type d'entrée peut dégrader les performances pour d'autres entrées si ce flux de travail n'est pas utilisé.

Anthropic总结构建高效智能体简单且有效的方法
flux de travail de routage

 

Quand utiliser ce flux de travail :
Les flux de routage donnent de bons résultats lorsque des tâches complexes comportent différentes catégories qui doivent être traitées séparément et que la classification peut être traitée avec précision par le LLM ou des modèles/algorithmes de classification plus traditionnels.

Exemples de routage applicables :

  • Orienter les différents types de demandes de service à la clientèle (questions générales, demandes de remboursement, assistance technique) vers différents processus, conseils et outils en aval.
  • Transférer des problèmes simples/courants vers des modèles plus petits (par ex. Claude 3.5 Haiku), tout en acheminant les problèmes complexes/peu courants vers des modèles plus puissants (par exemple Claude 3.5 Sonnet) afin d'optimiser les coûts et la vitesse.

Workflow : parallélisation (Parallelization)

Les LLM peuvent parfois traiter des tâches simultanément, et leurs résultats sont agrégés par programme. Il existe deux variantes principales de flux de travail parallélisés :

  • Sectionnement : Décomposer les tâches en sous-tâches indépendantes qui peuvent être exécutées en parallèle.
  • Vote : Exécutez la même tâche plusieurs fois pour obtenir des résultats différents.
Anthropic总结构建高效智能体简单且有效的方法
Flux de travail parallélisés

 

Quand utiliser ce flux de travail :
La parallélisation est efficace lorsque des sous-tâches décomposées peuvent être traitées en parallèle pour plus de rapidité, ou lorsque plusieurs perspectives ou tentatives sont nécessaires pour obtenir des résultats plus fiables. Pour les tâches complexes comportant plusieurs considérations, il est généralement préférable de traiter chaque considération par un appel LLM distinct, ce qui permet de se concentrer sur chaque aspect spécifique.

Exemples d'application de la parallélisation :

  • Sectionnement :
    • Mettez en œuvre des mesures de protection dans lesquelles une instance de modèle traite les requêtes des utilisateurs et l'autre filtre le contenu ou les requêtes inappropriés. Cette solution est généralement préférable à celle qui consiste à faire en sorte que le même appel LLM gère à la fois les gardes et la réponse de base.
    • Évaluation automatisée de la performance du LLM, où chaque appel au LLM évalue un aspect différent de la performance du modèle sur un repère donné.
  • Vote :
    • Examiner le code pour détecter les vulnérabilités, vérifier le code plusieurs fois à l'aide de différentes invites et signaler les problèmes détectés.
    • Évaluer le caractère inapproprié du contenu, en utilisant plusieurs invites pour évaluer différents aspects ou en exigeant différents seuils de vote pour équilibrer les faux positifs et les omissions.

Workflow : Orchestrateur-workers

Dans un flux de travail coordinateur-travailleur, le LLM central décompose dynamiquement les tâches, les délègue aux LLM travailleurs et synthétise leurs résultats.

Anthropic总结构建高效智能体简单且有效的方法
Flux de travail entre le coordinateur et le travailleur

 

Quand utiliser ce flux de travail :
Ce flux de travail convient parfaitement lorsque la tâche est complexe et que les sous-tâches requises ne peuvent être prédites (par exemple, dans le codage, où le nombre de fichiers à modifier et la nature des modifications dans chaque fichier peuvent dépendre de la tâche spécifique). Semblable aux flux de travail parallélisés, mais la principale différence est sa flexibilité - les sous-tâches ne sont pas prédéfinies, mais sont décidées par le coordinateur sur la base d'entrées spécifiques.

Exemples d'application coordonnateur-travailleur :

  • Produits de codage qui apportent des modifications complexes à plusieurs fichiers à la fois.
  • Tâches de recherche qui impliquent la collecte et l'analyse d'informations provenant de sources multiples afin de trouver des informations potentiellement pertinentes.

Flux de travail : évaluateur-optimisateur

Dans le flux de travail évaluateur-optimisateur, un appel au Grand modèle de langue (LLM) génère la réponse, tandis que l'autre fournit une évaluation et un retour d'information, formant ainsi une boucle.

Anthropic总结构建高效智能体简单且有效的方法
Flux de travail évaluateur-optimisateur

 

Quand utiliser ce flux de travail : Le flux de travail est particulièrement efficace lorsque nous disposons de critères d'évaluation clairs et que l'optimisation itérative fournit une valeur mesurable. Les deux caractéristiques applicables sont, premièrement, que les réponses du LLM peuvent être améliorées de manière significative lorsque les humains expriment un retour d'information et, deuxièmement, que le LLM est capable de fournir un tel retour d'information. Ceci est analogue au processus d'écriture itératif qu'un rédacteur humain peut suivre lorsqu'il écrit un document soigné.

Exemples d'application de l'évaluateur-optimiseur :

  • Traductions littéraires, où le traducteur LLM peut ne pas saisir initialement toutes les nuances, mais où l'évaluateur LLM peut fournir des critiques utiles.
  • Tâches de recherche complexes qui nécessitent plusieurs cycles de recherche et d'analyse pour recueillir des informations complètes, l'évaluateur décidant si d'autres recherches sont nécessaires.

Intelligentsia/Agents

Les agents apparaissent progressivement dans la production au fur et à mesure que le LLM gagne en maturité dans des domaines clés tels que la compréhension d'entrées complexes, le raisonnement et la planification, l'utilisation fiable d'outils et la récupération d'erreurs. Les agents commencent leur travail en recevant des instructions d'un utilisateur humain ou par le biais de discussions interactives. Lorsque la tâche est claire, les agents planifient et opèrent de manière indépendante, en revenant éventuellement vers l'humain pour obtenir des informations ou un jugement supplémentaires. Pendant l'exécution, l'agent doit obtenir des "informations réelles" de l'environnement (par exemple, les résultats des appels d'outils ou de l'exécution du code) à chaque étape pour évaluer ses progrès. L'agent peut faire une pause aux points de contrôle ou lorsqu'il rencontre des obstacles afin d'obtenir un retour d'information de la part de l'homme. Les tâches se terminent généralement à l'achèvement, mais comprennent souvent des conditions d'arrêt (par exemple, le nombre maximum d'itérations) pour maintenir le contrôle.

Les agents peuvent gérer des tâches complexes, mais leur mise en œuvre est généralement relativement simple. Il ne s'agit souvent que de grands modèles de langage basés sur des boucles de rétroaction environnementale pour l'utilisation de l'outil. Par conséquent, la conception d'un ensemble d'outils et de sa documentation doit être claire et bien pensée. Nous développons les meilleures pratiques pour le développement d'outils dans l'annexe 2 ("Ingénierie des indices pour les outils").

Anthropic总结构建高效智能体简单且有效的方法
Agents autonomes

 

Quand utiliser les mandataires ? Les agents peuvent être utilisés pour des problèmes ouverts où le nombre d'étapes nécessaires ne peut être prédit et où les chemins fixes ne peuvent être codés en dur.LLM peut nécessiter plusieurs tours d'opérations, vous devez donc avoir une certaine confiance dans ses capacités de prise de décision. L'autonomie de l'agent le rend bien adapté aux tâches d'échelonnement dans un environnement de confiance.

L'autonomie des agents implique des coûts plus élevés et un risque potentiel d'accumulation d'erreurs. Nous recommandons de procéder à des essais approfondis dans un environnement de type "bac à sable", avec des mesures de sécurité appropriées.

Exemple de demande de procuration :

Les exemples suivants sont tirés de nos mises en œuvre réelles :

Anthropic总结构建高效智能体简单且有效的方法
Processus de haut niveau pour la codification des agents

 

Combiner et personnaliser ces modèles

Ces éléments ne sont pas obligatoires. Il s'agit de modèles communs que les développeurs peuvent adapter et combiner pour différents cas d'utilisation. Comme pour toute fonctionnalité LLM, la clé du succès consiste à mesurer les performances et à itérer sur la mise en œuvre. Encore une fois : vous ne devriez envisager d'ajouter de la complexité que si cela améliore de manière significative les résultats.

 

résumés

La réussite dans le domaine de la modélisation des langues étendues (LLM) ne consiste pas à construire le système le plus complexe, mais à construire le système qui répond le mieux à vos besoins. Commencez par des conseils simples, optimisez-les grâce à une évaluation approfondie et n'ajoutez des systèmes d'agents à plusieurs étapes que lorsque les solutions simples ne répondent pas à vos besoins.

Lors de la mise en œuvre des procurations, nous suivons trois principes fondamentaux :

  1. Gestion de la conception de l'agent simplicité .
  2. Établir un ordre de priorité dans les étapes de la planification en démontrant clairement l'importance de l'action de l'agent dans le processus de planification. la transparence .
  3. Grâce à des outils détaillés Documentation et essais Concevez soigneusement votre interface agent-ordinateur (ACI).

Les frameworks peuvent vous aider à démarrer rapidement, mais n'hésitez pas à réduire les couches d'abstraction et à construire avec des composants de base lorsque vous passez à la production. En suivant ces principes, vous pouvez créer des agents qui sont non seulement puissants, mais aussi fiables, maintenables et dignes de confiance pour les utilisateurs.

 

une note de remerciement

Ce document a été rédigé par Erik Schluntz et Barry Zhang. Ce travail est basé sur nos travaux dans Anthropique L'expérience des agents du bâtiment et les informations précieuses communiquées par nos clients sont très appréciées.

 

Annexe 1 : Applications pratiques des procurations

Notre travail avec nos clients a révélé deux applications particulièrement prometteuses des agents d'intelligence artificielle qui démontrent la valeur pratique des modèles décrits ci-dessus. Ces applications montrent que les agents sont particulièrement utiles dans les tâches qui nécessitent une combinaison de dialogue et d'action, qui ont des critères de réussite clairs, qui supportent des boucles de retour d'information et qui permettent une supervision humaine efficace.

 

A. Soutien aux clients

Le support client combine l'interface familière du chatbot avec une fonctionnalité améliorée pour l'intégration d'outils. Ce scénario est parfait pour les agents plus ouverts comme :

  • Soutenir les interactions qui suivent naturellement un flux de dialogue, tout en exigeant l'accès à des informations externes et l'exécution d'actions ;
  • Des outils peuvent être intégrés pour extraire les données des clients, l'historique des commandes et les articles de la base de connaissances ;
  • Les opérations (telles que l'émission de remboursements ou la mise à jour de bons de travail) peuvent être gérées de manière programmatique ;
  • Le succès peut être clairement mesuré par des solutions définies par l'utilisateur.

Plusieurs entreprises ont démontré la viabilité de cette approche par le biais d'un modèle de tarification basé sur l'utilisation qui ne facture que les cas résolus avec succès, démontrant ainsi la confiance dans l'efficacité de l'agence.

B. Agents de programmation

Le domaine du développement de logiciels a montré un potentiel significatif pour la fonctionnalité LLM, évoluant de l'achèvement du code à la résolution autonome de problèmes. Les agents sont particulièrement efficaces pour les raisons suivantes

  • Les solutions de code peuvent être vérifiées par des tests automatisés ;
  • Les agents peuvent utiliser les résultats des tests comme retour d'information pour améliorer la solution ;
  • Les domaines problématiques sont clairs et structurés ;
  • La qualité de la production peut être mesurée objectivement.

Dans notre mise en œuvre, le mandataire a été en mesure de résoudre individuellement les descriptions de demandes d'extraction sur la base de l'élément Banc SWE Vérifié Problèmes réels de GitHub dans l'analyse comparative. Toutefois, si les tests automatisés peuvent contribuer à valider les fonctionnalités, l'examen manuel reste essentiel pour s'assurer que la solution répond aux exigences du système dans son ensemble.

 

Annexe 2 : Projet d'infobulle

Quel que soit le type de système d'agent que vous construisez, les outils sont probablement une partie importante de votre agent. Les outils permettent à Claude d'interagir avec des services externes et des API en spécifiant leur structure et leurs définitions exactes. Lorsque Claude répond, s'il prévoit d'invoquer un outil, il inclura dans la réponse de l'API un élément de type bloc d'utilisation des outils . Les définitions et les spécifications des outils doivent faire l'objet d'une ingénierie des indices autant que les indices globaux. Dans cette annexe, nous décrivons brièvement comment les outils peuvent être conçus.

Il existe généralement plusieurs façons de spécifier la même opération. Par exemple, vous pouvez spécifier l'édition d'un fichier en écrivant diff, ou en réécrivant le fichier entier. Pour une sortie structurée, vous pouvez renvoyer du code en markdown ou du code en JSON. En génie logiciel, ces différences sont cosmétiques et peuvent être converties l'une à l'autre sans perte. Cependant, certains formats sont plus difficiles à écrire pour LLM que d'autres. Par exemple, l'écriture de diff nécessite de savoir combien de lignes de l'en-tête d'un bloc sont modifiées avant que le nouveau code ne soit écrit. L'écriture de code en JSON (par opposition à markdown) nécessite un échappement supplémentaire des sauts de ligne et des guillemets.

Des recommandations sur le format de l'outil sont présentées ci-dessous :

  • Donner au modèle suffisamment de Jetons "Réfléchissez pour ne pas vous enfermer dans une routine.
  • La mise en forme doit être proche du texte que le modèle verrait naturellement sur l'internet.
  • Veillez à ce que le format ne soit pas soumis à des "charges supplémentaires", telles que l'obligation de calculer exactement des milliers de lignes de code ou d'échapper au code qu'il écrit.

En règle générale, il faut tenir compte des efforts consacrés à l'interface homme-machine (IHM) et prévoir de créer une bonne interface homme-machine (IHM). agir au nom de qqn. dans une position de responsabilité -L'interface informatique (ACI) fait l'objet d'un effort équivalent. Voici quelques suggestions :

  • Pensez en termes de modèles. Est-il évident d'utiliser cet outil sur la base de la description et des paramètres ? Si cela nécessite une réflexion approfondie, il en va probablement de même pour le modèle. Une bonne définition d'outil comprend généralement des exemples d'utilisation, des cas limites, des exigences en matière de format d'entrée et des limites claires avec d'autres outils.
  • Comment modifier le nom ou la description d'un paramètre pour le rendre plus évident ? Il s'agit de rédiger des notes de documentation de qualité (docstring) pour les développeurs juniors de votre équipe. C'est particulièrement important lorsque l'on utilise plusieurs outils similaires.
  • Testez la manière dont le modèle utilise vos outils : exécutez de nombreux exemples d'entrées sur notre banc de travail, observez les erreurs commises par le modèle et procédez par itération.
  • Poka-yoke Vos outils. Modifiez les paramètres pour qu'il soit plus difficile de faire des erreurs.

Lors de la création d'agents pour SWE-bench, nous avons passé plus de temps à optimiser les outils qu'à optimiser l'invite globale. Par exemple, nous avons constaté que les outils utilisant des chemins de fichiers relatifs étaient sujets à des erreurs lorsque l'agent était déplacé hors du répertoire racine. Pour y remédier, nous avons modifié l'outil de manière à ce qu'il exige toujours des chemins de fichiers absolus - nous avons constaté que le modèle n'avait aucun problème avec cette approche.

© déclaration de droits d'auteur

Articles connexes

Pas de commentaires

Vous devez être connecté pour participer aux commentaires !
S'inscrire maintenant
aucun
Pas de commentaires...