El caso de la construcción de Agentes Autónomos a partir de modelos grandes (1)


1.1 Principios y mecanismos de los agentes autónomos
En esta sección, nos centraremos en los agentes autónomos en LangChain (Autonomous Agents on LangChain). Los agentes autónomos son uno de los temas más candentes en la industria en este momento, especialmente en aplicaciones empresariales. Por supuesto, los agentes autónomos también son uno de los focos de investigación centrales.
Como se muestra en la Figura 15-1, este es un diagrama de flujo básico de BabyAGI.
inserte la descripción de la imagen aquí

Figura 15-1 Diagrama de flujo básico de BabyAGI
En este diagrama de flujo, podemos ver que comienza con una lista de tareas específica.
Gavin gran café WeChat: NLP_Matrix_Space
El primer paso: es obtener la primera tarea incompleta (tirar de la primera tarea incompleta). Aparentemente, lo está obteniendo de la lista de tareas. De acuerdo con el contenido que compartimos antes, todos deben saber que la lista de tareas es generada por nuestro modelo de lenguaje grande, como GPT-4. Este es el primer paso. Después de obtener las tareas sin terminar, el siguiente paso es el proceso de ejecución de tareas. (Ejecutar tarea). Tenemos un agente de ejecución concreto (Execution Agent), donde se pueden realizar diversas operaciones porque es un agente que puede interactuar con nuestro modelo. En este proceso de ejecución, el core es BabyAGI, la idea original depende del modelo, pero como agente, de acuerdo al contenido que compartimos antes, debes saber que también puede interactuar con herramientas, involucrando modelos, herramientas y acceso a datos, por lo que produce resultado. En LangChain, puede usar una cadena (cadena), como LLMChain, para completar una gran cantidad de trabajo. El origen de los resultados generados lo proporciona el modelo de lenguaje, y la información proporcionada se basa en algunos requisitos previos, como el objetivo de la tarea, el historial anterior y la configuración del sistema. Por supuesto, a veces el agente llamará a herramientas de terceros para generar resultados, y estos resultados también servirán como información de entrada para el modelo antes de generar resultados. Estos contenidos no deberían ser difíciles de entender para todos, porque hemos analizado estos contenidos a través de una gran cantidad de casos y análisis de código fuente. Por ejemplo, GPT-4 genera un resultado basado en estos factores, le da el resultado al agente y lo convierte en la premisa o contexto para el siguiente paso.
Paso 2: Enriquezca el resultado y almacénelo en Vector DB (Enriquezca el resultado y almacénelo en Vector DB). Dado que BabyAGI es un agente autónomo automático orientado a tareas, tendrá cierta gestión o conservación del estado. Aquí hay una palabra muy interesante llamada "Enriquecer", que es muy interesante. Aquellos que desarrollan Big Data Flink entenderán que una de las tareas principales de Flink en el flujo de datos es la operación de enriquecimiento de datos. La llamada operación de enriquecimiento de datos significa que, en función de un determinado evento, puede generar información nueva antes o después de la ejecución, pero esta nueva información debe completar el proceso de enriquecimiento y se asociará con otra información, por lo que siento que en La palabra se usa aquí muy acertadamente. "Enriquezca los resultados y guárdelos en Vector DB", aquí, ¿qué está haciendo realmente su núcleo? Su núcleo es combinar el contexto, las tareas completadas anteriormente, la información de configuración del sistema y sus objetivos para completar todo el proceso de enriquecimiento y almacenar los resultados en una base de datos vectorial. En este paso, el agente de contexto (Agente de contexto) está involucrado y el contexto de recuperación (Contexto de recuperación) está asociado con mucha información histórica. El resultado de retorno (Return result) es el resultado del primer paso. Según el contexto de recuperación y el resultado de retorno, el resultado se almacena en la base de datos de vectores (Store result in Vector DB).
Cuenta WeChat de Gavin: NLP_Matrix_Space
Paso 3: Cree una nueva tarea y vuelva a priorizar la lista de tareas (Crear nuevas tareas y volver a priorizar la lista de tareas). En este paso, podemos crear nuevas tareas y volver a priorizar la lista de tareas. ¿Quién crea nuevas tareas y vuelve a priorizar las listas de tareas? Por supuesto, es nuestro modelo de lenguaje, como GPT-4. Una de las razones por las que estamos particularmente interesados ​​en el desarrollo de aplicaciones de modelos de lenguaje a gran escala es su capacidad de inferencia. La creación de nuevas tareas es un proceso dinámico y en evolución, que es una de las claves para el uso de modelos de lenguaje, que es de gran importancia en escenarios prácticos específicos. Por ejemplo, en el campo de la educación, si el proceso de aprendizaje está impulsado por un modelo de lenguaje grande, el profesor o tutor asigna tareas a los estudiantes y, después de que los estudiantes completen la primera tarea, el modelo de lenguaje combinará información de contexto e información histórica. para el enriquecimiento de datos (Enriquecimiento de datos), "Enriquecer" Esta palabra es muy apropiada. El concepto de "Enriquecer" puede enriquecerse con otros rendimientos académicos, no solo limitados a este semestre o este año académico, sino que también consideran el rendimiento del pasado 1 año o incluso 5 años. Cuando esta información se devuelve a nuestro modelo de lenguaje para su procesamiento, genera dinámicamente nuevas tareas. Después de generar nuevas tareas, el modelo de lenguaje realizará otra operación, que consiste en volver a determinar la prioridad de la lista de tareas para determinar el mejor orden de ejecución para el siguiente paso. Por lo tanto, este sistema realiza escenarios educativos automatizados, personalizados, más eficientes y focalizados. Para quienes trabajan en el campo de la educación, este proceso debe ser muy emocionante, porque la tecnología ahora se ha convertido en una realidad.
Realizamos la operación del Agente de priorización, determinamos el siguiente paso de ejecución y luego podemos repetir (bucle) el proceso anterior nuevamente, pero tenga en cuenta que en este proceso repetido, algunas cosas permanecen sin cambios, ese es el objetivo del usuario. Tomando el escenario educativo como ejemplo, su tutor puede pedirle que complete una tarea. Los antecedentes, las condiciones y la información de evaluación de esta tarea son invariables, y esta información limitará todo su comportamiento. Pero, ¿qué está cambiando? es el cambio de estado cada vez que completas una tarea. Cuando el objetivo sigue siendo el mismo, su estado cambia constantemente. Combinando el objetivo, el estado y el desempeño histórico, el modelo de lenguaje ajustará dinámicamente las tareas de aprendizaje generadas, y es altamente específico. Por ejemplo, para un estudiante promedio, completar una tarea puede requerir realizar 30 pasos o completar 30 subtareas. Pero para aquellos estudiantes que son muy buenos o tienen un interés especial en el campo, es posible que solo necesiten uno o dos pasos para completar. Especialmente en el paso de enriquecimiento de datos (Data Enrichment), no hay necesidad de hacerlo paso a paso. Pero si su base no es buena, o su interés en este campo no es lo suficientemente fuerte, es necesario proporcionarle pasos más refinados.
Por lo tanto, BabyAGI ha tenido una influencia considerable en la industria, especialmente por sus ideas que revelan el potencial y las capacidades de los modelos de lenguaje, así como su valor práctico para la industria de la educación y otras industrias relacionadas. Esta es una de las razones por las que dedicamos una sección a discutir los agentes autónomos basados ​​en LangChain (agente autónomo en langchain). También discutimos específicamente otro agente autónomo, AutoGPT, revelando el fundamento detrás de él y el código fuente del caso.
Como se muestra en la Figura 15-2, es el directorio de códigos del agente autónomo de LangChain.Hay dos directorios debajo del directorio (autonomous_agents), uno es AutoGPT y el otro es BabyAGI.
inserte la descripción de la imagen aquí

