"Nunca envíes a un humano a hacer el trabajo de una máquina"
— Agente Smith
Los LLM por chat son geniales, pero tomar medidas como un agente inteligente es el siguiente nivel. ¿Qué pasa con muchos de ellos? Conozca el último proyecto Autogen de Microsoft.
Pero hay un problema. Autogen fue creado para conectarse a OpenAi de forma predeterminada, lo cual es limitante, costoso y censurado/no sensible. Es por eso que usar un LLM simple localmente como Mistral-7B
es la mejor manera de hacerlo. También puedes usarlo con cualquier otro modelo de tu elección como Llama2
, Falcon
, Vicuna
, Alpaca
, el cielo (tu hardware) es realmente el límite.
El secreto es utilizar el estilo de salida openai JSON en su servidor LLM local, como text-generation-webui de Oobabooga, y luego conectarlo a autogen. Eso es lo que estamos construyendo hoy.
Tenga en cuenta que existen otros métodos para hacer que llms escupe texto en formato openai apis, así como los enlaces de Python llama.cpp.
En este tutorial estaremos: 0. Obteniendo la webui de generación de texto de Oobabooga, un LLM (Mistral-7b) y Autogen
Configurar la extensión de formato OpenAi en Oobabooga
Iniciar el servidor LLM local con el formato OpenAi
Conectándolo a Autogen
¡Empecemos!
Antes de continuar, se recomienda utilizar un entorno virtual al instalar paquetes pip. Haz uno nuevo y actívalo si te apetece.
Obtener Webui de generación de texto de Obbabooga: este es un programa bien conocido para alojar LLM en su máquina local. Dirígete a la página de text-generation-webui y sigue la guía de instalación. Es muy sencillo comenzar. Es posible que también desees descargar CUDA si estás utilizando una gpu NVIDIA para la aceleración.
Obtener un LLM (Mistral-7b-Instruct): después de descargar la webui de generación de texto, no lo inicie todavía. Necesitamos obtener un LLM para dar vida a nuestros agentes.
Hoy exploraremos Mistral-7B , específicamente Mistral-7B-instruct-v0.1.Q4_K_S.gguf , una versión optimizada del modelo de TheBloke. Puede elegir el modelo optimizado perfecto para su máquina según la explicación en la descripción .
Puede elegir modelos más pequeños o más grandes según su hardware. Aunque no tengas miedo de probar cosas en tu computadora, aquí estamos haciendo ciencia.
Dirígete a la página Archivos y versiones y toma lo siguiente:
configuración.json
Mistral-7B-instruct-v0.1.Q4_K_S.gguf (funcionará bien en la mayoría de las configuraciones intermedias)
Una vez descargado, dirígete a la carpeta de instalación de text-generation-webui y dentro de ella abre la carpeta de modelos . Allí, cree una nueva carpeta con el nombre de su modelo (o cualquier nombre que desee), como "mistral-7b-instruct" . El camino será así:
C:/.../text-generation-webui/models/mistral-7b-instruct
Coloque tanto el archivo config.json como el model.gguf en la nueva carpeta.
Obteniendo Autogen :
Para instalar la biblioteca Python de creación de múltiples agentes de Microsoft, simplemente instálela usando el instalador del paquete pip en su terminal.
pip install pyautogen
Con su nueva webui de generación de texto instalada y el LLM descargado, podemos proceder a hacer que su servidor local Oobabooga hable en formato OpenAi JSON. Puede obtener más información sobre los formatos de las API de OpenAi y sus características en su
Para conectar Autogen con nuestro servidor local, necesitaremos activar la extensión “openai” en la carpeta de extensiones text-generation-webui de Ooobaboga.
En su terminal, diríjase a la carpeta “text-spawn-webui/extensions/openai” y allí instale sus requisitos:
pip install -r requirements.txt
Ahora regrese a la carpeta raíz /text-generación-webui en su terminal. Es hora de poner a este bebé en funcionamiento.
Como su nombre lo indica, está destinado a usarse como una interfaz de usuario web, pero también puede mantenerlo ejecutándose como un servidor para consultar API de otros programas que cree.
Para iniciarlo como servidor local y con la extensión openai api, use el siguiente comando según su sistema operativo actual.
No olvide cambiar el parámetro "modelo" al nombre de la carpeta que creamos anteriormente en /models. (En mi caso le puse a la carpeta el nombre **“**mistral-7b-instruct”)
Ventanas:
./start_windows.bat --extensions openai --listen --loader llama.cpp --model mistral-7b-instruct
Linux:
./start_linux.sh --extensions openai --listen --loader llama.cpp --model mistral-7b-instruct
Mac OS:
./start_macos.sh --extensions openai --listen --loader llama.cpp --model mistral-7b-instruct
Pasamos el parámetro openai de extensiones para cargar la extensión, escuchamos para iniciar un servidor que podemos consultar desde autogen, cargador y modelo que especifican el cargador para el modelo y el nombre de la carpeta del modelo que creamos anteriormente, con config.json y el modelo. archivos guf.
Si todo va bien, es posible que veas algo como esto:
La webui se ejecuta en el puerto 7860 de su host local como de costumbre, pero tenga en cuenta que nuestra API compatible con OpenAI también está lista para ser utilizada por Autogen en nuestro host local en
En este punto, ya tiene instalada la biblioteca de autogen, por lo que es hora de importarla y conectar nuestro servidor LLM.
Comencemos con algo simple, un único agente interactuando con un humano (usted). Cree un nuevo directorio donde desee y agregue un nuevo archivo autogen.py allí. También puede cambiar el nombre del archivo como desee.
Generalmente, para simplemente conectarse a la API de OpenAi GPT, debe iniciar el archivo de esta manera:
import autogen #start importing the autogen lib config_list = [ { 'model': 'gpt-3.5-turbo', 'api_key': 'your openai real key here' } ]
Pero para usar nuestro servidor local en ejecución, lo iniciamos así:
import autogen #start importing the autogen lib config_list = [ { "model": "mistral-instruct-7b", #the name of your running model "api_base": "http://127.0.0.1:5001/v1", #the local address of the api "api_type": "open_ai", "api_key": "sk-111111111111111111111111111111111111111111111111", # just a placeholder } ]
Como no necesita una clave real para trabajar localmente, solo usamos el marcador de posición sk-1111….
A continuación, podemos configurar el agente y el usuario humano. Lea los comentarios para una mejor comprensión.
import autogen #start importing the autogen lib config_list = [ { "model": "mistral-instruct-7b", #the name of your running model "api_base": "http://127.0.0.1:5001/v1", #the local address of the api "api_type": "open_ai", "api_key": "sk-111111111111111111111111111111111111111111111111", # just a placeholder } ] # create an ai AssistantAgent named "assistant" assistant = autogen.AssistantAgent( name="assistant", llm_config={ "seed": 42, # seed for caching and reproducibility "config_list": config_list, # a list of OpenAI API configurations "temperature": 0, # temperature for sampling "request_timeout": 400, # timeout }, # configuration for autogen's enhanced inference API which is compatible with OpenAI API ) # create a human UserProxyAgent instance named "user_proxy" user_proxy = autogen.UserProxyAgent( name="user_proxy", human_input_mode="NEVER", max_consecutive_auto_reply=10, is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"), code_execution_config={ "work_dir": "agents-workspace", # set the working directory for the agents to create files and execute "use_docker": False, # set to True or image name like "python:3" to use docker }, ) # the assistant receives a message from the user_proxy, which contains the task description user_proxy.initiate_chat( assistant, message="""Create a posting schedule with captions in instagram for a week and store it in a .csv file.""", )
Recuerde cambiar message=”…” con sus pedidos iniciales.
Si simplemente ejecuta el script con el mensaje, es posible que vea un nuevo directorio llamado "agents-workspace" con un archivo .csv allí, creado "manualmente" por el agente.
Ahora vayamos por algo un poco más avanzado.
Múltiples agentes con roles y contextos.
Esto funcionará como un "grupo de chat", como cualquier aplicación de mensajería que conozca. Sus contextos (mensaje del sistema) les dirán cómo comportarse y qué jerarquía deben obedecer. Esta vez tendremos:
import autogen #Use the local LLM server same as before config_list = [ { "model": "mistral-instruct-7b", #the name of your running model "api_base": "http://127.0.0.1:5001/v1", #the local address of the api "api_type": "open_ai", "api_key": "sk-111111111111111111111111111111111111111111111111", # just a placeholder } ] # set a "universal" config for the agents agent_config = { "seed": 42, # change the seed for different trials "temperature": 0, "config_list": config_list, "request_timeout": 120, } # humans user_proxy = autogen.UserProxyAgent( name="Admin", system_message="A human admin. Interact with the planner to discuss the plan. Plan execution needs to be approved by this admin.", code_execution_config=False, ) executor = autogen.UserProxyAgent( name="Executor", system_message="Executor. Execute the code written by the engineer and report the result.", human_input_mode="NEVER", code_execution_config={"last_n_messages": 3, "work_dir": "paper"}, ) # agents engineer = autogen.AssistantAgent( name="Engineer", llm_config=agent_config, system_message='''Engineer. You follow an approved plan. You write python/shell code to solve tasks. Wrap the code in a code block that specifies the script type. The user can't modify your code. So do not suggest incomplete code which requires others to modify. Don't use a code block if it's not intended to be executed by the executor. Don't include multiple code blocks in one response. Do not ask others to copy and paste the result. Check the execution result returned by the executor. If the result indicates there is an error, fix the error and output the code again. Suggest the full code instead of partial code or code changes. If the error can't be fixed or if the task is not solved even after the code is executed successfully, analyze the problem, revisit your assumption, collect additional info you need, and think of a different approach to try. ''', ) scientist = autogen.AssistantAgent( name="Scientist", llm_config=agent_config, system_message="""Scientist. You follow an approved plan. You are able to categorize papers after seeing their abstracts printed. You don't write code.""" ) planner = autogen.AssistantAgent( name="Planner", system_message='''Planner. Suggest a plan. Revise the plan based on feedback from admin and critic, until admin approval. The plan may involve an engineer who can write code and a scientist who doesn't write code. Explain the plan first. Be clear which step is performed by an engineer, and which step is performed by a scientist. ''', llm_config=agent_config, ) critic = autogen.AssistantAgent( name="Critic", system_message="Critic. Double check plan, claims, code from other agents and provide feedback. Check whether the plan includes adding verifiable info such as source URL.", llm_config=agent_config, ) # start the "group chat" between agents and humans groupchat = autogen.GroupChat(agents=[user_proxy, engineer, scientist, planner, executor, critic], messages=[], max_round=50) manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=agent_config) # Start the Chat! user_proxy.initiate_chat( manager, message=""" find papers on LLM applications from arxiv in the last week, create a markdown table of different domains. """, ) # to followup of the previous question, use: # user_proxy.send( # recipient=assistant, # message="""your followup response here""", # )
Ahí lo tienes, tienes tu nuevo ejército de agentes.
Recomiendo encarecidamente profundizar en la documentación de Autogen para comprender qué más puede hacer este tipo de automatización de agencia.
Además, después de comprender cómo funciona el autogen bajo el capó, es posible que desee usarlo a través de una interfaz como
Ahora depende de ti. Orqueste agentes libres de las limitaciones de OpenAi para construir un futuro mejor para los humanos. Recuerde siempre que un gran poder conlleva una gran responsabilidad. Entonces, ¿qué vas a construir a continuación?
Esta publicación fue escrita completamente por un humano™
También publicado aquí .