Application du LLM : réflexions sur le dialogue des agents (avec appels d'outils)
Les produits Q&A tels que ChatGPT et Kimi utilisent des dialogues d'agent (la capacité d'invoquer différents outils pour interagir avec l'utilisateur), tels que les outils de Kimi pour les dialogues LLM, les dialogues de liens, les dialogues de fichiers et les dialogues de mise en réseau. Par exemple, ChatGPT, Wenxin Yiyin et Xunfei Starfire ont également été complétés par des outils tels que Wensheng Diagram, Code Writer et Maths Calculator.


Dialogue d'agent pour ChatGPT4
Le cadre dominant pour obtenir des capacités de dialogue entre agents est aujourd'hui ReAct (proposé par l'université de Princeton et Google en 2022). ReAct [1] est une approche par mots-clés qui associe la réflexion et l'action. Son évolution historique est présentée ci-dessous :

Les trois méthodes présentées dans le tableau ci-dessus sont les suivantes
Raison uniquement :Utiliser la chaîne de pensée pour la réflexion en plusieurs étapes, ajouter l'invite "Réfléchissons étape par étape" avant d'entrer la question dans l'invite pour guider la réflexion en plusieurs étapes, ne pas donner la réponse directement, mais l'inconvénient est évident : Raison Seule porte fermée juste penser à ne pas faire, ne sortira pas pour voir le monde extérieur pour comprendre le monde avant de penser, donc il produira des hallucinations, le changement de dynasties ne savent pas ;
Act-Only :Obtention d'une observation par une action en une seule étapeObservation, Inconvénient : si je le fais immédiatement sans y réfléchir, la réponse que j'obtiens à la fin peut ne pas être garantie comme étant la même que celle que je veux ;
ReAct :Un mélange de réflexion et d'action, c'est-à-dire réfléchir avant d'agir, renvoyer les résultats de l'action, puis réfléchir à ce qu'il faut faire ensuite, puis agir, et répéter le processus encore et encore, en sachant que la réponse finale est produite.
Extension : une auto-réflexion est également prévue pour 2023 (Réflexion) du cadre, a rejoint la réflexion, comme indiqué ci-dessous, pas en profondeur ici. En outre, les amis intéressés peuvent consulter le grand numéro public de Taobao consacré à la technologie, intitulé "Recherche sur les agents - Comparaison de 19 types de cadres d'agents", qui permet d'envoyer un document.

Les exemples mentionnés dans le document du ReAct illustrent mieux la logique, les avantages et les inconvénients décrits ci-dessus :

Le thème de ReAct est :
"""
Explication des variables d'entrée pour l'invite de l'agent :
- tools : description de l'ensemble d'outils, sous la forme "{tool.name} : {tool.description}".
- toool_names : liste des noms d'outils
- historique : l'historique du dialogue entre l'utilisateur et l'agent (notez que les multiples tours de ReAct au milieu du chat de l'agent ne sont pas comptés dans l'historique du dialogue)
- input : question de l'utilisateur
- agent_scratchpad : processus intermédiaires d'action et d'observation.
serait formaté comme "\nObservation : {observation}\nPensée : {action}".
Introduire ensuite agent_scratchpad (registre des pensées de l'agent)
"""
agent_prompt = """
Répondez aux questions suivantes du mieux que vous pouvez. Si c'est en ordre, vous pouvez utiliser certains outils de manière appropriée. Vous avez accès aux outils suivants.{outils}
Utilisez le format suivant.
Question : la question d'entrée à laquelle vous devez répondre1
Réflexion : il faut toujours réfléchir à ce que l'on va faire et aux outils que l'on va utiliser.
Action : l'action à entreprendre, doit être l'une des {nom_du_tool}.
Entrée de l'action : l'entrée de l'action
Observation : le résultat de l'action
... (cette pensée/action/entrée en action/observation peut être répétée zéro ou plusieurs fois)
Je connais maintenant la réponse finale
Réponse finale : la réponse finale à la question initiale.
Commencez !histoire : {histoire}
Question : {input}
Pensée : {agent_scratchpad}""""
L'organigramme de l'application ReAct est présenté ci-dessous :