Figura 15-2 Directorio de códigos de agentes autónomos de LangChain
AutoGPT y BabyAGI son dos agentes típicos, pero no los usamos directamente, pero revelan la enorme capacidad de razonamiento del modelo de procesamiento del lenguaje natural y lo convierten en realidad. Ellos demuestran esto y han tenido un impacto teórico significativo en varios campos. AutoGPT descompone automáticamente una tarea de alto nivel en pasos concretos y realiza automáticamente un autoajuste reflexivo. Esto abre mucho espacio imaginable en el campo de la inteligencia artificial general o la automatización.
Inicialmente discutimos este flujo básico. En la perspectiva de la agencia, consideramos tres agentes principales. El primero es Execute Agent, que llama a GPT-4 u otros modelos de lenguaje grandes detrás de él. El segundo es el Agente de creación de tareas, que crea tareas en función de sus objetivos. En un escenario educativo, como un tutor dando una tarea, que es la misma para todos los estudiantes, solo el proceso de aprendizaje específico es diferente. El agente de creación de tareas tiene en cuenta su desempeño anterior y tiene en cuenta sus antecedentes, historial de aprendizaje reciente y a largo plazo. Esto también implica el contenido del agente de contexto (agente de contexto), que almacena todos los datos de estado en un solo lugar y se puede acceder a ellos en cualquier momento. Por supuesto, usamos una base de datos basada en vectores, por ejemplo, puede usar Faiss de Facebook. El tercer núcleo es el Agente de Priorización, que consiste en determinar cuál es la tarea más importante a realizar a continuación. Esto es muy crítico, especialmente en entornos dinámicos. Como agente, establecer prioridades es muy importante. Volviendo al ejemplo del escenario de educación mencionado anteriormente, el agente prioritario puede determinar qué tareas son importantes y urgentes, para que los estudiantes puedan aprender el contenido más importante u obtener ayuda oportuna en el momento más adecuado. Sin embargo, hay muchos factores a considerar al establecer prioridades, y la consideración de estos factores está impulsada por el modelo. También enfatizamos otro punto muy importante, puede usar modelos expertos para influir en el proceso de toma de decisiones, incluida la influencia en el proceso de toma de decisiones de priorización o gestión. Ya sea a través del papel o la perspectiva del código fuente, le hemos explicado muy claramente que cuando su modelo de lenguaje grande considera las opiniones de expertos en diferentes campos, especialmente aquellos modelos relativamente pequeños, puede mejorar significativamente el rendimiento.
Gavin gran café WeChat: NLP_Matrix_Space
Regrese a nuestro caso para ver cómo se implementa y el proceso de ejecución del caso. Partiendo de esta base, nos sumergiremos en las partes internas del marco. Ya sea un caso o un marco, desarrollamos en base a LangChain. LangChain se ha convertido en un marco estándar de desarrollo de aplicaciones modelo a gran escala reconocido por la comunidad de código abierto y la industria. Proporciona muchas herramientas prácticas y puede ahorrar mucho tiempo. Echemos un vistazo a la parte del código en detalle, que se basa en "BabyAGI con herramientas" en el documento oficial. El nombre en sí mismo es emocionante porque interactúa con las herramientas basadas en la idea de los agentes. Las herramientas son un núcleo muy Función proporcionada por LangChain.
En el primer paso, necesitamos instalar algunas bibliotecas, como LangChain, OpenAI, tiktoken, etc. Estamos usando faiss-cpu, que no es solo una versión de CPU, pero no necesita depender de otras herramientas, ya que puede ejecutarse en modo local. Además, también usamos bibliotecas como google-search-results.

