Aplicación del LLM: reflexiones sobre el diálogo entre agentes (con llamadas a herramientas)

Productos de preguntas y respuestas como ChatGPT y Kimi utilizan diálogos de agente (la posibilidad de invocar distintas herramientas para interactuar con el usuario), como las herramientas de Kimi para diálogos LLM, diálogos de enlace, diálogos de archivo y diálogos de red. Por ejemplo, ChatGPT, Wenxin Yiyin y Xunfei Starfire también se han ampliado con herramientas como Wensheng Diagram, Code Writer y Maths Calculator.

 

LLM应用:Agent对话(附工具调用)的思考

 

LLM应用:Agent对话(附工具调用)的思考

Diálogo de agente para ChatGPT4

 

 

El marco dominante para lograr la capacidad de diálogo de los agentes en la actualidad es ReAct (propuesto por la Universidad de Princeton y Google en 2022), ReAct [1] es un enfoque de palabras clave que combina el pensamiento y la actuación. A continuación se muestra su evolución histórica:

 

LLM应用:Agent对话(附工具调用)的思考

 

Los 3 métodos del cuadro anterior son:

 

Sólo la razón:Utilizar la cadena de pensamiento para el pensamiento multipaso, añadir el prompt "Pensemos paso a paso" antes de introducir la pregunta en el Prompt para guiar el pensamiento multipaso, no dar la respuesta directamente, pero la desventaja es obvia: Razón Sólo puerta cerrada sólo pensar no hacer, no va a salir a ver el mundo exterior para entender el mundo antes de pensar, por lo que producirá alucinaciones, el cambio de dinastías no saben;

 

Actúa sólo:Obtención de la Observación a través de la AcciónObservación en un solo paso, Desventaja: Al hacerlo inmediatamente sin pensar en ello, la respuesta que obtengo al final puede no estar garantizada que sea la misma que quiero;

 

ReAct:Una mezcla de pensar y actuar, es decir, pensar antes de actuar, devolver los resultados de la acción y luego pensar qué hacer a continuación, luego actuar, y repetir el proceso una y otra vez, sabiendo que se produce la respuesta final.

 

Ampliación: también sale una autorreflexión en 2023 (Reflexión) del marco, se unió a la reflexión, como se muestra a continuación, no en profundidad aquí. Además, los amigos interesados pueden mirar a la gran tecnología Taobao número público de "Agente de investigación - 19 tipos de comparación del marco de Agente", esta pieza con el fin de enviar un documento es realmente cuanto más juegas más flores.

 

LLM应用:Agent对话(附工具调用)的思考

 

Mostrar los ejemplos mencionados en el documento ReAct ilustra mejor la lógica anterior y las ventajas e inconvenientes:

 

LLM应用:Agent对话(附工具调用)的思考

 

El Prompt de ReAct es:

"""
Explicación de las variables de entrada para el indicador de agente:
- tools: Descripción del conjunto de herramientas, de la forma "{tool.name}: {tool.description}".
- toool_names: lista de nombres de herramientas
- historial: el historial del diálogo entre el usuario y el agente (tenga en cuenta que las múltiples rondas de ReAct en medio de un chat con el agente no se contabilizan en el historial del diálogo).
- entrada: preguntas de los usuarios
- agent_scratchpad: procesos intermedios de acción y observación.
se formatearía como "\nObservación: {observación}\nPensamiento:{acción}".
A continuación, pasar en agent_scratchpad (registro de pensamiento del agente)
"""
agent_prompt = """
Responde lo mejor que puedas a las siguientes preguntas. Si está en orden, puedes utilizar adecuadamente algunas herramientas. Tienes acceso a las siguientes herramientas.

{herramientas}

Utilice el siguiente formato.
Pregunta: la pregunta de entrada que debe responder1
Pensamiento: siempre hay que pensar qué hacer y qué herramientas utilizar.
Acción: la acción a tomar, debe ser una de {toool_names}
Entrada de la acción: la entrada de la acción
Observación: el resultado de la acción
... (este Pensamiento/Acción/Acción Entrada/Observación puede repetirse cero o más veces)
Ahora sé la respuesta final
Respuesta final: la respuesta final a la pregunta de entrada original
¡Comienza!

historia: {historia}

Pregunta: {input}

Pensamiento: {agent_scratchpad}""""

 

