"N'envoyez jamais un humain faire le travail d'une machine"
-Agent Smith
Les LLM de chat sont sympas, mais agir en tant qu'agent intelligent est un niveau supérieur. Qu’en est-il de beaucoup d’entre eux ? Découvrez le dernier projet Autogen de Microsoft.
Mais il y a un problème. Autogen a été conçu pour être connecté à OpenAi par défaut, ce qui est limitant, coûteux et censuré/non sensible. C'est pourquoi l'utilisation locale d'un simple LLM comme Mistral-7B
est la meilleure solution. Vous pouvez également l'utiliser avec n'importe quel autre modèle de votre choix tel que Llama2
, Falcon
, Vicuna
, Alpaca
, le ciel (votre matériel) est vraiment la limite.
Le secret est d'utiliser le style de sortie openai JSON sur votre serveur LLM local, tel que le webui de génération de texte d'Oobabooga, puis de le connecter à autogen. C'est ce que nous construisons aujourd'hui.
Notez qu'il existe d'autres méthodes pour faire cracher du texte llms au format openai apis, ainsi que les liaisons python llama.cpp.
Dans ce tutoriel, nous serons : 0. Obtenir le webui de génération de texte d'Oobabooga, un LLM (Mistral-7b) et Autogen
Configuration de l'extension du format OpenAi sur Oobabooga
Démarrage du serveur LLM local au format OpenAi
Le connecter à Autogen
Commençons!
Avant de continuer, il est recommandé d'utiliser un environnement virtuel lors de l'installation des packages pip. Créez-en un nouveau et activez-le si vous en avez envie.
Obtenir le Webui de génération de texte d'Obbabooga : il s'agit d'un programme bien connu pour héberger des LLM sur votre machine locale. Rendez-vous sur la page de text-generation-webui et suivez le guide d'installation. Il est très simple de commencer. Vous souhaiterez peut-être également télécharger CUDA si vous utilisez un GPU NVIDIA pour l'accélération.
Obtenir un LLM (Mistral-7b-Instruct) : Après avoir téléchargé le webui de génération de texte, ne le démarrez pas tout de suite. Nous avons besoin d'un LLM pour donner vie à nos agents.
Aujourd'hui, nous allons explorer Mistral-7B , plus précisément Mistral-7B-instruct-v0.1.Q4_K_S.gguf , une version optimisée du modèle de TheBloke. Vous pouvez choisir le modèle optimisé parfait pour votre machine en fonction des explications contenues dans la description .
Vous pouvez choisir des modèles plus petits ou plus grands en fonction de votre matériel. N'ayez pas trop peur d'essayer des choses sur votre ordinateur, nous faisons de la science ici.
Accédez à la page Fichiers et versions et récupérez les éléments suivants :
config.json
Mistral-7B-instruct-v0.1.Q4_K_S.gguf (fonctionnera bien dans la plupart des configurations intermédiaires)
Une fois téléchargé, dirigez-vous vers le dossier d’installation text-generation-webui et ouvrez à l’intérieur le dossier models . Là, créez un nouveau dossier avec le nom de votre modèle (ou n'importe quel nom de votre choix), comme "mistral-7b-instruct" . Le chemin sera comme ceci :
C:/.../text-generation-webui/models/mistral-7b-instruct
Placez le fichier config.json et le model.gguf dans le nouveau dossier.
Obtenir Autogen :
Pour installer la bibliothèque Python de création multi-agents de Microsoft, installez-la simplement à l'aide du programme d'installation du package pip dans votre terminal.
pip install pyautogen
Une fois votre tout nouveau webui de génération de texte installé et le LLM téléchargé, nous pouvons procéder à faire parler votre serveur Oobabooga local au format OpenAi JSON. Vous pouvez en savoir plus sur les formats et les fonctionnalités des API OpenAi dans leur
Pour connecter Autogen à notre serveur local, nous devrons activer l'extension « openai » dans le dossier d'extensions text-generation-webui d'Ooobaboga.
Dans votre terminal, dirigez-vous vers le dossier « text-generation-webui/extensions/openai » et installez-y ses exigences :
pip install -r requirements.txt
Revenez maintenant au dossier racine /text-generation-webui de votre terminal. Il est temps de remettre ce bébé en marche.
Comme son nom l'indique, il est destiné à être utilisé comme webui, mais vous pouvez également le faire fonctionner en tant que serveur pour interroger les API d'autres programmes que vous créez.
Pour le démarrer en tant que serveur local et avec l'extension openai api, utilisez la commande suivante en fonction de votre système d'exploitation actuel.
N'oubliez pas de remplacer le paramètre « model » par le nom du dossier que nous avons créé précédemment dans /models. (Dans mon cas, j'ai nommé le dossier **"**mistral-7b-instruct")
Les fenêtres:
./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
Nous passons le paramètre extensions openai pour charger l'extension, écoutons pour démarrer un serveur que nous pouvons interroger à partir d'autogen, du chargeur et du modèle qui spécifient le chargeur pour le modèle et le nom du dossier modèle que nous avons créé précédemment, avec le config.json et le modèle. fichiers gguf.
Si tout se passe bien, vous pourriez voir quelque chose comme ceci :
Le webui s'exécute sur le port 7860 de votre hôte local comme d'habitude, mais notez que notre API compatible OpenAI est également prête à être utilisée par Autogen sur notre hôte local à l'adresse
À ce stade, vous avez déjà installé la bibliothèque autogen, il est donc temps de l'importer et de connecter notre serveur LLM.
Commençons par quelque chose de simple, un seul agent interagissant avec un humain (vous). Créez un nouveau répertoire où vous le souhaitez et ajoutez-y un nouveau fichier autogen.py . Vous pouvez également renommer le fichier comme vous le souhaitez.
Généralement, pour simplement vous connecter à l'API d'OpenAi GPT, vous démarrez le fichier comme ceci :
import autogen #start importing the autogen lib config_list = [ { 'model': 'gpt-3.5-turbo', 'api_key': 'your openai real key here' } ]
Mais pour utiliser notre serveur local en cours d'exécution, nous l'initions comme ceci :
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 } ]
Comme vous n'avez pas besoin d'une vraie clé pour travailler localement, nous utilisons simplement l'espace réservé sk-1111….
Ensuite, nous pouvons configurer l'agent et l'utilisateur humain. Lisez les commentaires pour une meilleure compréhension.
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.""", )
Pensez à changer message="…" avec vos commandes initiales.
Si vous exécutez simplement le script avec le message, vous verrez peut-être un nouveau répertoire appelé « agents-workspace » contenant un fichier .csv, créé « manuellement » par l'agent.
Passons maintenant à quelque chose d'un peu plus avancé.
Plusieurs agents avec des rôles et des contextes.
Cela fonctionnera comme un « groupe de discussion » comme n’importe quelle application de messagerie que vous connaissez. Leurs contextes (message système) leur diront comment se comporter et à quelle hiérarchie ils doivent obéir. Cette fois nous aurons :
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""", # )
Et voilà, vous avez votre nouvelle armée d'agents.
Je recommande fortement d'approfondir la documentation d'Autogen pour comprendre ce que ce type d'automatisation d'agence est capable de faire d'autre.
De plus, après avoir compris comment fonctionne autogen sous le capot, vous souhaiterez peut-être l'utiliser via une interface telle que
Maintenant, ça ne depent que de toi. Orchestrez des agents libérés des limitations d’OpenAi, pour construire un avenir meilleur pour nous, les humains. N’oubliez jamais qu’un grand pouvoir implique de grandes responsabilités. Alors, que construisez-vous ensuite ?
Cet article a été entièrement écrit par un humain™
Également publié ici .