! pip instalar langchain openai tiktoken faiss-cpu google-search-results -q

Estamos usando la versión de CPU de faiss localmente debido al modo local de faiss. En el desarrollo actual de aplicaciones de modelos a gran escala, de hecho, las operaciones vectoriales no requieren demasiados recursos informáticos. Esta es una pregunta que a menudo hacen los lectores, si existe la necesidad de un servidor de GPU dedicado, desde un punto de vista de desarrollo o aprendizaje, en realidad no hay necesidad. Incluso si necesita una GPU en algunos casos, la forma más fácil y eficiente es usar Google Colab, es la forma más fácil y más utilizada, porque muchas personas en todo el mundo usan Google Colab, se ha probado completamente. ha sido probado y optimizado, y no solo proporciona GPU, sino también TPU, por lo que no tiene que preocuparse por muchos problemas de hardware. Para desarrollar aplicaciones de modelos grandes, no son necesarios requisitos especiales en la máquina, y no se imponen requisitos especiales en la máquina.
Importe las bibliotecas necesarias, establezca variables de entorno, importe LLMChain, OpenAI, etc. El código también incluye algunas importaciones de almacenamiento de vectores y algunas configuraciones básicas. Después de importar la biblioteca y establecer la variable de entorno, el código utiliza la biblioteca dotenv para cargar el archivo de variables de entorno y establecer SERPAPI_API_KEY y OPENAI_API_KEY en los valores correspondientes.