A continuación se muestra el diagrama de flujo de la aplicación ReAct:

LLM应用:Agent对话(附工具调用)的思考

 

 

Existe un buen ejemplo en Internet, al que se hace referencia aquí con fines ilustrativos [2]:

 

Supongamos que tenemos:

 

Preguntas de los usuarios: "¿Cuál es el precio medio de las rosas en el mercado actual? ¿Cómo debo tasarla si encima la vendo por 151 TP3T?".

 

Herramientas:: {'bing web search': una herramienta para buscar en la web información de código abierto utilizando Bing Search; 'llm-math': una herramienta para hacer matemáticas con grandes modelos y Python}

 

Entonces la entrada para la primera ronda de diálogo es:

Responde lo mejor que puedas a las siguientes preguntas. Si está en orden, puedes utilizar adecuadamente algunas herramientas. Tienes acceso a las siguientes herramientas.
bing-web-search: herramienta Bing Search para buscar información de código abierto en Internet
llm-math: herramientas para hacer cálculos matemáticos con grandes modelos y Python
Utilice el siguiente formato.
Pregunta: la pregunta de entrada que debe responder1
Pensamiento: siempre hay que pensar qué hacer y qué herramientas utilizar.
Acción: la acción a realizar, debe ser una de las siguientes [bing-web-search, llm-math]Acción Entrada: la entrada de la acción
Observación: el resultado de la acción
... (este Pensamiento/Acción/Acción Entrada/Observación puede repetirse cero o más veces)
Ahora sé la respuesta final
Respuesta final: la respuesta final a la pregunta de entrada original
¡Comienza!
historia.
Pregunta: ¿Cuál es el precio medio de las rosas en el mercado actual? ¿Cómo debo fijar el precio de las rosas si las vendo con un margen de beneficio de 15%?
Pensamiento.

 

Obtenga la salida y analícela para obtener el Pensamiento, la Acción y la Entrada de Acción:

Pensamiento: Debería utilizar la herramienta de búsqueda para encontrar respuestas y así encontrar rápidamente la información que necesito.
Acción: bing-web-search
Acción Entrada: Precio medio de las rosas

 

Llama a la herramienta de búsqueda bing-web, teclea "precio medio de las rosas", y obtén el contenido de retorno Observación: "Según la web, cada ramo de rosas en Estados Unidos cuesta 80,16 dólares". A continuación, coloca el contenido anterior, organízalo e introdúcelo en la página web. A continuación, introduce el contenido anterior en la plantilla de texto de ReAct e inicia la segunda ronda de diálogos:

Responde lo mejor que puedas a las siguientes preguntas. Si está en orden, puedes utilizar adecuadamente algunas herramientas. Tienes acceso a las siguientes herramientas.
bing-web-search: herramienta Bing Search para buscar información de código abierto en Internet
llm-math: herramientas para hacer cálculos matemáticos con grandes modelos y Python
Utilice el siguiente formato.
Pregunta: la pregunta de entrada que debe responder1
Pensamiento: siempre hay que pensar qué hacer y qué herramientas utilizar.
Acción: la acción a realizar, debe ser una de las siguientes [bing-web-search, llm-math]Acción Entrada: la entrada de la acción
Observación: el resultado de la acción
... (este Pensamiento/Acción/Acción Entrada/Observación puede repetirse cero o más veces)
Ahora sé la respuesta final
Respuesta final: la respuesta final a la pregunta de entrada original
¡Comienza!
historia.
Pregunta: ¿Cuál es el precio medio de las rosas en el mercado actual? ¿Cómo debo fijar el precio de las rosas si las vendo con un margen de beneficio de 15%?
Pensamiento: Debería utilizar la herramienta de búsqueda para encontrar respuestas y así encontrar rápidamente la información que necesito.
Acción: bing-web-search
Acción Entrada: Precio medio de las rosas
Observación: Según fuentes en línea, cada ramo de rosas en EE.UU. cuesta 80,16 dólares.
Pensamiento.

 