Il existe un bon exemple sur l'internet, auquel il est fait référence ici à titre d'illustration [2] :
Supposons que nous ayons :
Questions des utilisateursLe prix moyen des roses sur le marché aujourd'hui : "Quel est le prix moyen des roses sur le marché aujourd'hui ? Quel prix dois-je fixer si je la vends 151 TP3T en plus ?"
Outils: : {'bing web search' : un outil pour rechercher des informations open source sur le web à l'aide de Bing Search ; 'llm-math' : un outil pour faire des mathématiques avec de grands modèles et Python}
L'entrée pour le premier cycle de dialogue est donc la suivante :
Répondez aux questions suivantes du mieux que vous pouvez. Si c'est en ordre, vous pouvez utiliser certains outils de manière appropriée. Vous avez accès aux outils suivants.
bing-web-search : Outil de recherche Bing pour rechercher des informations open-source sur le web
llm-math : outils pour faire des mathématiques avec de grands modèles et Python
Utilisez le format suivant.
Question : la question d'entrée à laquelle vous devez répondre1
Réflexion : il faut toujours réfléchir à ce que l'on va faire et aux outils que l'on va utiliser.
Action : l'action à entreprendre, qui doit être l'une des suivantes : [bing-web-search, llm-math]Action Entrée : l'entrée de l'action
Observation : le résultat de l'action
... (cette pensée/action/entrée en action/observation peut être répétée zéro ou plusieurs fois)
Je connais maintenant la réponse finale
Réponse finale : la réponse finale à la question initiale.
Commencez !
l'histoire.
Question : Quel est le prix moyen des roses sur le marché actuel ? Comment dois-je fixer le prix des roses si je les vends avec une marge de 15% ?
Réflexion.
Obtenir la sortie et l'analyser pour obtenir la pensée, l'action et l'entrée d'action :
Réflexion : Je devrais utiliser l'outil de recherche pour trouver des réponses afin de trouver rapidement les informations dont j'ai besoin.
Action : bing-web-search
Données d'entrée : prix moyen des roses
Appelez l'outil de recherche bing-web, tapez "prix moyen des roses", et obtenez le contenu de retour Observation : "Selon le web, chaque bouquet de roses aux États-Unis coûte 80,16 $". Ensuite, mettez le contenu ci-dessus, organisez-le et mettez-le sur le site web. Ensuite, placez le contenu ci-dessus dans le modèle de mot-guide de ReAct et commencez le deuxième tour de saisie du dialogue :
Répondez aux questions suivantes du mieux que vous pouvez. Si c'est en ordre, vous pouvez utiliser certains outils de manière appropriée. Vous avez accès aux outils suivants.
bing-web-search : Outil de recherche Bing pour rechercher des informations open-source sur le web
llm-math : outils pour faire des mathématiques avec de grands modèles et Python
Utilisez le format suivant.
Question : la question d'entrée à laquelle vous devez répondre1
Réflexion : il faut toujours réfléchir à ce que l'on va faire et aux outils que l'on va utiliser.
Action : l'action à entreprendre, qui doit être l'une des suivantes : [bing-web-search, llm-math]Action Entrée : l'entrée de l'action
Observation : le résultat de l'action
... (cette pensée/action/entrée en action/observation peut être répétée zéro ou plusieurs fois)
Je connais maintenant la réponse finale
Réponse finale : la réponse finale à la question initiale.
Commencez !
l'histoire.
Question : Quel est le prix moyen des roses sur le marché actuel ? Comment dois-je fixer le prix des roses si je les vends avec une marge de 15% ?
Réflexion : Je devrais utiliser l'outil de recherche pour trouver des réponses afin de trouver rapidement les informations dont j'ai besoin.
Action : bing-web-search
Données d'entrée : prix moyen des roses
Observation : selon des sources en ligne, chaque bouquet de roses aux États-Unis coûte 80,16 dollars.
Réflexion.
Obtenir la sortie et l'analyser pour obtenir la pensée, l'action et l'entrée d'action :
Réflexion : j'ai besoin des mathématiques pour calculer ce que serait une majoration de 15% en plus.
Action : llm-math
Entrée d'action : 80.16*1.15
Appeler l'outil llm-math, saisir "80.16*1.15", obtenir le contenu de retour Observation : "92.184". Ensuite, placez le contenu ci-dessus dans le modèle de mot-guide de ReAct, et ouvrez le troisième cycle de saisie du dialogue :
Répondez aux questions suivantes du mieux que vous pouvez. Si c'est en ordre, vous pouvez utiliser certains outils de manière appropriée. Vous avez accès aux outils suivants.
bing-web-search : Outil de recherche Bing pour rechercher des informations open-source sur le web
llm-math : outils pour faire des mathématiques avec de grands modèles et Python
Utilisez le format suivant.
Question : la question d'entrée à laquelle vous devez répondre1
Réflexion : il faut toujours réfléchir à ce que l'on va faire et aux outils que l'on va utiliser.
Action : l'action à entreprendre, qui doit être l'une des suivantes : [bing-web-search, llm-math]Action Entrée : l'entrée de l'action
Observation : le résultat de l'action
... (cette pensée/action/entrée en action/observation peut être répétée zéro ou plusieurs fois)
Je connais maintenant la réponse finale
Réponse finale : la réponse finale à la question initiale.
Commencez !
l'histoire.
Question : Quel est le prix moyen des roses sur le marché actuel ? Comment dois-je fixer le prix des roses si je les vends avec une marge de 15% ?
Réflexion : Je devrais utiliser l'outil de recherche pour trouver des réponses afin de trouver rapidement les informations dont j'ai besoin.
Action : bing-web-search
Données d'entrée : prix moyen des roses
Observation : selon des sources en ligne, chaque bouquet de roses aux États-Unis coûte 80,16 dollars.
Réflexion : J'ai besoin de données pour calculer ce que serait le prix avec une majoration de 15 en plus.
Action : llm-math
Entrée d'action : 80.16*1.15
Observation : 92.184
Réflexion.
Obtenir la sortie et l'analyser pour obtenir la pensée, l'action et l'entrée d'action :
Pensée : Je connais la réponse finale.
Réponse finale : Si vous souhaitez ajouter 15% à la vente, son prix doit être de 92,184 $.
Langchain a implémenté l'invocation ReAct [3], qui exige que vous créiez ReAct Agent, AgentExecutor et des outils. Grâce à ReAct Agent, nous pouvons réaliser ce que nous avons mentionné précédemment, nous connecter à différents outils et appeler différents outils en fonction des besoins de l'utilisateur et de la pensée de LLM pour améliorer la performance des questions et réponses. Si vous réécrivez vous-même le Chat de l'agent basé sur ReAct, vous devez accorder une attention particulière à certaines conditions limites, telles que la sélection de l'outil n'existe pas, l'appel de l'outil échoue, l'appel de l'outil est bloqué dans une boucle morte et ainsi de suite, car ces conditions affecteront en fin de compte l'efficacité de l'interaction. Personnellement, j'ai quelques idées lorsque je pratique l'effet du ReAct Agent Chat :
- Choisissez des LLM qui ont procédé à l'alignement des capacités de dialogue des agents et, de préférence, le ReAct Prompt peut être adapté aux LLM ;
- Une description claire des bonnes introductions d'outils réduit l'ambiguïté de la description entre les outils et évite d'utiliser le mauvais outil ;
- Il faut se méfier des cycles multiples de réflexion, d'action et d'observation qui conduisent à un contexte d'entrée trop important, et de nombreux LLM deviennent peu aptes à comprendre des entrées contextuelles longues.
- S'il n'y a qu'un seul cycle de réflexion-action-observation, puis un ensemble de processus vers le bas, vous devez passer par 2 fois le LLM et 1 fois l'appel d'outil, cela affectera le temps de réponse, si vous voulez simplifier le processus de ce ReAct, vous pouvez utiliser directement la reconnaissance d'intention + l'appel d'outil, par l'outil pour sortir directement le résultat final, ne pas avoir à renvoyer au LLM pour faire une réponse sommaire, l'inconvénient est qu'il n'est pas si parfait.
LangChain fournit un certain nombre de kits de démarrage qui peuvent être consultés dans [4].
Si nous voulons dialoguer avec le fichier téléchargé temporairement, nous pouvons simplement ajouter les outils directement ? En fait, ce n'est pas très bon, car Action Input est l'entrée de l'outil basée sur l'analyse de la requête par LLM, tandis que la fonction "Dialogue sur les fichiers téléchargés temporairement" a besoin de l'emplacement ou du contenu du fichier, pour cette raison, en fait, vous pouvez suivre mon dessin ci-dessous, et mettre la fonction "Dialogue sur les fichiers téléchargés temporairement" dans le champ "Entrée d'action" séparément. C'est pourquoi nous pouvons séparer la fonction "dialogue sur les fichiers téléchargés temporairement" de la fonction "dialogue sur les fichiers téléchargés temporairement", comme je l'ai dessiné dans la figure suivante.

Le processus spécifique de coopération entre le front-end et le back-end est le suivant :
1) Après que l'utilisateur a téléchargé un fichier, le front-end crée d'abord une base de connaissances temporaire et télécharge ensuite le fichier dans cette base de connaissances, tout en initialisant le nombre de tours de dialogue pour le fichier à 0 et en enregistrant le nom de la variable de cette base de connaissances temporaire ;
2, à chaque tour de dialogue suivant, le nom de la base de connaissances est transmis à l'agent Chat, conformément au flux ci-dessus, après chaque tour de dialogue, le nombre de tours de dialogue sous le document est mis à jour ;
3、Lorsque le nombre de cycles de dialogue sur les documents > le nombre de cycles de conservation des documents ou que l'utilisateur efface manuellement le contexte, le front-end supprime la base de connaissances temporaire et efface le nom de la variable de la base de connaissances temporaire.
bibliographie
[1] ReAct: Synergiser le raisonnement et l'action dans les modèles de langage, présentation officielle : https://react-lm.github.io/[2] LangChain dry run (1) : Comment l'AgentExecutor pilote-t-il les modèles et les outils pour accomplir les tâches ? - Article de Huang Jia - 知乎https://zhuanlan.zhihu.com/p/661244337[3] ReAct, documentation Langchain : https://python.langchain.com/docs/modules/agents/agent_types/react/[4] Agent Toolkit, documentation Langchain : https://python.langchain.com/docs/integrations/toolkits/[5] "LLM+Search Rewrite" 10 Papers at a Glance - Essays by Obsessed with Searching and Pushing - Knowledge : https://zhuanlan.zhihu.com/p/672357196[6] MultiQueryRetriever, documentation Langchain : https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever/[7] HypotheticalDocumentEmbedder, documentation Langchain : https://github.com/langchain-ai/langchain/blob/master/cookbook/hypothetical_document_ embeddings.ipynb[8] Développement d'applications Big Model, conseils avancés RAG incontournables - Articles by Rainfly - Knowledge : https://zhuanlan.zhihu.com/p/680232507© déclaration de droits d'auteur
L'article est protégé par le droit d'auteur et ne doit pas être reproduit sans autorisation.
Articles connexes
Pas de commentaires...