1.	import os
2.	from collections import deque
3.	from typing import Dict, List, Optional, Any
4.	
5.	from langchain import LLMChain, OpenAI, PromptTemplate
6.	from langchain.embeddings import OpenAIEmbeddings
7.	from langchain.llms import BaseLLM
8.	from langchain.vectorstores.base import VectorStore
9.	from pydantic import BaseModel, Field
10.	from langchain.chains.base import Chain 
11.	 
12.	import os
13.	
14.	from dotenv import load_dotenv, find_dotenv
15.	_ = load_dotenv(find_dotenv())
16.	
17.	os.environ['SERPAPI_API_KEY'] = os.getenv('SERPAPI_API_KEY')
18.	os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')

En el código anterior, usamos una importante estructura de datos deque en la biblioteca de colecciones.Como estructura de datos, deque se puede operar desde la izquierda o la derecha, o desde el extremo frontal o posterior, y es muy eficiente. Cuando el autor explicó el desarrollo avanzado de Python a una empresa multinacional anteriormente, había cinco estructuras de datos avanzadas básicas, y deque es una de las estructuras más importantes. La razón por la que es importante es que proporciona muchas operaciones de estructura de datos útiles. Vale la pena todos Tómese el tiempo para aprender.
Luego importamos LLMChain, hemos estado usando LLMChain en el código fuente anterior y en el proceso de ejecución. Importe PromptTemplate y OpenAIEmbeddings, ya que son muy efectivos para administrar solicitudes (Prompt) y convertir texto en vectores. En particular, OpenAIEmbeddings funciona bien, puede convertir la información de entrada o el texto en una representación vectorial. BaseLLM es similar a un contenedor (wrapper), que puede considerarse similar a una interfaz. VectorStore se utiliza para el almacenamiento de datos, BaseModel, Field y Chain son algunos objetos básicos.
Volvamos al documento oficial, LangChain nos proporciona algunos módulos, que incluyen entrada y salida del modelo (E/S del modelo), conexión de datos (Conexión de datos), cadena (Cadenas), memoria (Memoria), agente (Agente), devolución de llamada (Devoluciones de llamada) espera. LangChain proporciona estos módulos para facilitar el desarrollo. Proporciona muchas funciones que LangChain por sí mismo no implementa, especialmente cuando desea reproducir los últimos trabajos de investigación o mostrar una demostración de producto que no se puede encontrar en Internet. Los módulos de LangChain pueden facilitar enormemente su desarrollo y mejorar la calidad del desarrollo y ahorrar tiempo.
Como necesitamos realizar operaciones de red, usamos los servicios de Google empaquetados en Python y tenemos SERPAPI_API_KEY correspondiente. Además, necesitamos OPENAI_API_KEY.
En el siguiente código, primero, importe los módulos InMemoryDocstore y FAISS. InMemoryDocstore se utiliza para almacenar datos de documentos en la memoria, mientras que FAISS es un módulo para el almacenamiento de vectores y la búsqueda de similitudes. A continuación, se define un modelo de vector incrustado embeddings_model, utilizando OpenAIEmbeddings, generalmente 1536 dimensiones, cada dimensión representa una característica, este modelo de vector incrustado puede convertir texto en representación vectorial. El módulo FAISS se usa aquí, el modelo de recuperación es IndexFlatL2, Faiss tendrá muchos otros algoritmos de recuperación, y la función de consulta integrada embeddings_model.embed_query, los objetos de almacenamiento de índices y documentos se pasan al constructor de FAISS. InMemoryDocstore({}) significa utilizar el almacenamiento de documentos en memoria.