Obtenga la salida y analícela para obtener el Pensamiento, la Acción y la Entrada de Acción:

Pensamiento: necesito las matemáticas para calcular lo que supondría un recargo de 15% por encima de eso.
Acción: llm-math
Entrada de acción: 80,16*1,15

 

Llame a la herramienta llm-math, introduzca "80.16*1.15", obtenga el contenido de retorno Observación: "92.184". A continuación, introduzca el contenido anterior en la plantilla ReAct prompt word y abra la tercera ronda de entrada de diálogo:

Responde lo mejor que puedas a las siguientes preguntas. Si está en orden, puedes utilizar adecuadamente algunas herramientas. Tienes acceso a las siguientes herramientas.
bing-web-search: herramienta Bing Search para buscar información de código abierto en Internet
llm-math: herramientas para hacer cálculos matemáticos con grandes modelos y Python
Utilice el siguiente formato.
Pregunta: la pregunta de entrada que debe responder1
Pensamiento: siempre hay que pensar qué hacer y qué herramientas utilizar.
Acción: la acción a realizar, debe ser una de las siguientes [bing-web-search, llm-math]Acción Entrada: la entrada de la acción
Observación: el resultado de la acción
... (este Pensamiento/Acción/Acción Entrada/Observación puede repetirse cero o más veces)
Ahora sé la respuesta final
Respuesta final: la respuesta final a la pregunta de entrada original
¡Comienza!
historia.
Pregunta: ¿Cuál es el precio medio de las rosas en el mercado actual? ¿Cómo debo fijar el precio de las rosas si las vendo con un margen de beneficio de 15%?
Pensamiento: Debería utilizar la herramienta de búsqueda para encontrar respuestas y así encontrar rápidamente la información que necesito.
Acción: bing-web-search
Acción Entrada: Precio medio de las rosas
Observación: Según fuentes en línea, cada ramo de rosas en EE.UU. cuesta 80,16 dólares.
Pensamiento: Necesito datos para calcular cuál sería el precio con un recargo del 15 por encima.
Acción: llm-math
Entrada de acción: 80,16*1,15
Observación: 92.184
Pensamiento.

 

Obtenga la salida y analícela para obtener el Pensamiento, la Acción y la Entrada de Acción:

Pensamiento: Conozco la respuesta final.
Respuesta final: Si desea agregar 15% para vender, debe tener un precio de $92.184.

 

Langchain ha implementado la invocación ReAct [3], que requiere crear ReAct Agent, AgentExecutor, y herramientas. A través de ReAct Agent, podemos realizar lo que hemos mencionado antes, conectarnos a diferentes herramientas, y llamar a diferentes herramientas según las necesidades del usuario y el pensamiento de LLM para mejorar el rendimiento del Q&A. Si reescribes el Chat del Agente basado en ReAct por ti mismo, necesitas prestar especial atención a algunas condiciones límite, como seleccionar una herramienta que no existe, fallar al invocar una herramienta, o que la invocación de la herramienta se quede atascada en un bucle muerto, etc., porque éstas afectarán en última instancia a la efectividad de la interacción. Personalmente, tengo algunas ideas cuando practico el efecto de ReAct Agent Chat:

  • Elija LLMs que hayan realizado la alineación de la capacidad de diálogo del Agente, y preferiblemente ReAct Prompt puede adaptarse a los LLMs;
  • Describir claramente una buena introducción a las herramientas reduce la ambigüedad de descripción entre ellas y evita utilizar la herramienta equivocada;
  • Tenga cuidado con las rondas múltiples de pensar-actuar-observar que conducen a demasiado contexto de entrada, y muchos LLM se vuelven pobres en la comprensión de entradas contextuales largas.
  • Si sólo hay una sola ronda de pensar-actuar-observar, a continuación, un conjunto de proceso hacia abajo, tiene que ir a través de 2 veces LLM y 1 vez llamada a la herramienta, que afectará el tiempo de respuesta, si desea simplificar el proceso de este ReAct, puede utilizar directamente el reconocimiento de intención + llamada a la herramienta, por la herramienta para emitir directamente el resultado final, no tienen que retroalimentar a la LLM para hacer un resumen de la respuesta, la desventaja es que no es tan perfecto.

 