1.	from langchain.docstore import InMemoryDocstore
2.	from langchain.vectorstores.faiss import FAISS
3.	
4.	# 定义嵌入模型
5.	embeddings_model = OpenAIEmbeddings()
6.	# 将vectorstore初始化为空
7.	import faiss
8.	embedding_size = 1536
9.	index = faiss.IndexFlatL2(embedding_size)
10.	vectorstore = FAISS(embeddings_model.embed_query, index, InMemoryDocstore({
    
    }), {
    
    }) 

A continuación, defina algunas cadenas (Chains), BabyAGI se basa en tres cadenas LLM:
 Cadena de creación de tareas: para seleccionar nuevas tareas que se agregarán a la lista
 Cadena de prioridad de tareas: para volver a priorizar tareas
 Cadena de ejecución: ejecutar tareas
La clase TaskCreationChain es una subclase de LLMChain, la clave está en la clase TaskCreationChain, que brinda asistencia al crear tareas. La clase TaskCreationChain proporciona un método de clase from_llm para crear objetos LLMChain a partir de objetos LLM (modelo de lenguaje) básicos. Este método acepta un parámetro llm y un parámetro detallado y devuelve un objeto LLMChain. En el método from_llm, se define una plantilla de creación de tareas de task_creation_template. Esta plantilla describe la función de la IA de creación de tareas y las variables de entrada utilizadas, incluidos el objetivo (objetivo), el resultado (resultado), la descripción de la tarea (task_description) y las tareas incompletas (incomplete_tasks), etc.
El contenido de la plantilla de creación de tareas es:

Eres una IA de creación de tareas que utiliza los resultados de la ejecución de agentes para crear nuevas tareas con el siguiente objetivo: {objetivo} y la última tarea completada tiene un resultado: {resultado}. Este resultado se basa en la descripción de la tarea: {task_description}. Estas son tareas incompletas: {incomplete_tasks}. En función de los resultados, cree nuevas tareas que el sistema de IA debe completar sin superponerse con tareas inconclusas. Devuelve las tareas como una matriz.
Al usar PromptTemplate, pasar la plantilla de creación de tareas y las variables de entrada al constructor de LLMChain, se crea un objeto LLMChain con la función de creación de tareas y se devuelve como resultado.

1.	class TaskCreationChain(LLMChain):
2.	    """生成任务的链."""
3.	
4.	    @classmethod
5.	    def from_llm(cls, llm: BaseLLM, verbose: bool = True) -> LLMChain:
6.	        """获取响应解析器."""
7.	        task_creation_template = (
8.	            "You are an task creation AI that uses the result of an execution agent"
9.	            " to create new tasks with the following objective: {objective},"
10.	            " The last completed task has the result: {result}."
11.	            " This result was based on this task description: {task_description}."
12.	            " These are incomplete tasks: {incomplete_tasks}."
13.	            " Based on the result, create new tasks to be completed"
14.	            " by the AI system that do not overlap with incomplete tasks."
15.	            " Return the tasks as an array."
16.	        )
17.	        prompt = PromptTemplate(
18.	            template=task_creation_template,
19.	            input_variables=["result", "task_description", "incomplete_tasks", "objective"],
20.	        )
21.	        return cls(prompt=prompt, llm=llm, verbose=verbose) 