LangChain proporciona una serie de kits de inicio que se pueden encontrar en [4].

 

A través de la parte frontal, podemos encontrar Action y Action Input son el nombre de la herramienta y la entrada de la herramienta, si queremos tener un diálogo con el archivo de carga temporal, podemos simplemente añadir las herramientas directamente? De hecho, no es tan bueno, porque Action Input es la entrada de la herramienta basada en el parseo de la consulta por LLM, mientras que la función "Dialogue on temporary uploaded file" necesita la ubicación del archivo o el contenido del archivo, por esta razón, de hecho, puedes seguir mi dibujo de abajo para poner "Dialogue on temporary uploaded file" en la función "Action Input" solamente. Por esta razón, puedes separar la función "diálogo con archivos temporales subidos" de la función "diálogo con archivos temporales subidos" como he dibujado en la figura de abajo.

 

LLM应用:Agent对话(附工具调用)的思考

 

El proceso específico de cooperación front-end y back-end es el siguiente:

1. Después de que el usuario cargue un archivo, el front-end crea primero una base de conocimiento temporal y luego carga el archivo en esa base de conocimiento, al tiempo que inicializa el número de rondas de diálogo para el archivo a 0 y registra el nombre variable de esa base de conocimiento temporal;

2, cada ronda de diálogo posterior, el nombre de la base de conocimientos se pasa al Agente de Chat, de acuerdo con el flujo anterior ir, después de cada ronda de diálogo, se actualizan con el número de rondas de diálogo en virtud del documento;

3、Cuando el número de rondas de diálogo de documentos > el número de rondas de retención de documentos o el usuario borra manualmente el contexto, entonces el front-end borra la base de conocimiento temporal y borra el nombre variable de la base de conocimiento temporal.

 

bibliografía

[1] ReAct: Synergising Reasoning and Acting in Language Models, presentación oficial: https://react-lm.github.io/

[2] LangChain dry run (1): ¿Cómo exactamente AgentExecutor conduce modelos y herramientas para completar tareas? - Artículo de Huang Jia - 知乎https://zhuanlan.zhihu.com/p/661244337

[3] ReAct, documentación Langchain: https://python.langchain.com/docs/modules/agents/agent_types/react/

[4] Agent Toolkit, documentación de Langchain: https://python.langchain.com/docs/integrations/toolkits/

[5] "LLM+Search Rewrite" 10 Documentos de un vistazo - Ensayos de Obsesionados por buscar y rebuscar - Conocimientos: https://zhuanlan.zhihu.com/p/672357196

[6] MultiQueryRetriever, documentación de Langchain: https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever/

[7] HypotheticalDocumentEmbedder, documentación Langchain: https://github.com/langchain-ai/langchain/blob/master/cookbook/hypothetical_document_ incrustaciones.ipynb

[8] Desarrollo de aplicaciones Big Model, consejos avanzados imprescindibles de RAG - Artículos de Rainfly - Conocimientos: https://zhuanlan.zhihu.com/p/680232507

© declaración de copyright

Artículos relacionados

Sin comentarios

Debe iniciar sesión para participar en los comentarios.
Acceder ahora
ninguno
Sin comentarios...