El método from_llm que se usa aquí se basa en el modelo de lenguaje grande. Señalamos claramente aquí que la creación de tareas la crea el agente de creación de tareas (Agente de creación de tareas) usando el modelo de lenguaje grande y de acuerdo con las solicitudes (Prompts). Echemos un vistazo a las plantillas, donde se usa PromptTemplate. En esta plantilla, describimos una IA de creación de tareas que utiliza los resultados de un agente de ejecución para crear tareas. Entonces, ¿dónde está nuestro agente de ejecución? Como se muestra en la Figura 15-3, el cuadro punteado identifica al agente de ejecución. El primer paso es hacer que la tarea se ejecute y el agente de ejecución completa la tarea. El resultado de ejecutar el agente se enriquece, se combina con el contexto y luego se pasa a nuestro agente de creación de tareas.
inserte la descripción de la imagen aquí

Figura 15- 3 Agente de ejecución
Cree una nueva tarea con el siguiente objetivo: {objetivo}. Obviamente, este objetivo es un objetivo que pones y el usuario te dice qué hacer. El resultado de la última tarea completada es: {resultado}, que es su salida. Si el objetivo es la entrada del usuario, entonces el resultado es la salida. Eso no es del todo exacto, porque estamos hablando del resultado de la última tarea. Desde la perspectiva de un modelo de lenguaje grande, cuando genera un resultado final similar a un informe, la última tarea es definitivamente un contenido central, pero también contiene información histórica y alguna otra información. Este resultado se basa en la siguiente descripción de la tarea {task_description}, seguida de tareas incompletas: {incomplete_tasks}. Con base en este resultado, cree nuevas tareas para completar. Esta es su instrucción, pidiéndole que cree nuevas tareas, y las tareas creadas por el sistema de IA de acuerdo con las instrucciones no deben superponerse con tareas inconclusas. Este es un consejo de muy alta calidad porque establece claramente que al crear una nueva tarea, no debe superponerse con una tarea abierta existente, de lo contrario, habría demasiada duplicación de información. Luego, las tareas se devuelven como una matriz en la que colocaremos las solicitudes (Prompts) en nuestra PromptTemplate y estableceremos las variables_de_entrada en ["resultado", "descripción_de_tarea", "tareas_incompletas", "objetivo"]. Este objetivo es claramente la meta final. A veces decimos en broma, ¿cuál es el objetivo de abrirse? Una meta es como un bebé, y el bebé es un jefe. El bebé parece tener una orden o necesidad, así como un bebé tiene todo tipo de necesidades. Ya sea una persona o una cosa, todos giramos en torno a este bebé, y ese es su entorno. Por eso solemos decir "el bebé es el jefe" cuando hablamos de metas. Por un lado, esto es para enfatizar la importancia del objetivo y, por otro lado, cuando se trabaja en equipo y la comunicación, todos entienden el significado de esta oración, es decir, todo debe ser coherente con el objetivo. De hecho, a lo largo de la operación del modelo Autónomo, considera sus objetivos en cada paso del camino para que pueda realizar tareas de manera autónoma. Por lo tanto, este método autónomo en realidad tiene un objetivo específico, y el usuario ingresa este objetivo, pero después de que el usuario ingrese el objetivo, automáticamente lo ayudará a completarlo. De hecho, es controlado por el usuario, porque el usuario da la tarea, es un agente autónomo orientado a tareas (Agente Autónomo).
La línea 21 del código anterior, aquí es para crear una instancia de la clase LLMChain, y lo que devolvemos es un objeto LLMChain. Este objeto contiene nuestro modelo, indicaciones y estado detallado. Por lo general, las personas establecerán verbose en True, porque puede ver más estado interno. Este objeto es nuestro Agente de creación de tareas.
A continuación, otro agente es el Agente de Priorización, que nos ayuda a encapsular en una cadena (Chain), que es la cadena que determina la prioridad de las tareas.
Implementación de código de task_prioritization.py:

1.	class TaskPrioritizationChain(LLMChain):
2.	    """确定任务优先级的链."""
3.	
4.	    @classmethod
5.	    def from_llm(cls, llm: BaseLLM, verbose: bool = True) -> LLMChain:
6.	        """获取响应解析器."""
7.	        task_prioritization_template = (
8.	            "You are an task prioritization AI tasked with cleaning the formatting of and reprioritizing"
9.	            " the following tasks: {task_names}."
10.	            " Consider the ultimate objective of your team: {objective}."
11.	            " Do not remove any tasks. Return the result as a numbered list, like:"
12.	            " #. First task"
13.	            " #. Second task"
14.	            " Start the task list with number {next_task_id}."
15.	        )
16.	        prompt = PromptTemplate(
17.	            template=task_prioritization_template,
18.	            input_variables=["task_names", "next_task_id", "objective"],
19.	        )
20.	        return cls(prompt=prompt, llm=llm, verbose=verbose) 

La clase TaskPrioritizationChain hereda de la clase LLMChain y es una cadena que determina la prioridad de las tareas. Se implementa un método de clase from_llm, que recibe dos parámetros de llm y verbose y devuelve un objeto LLMChain. La función de este método es obtener el analizador de respuestas. Entre ellos, defina una variable de cadena task_prioritization_template, que contiene el nombre de la tarea y la información de destino, y use algunos marcadores de posición, como {task_names}, {objective} y {next_task_id}, para el reemplazo dinámico en el código.
El contenido de la plantilla de prioridad de tareas es:

Usted es una IA de priorización de tareas encargada de limpiar y volver a priorizar las siguientes tareas: {task_names}. Considere el objetivo final de su equipo: {objetivo}, no elimine ninguna tarea, devuelva el resultado como una lista numerada, como: #.primera tarea #.segunda tarea comienza la lista de tareas con el número {next_task_id}

A continuación, use PromptTemplate para crear una instancia de solicitud, la función de esta instancia es reemplazar los marcadores de posición anteriores con información real. Luego, se devuelve un objeto de instancia de TaskPrioritizationChain, que contiene atributos como aviso, llm y detallado.
Es obvio que el método from_llm de la clase TaskPrioritizationChain devuelve un objeto LLMChain. En este método, podemos ver algunas instrucciones importantes. Tenga en cuenta que hemos declarado explícitamente antes que este modelo es un servicio de GPT-4 para administrar la prioridad de las tareas. Por lo tanto, en la instrucción, debe decirle explícitamente a GPT-4 qué hacer: "Usted es una IA de prioridad de tareas, responsable de limpiar el formato y reprogramar la prioridad de las siguientes tareas: {task_names}". Le dice al modelo que necesita limpiar y reordenar tareas. Algunos símbolos en él, como "limpiar el formato" y "repriorizar" están todos en forma de gerundios, y el modelo de lenguaje obtendrá la información correspondiente según la relación entre los símbolos. Este punto de vista se ha expresado muy claramente en nuestros artículos anteriores, es decir, el modelo no se piensa a sí mismo, simplemente extrae implícitamente el patrón de texto basado en la construcción de símbolos. Debido a estos patrones, implica algunos pasos. Entre ellos, {task_names} es una lista de tareas específicas. Al mismo tiempo, debe decirle claramente al modelo cuál es el objetivo final {objetivo} de su equipo. Tenga en cuenta que no debe eliminar ninguna tarea, ya que es información central. Si el modelo los eliminara, tendría un impacto muy grande. Pero desde el punto de vista de la aplicación, es posible que desee eliminar algunas tareas para satisfacer mejor las necesidades de personas específicas. El resultado devuelto es una lista numerada, por ejemplo: "#. la primera tarea, #. la segunda tarea", y comience a contar la lista de tareas desde el número {next_task_id}, la lista aquí se puede considerar como una pila en la computadora , la plantilla La variable de entrada es ["task_names", "next_task_id", "objective"], que devuelve una instancia de LLMChain.

Supongo que te gusta

Origin blog.csdn.net/duan_zhihua/article/details/132052179
Recomendado
Clasificación