paint-brush
Beep Beep Bop Bop: So stellen Sie mehrere KI-Agenten mithilfe lokaler LLMs bereitby@babycommando
10,511
10,511

Beep Beep Bop Bop: So stellen Sie mehrere KI-Agenten mithilfe lokaler LLMs bereit

Baby Commando10m2023/10/19
Read on Terminal Reader

Bereitstellung mehrerer lokaler KI-Agenten mithilfe lokaler LLMs wie Llama2 und Mistral-7b.
featured image - Beep Beep Bop Bop: So stellen Sie mehrere KI-Agenten mithilfe lokaler LLMs bereit
Baby Commando HackerNoon profile picture
0-item
1-item

Bereitstellung mehrerer lokaler KI-Agenten mithilfe lokaler LLMs wie Llama2 und Mistral-7b.


„Schicken Sie niemals einen Menschen los, um die Arbeit einer Maschine zu erledigen“

– Agent Smith


Suchen Sie nach einer Möglichkeit, mit Autogen eine ganze Armee organisierter KI-Agenten aufzubauen, indem Sie lokale LLMs anstelle des kostenpflichtigen OpenAi verwenden? Dann sind Sie bei uns genau richtig!


Chat-LLMs sind cool, aber als intelligenter Agent aktiv zu werden, ist die nächste Stufe. Was ist mit vielen von ihnen? Lernen Sie das neueste Autogen- Projekt von Microsoft kennen.


Aber es gibt ein Problem. Autogen wurde für die standardmäßige Anbindung an OpenAi entwickelt, was einschränkend, teuer und zensiert bzw. nicht empfindungsfähig ist. Aus diesem Grund ist die Verwendung eines einfachen LLM vor Ort wie Mistral-7B die beste Lösung. Sie können es auch mit jedem anderen Modell Ihrer Wahl verwenden, z. B. Llama2 , Falcon , Vicuna , Alpaca , der Himmel (Ihre Hardware) ist wirklich die Grenze.


Das Geheimnis besteht darin, den OpenAI-JSON-Ausgabestil auf Ihrem lokalen LLM-Server zu verwenden, z. B. Oobaboogas text-generation-webui, und ihn dann mit Autogen zu verknüpfen. Das ist es, was wir heute aufbauen.


Beachten Sie, dass es andere Methoden gibt, um LLMs dazu zu bringen, Text im OpenAI-APIS-Format auszuspucken, beispielsweise die Python-Bindungen llama.cpp.


In diesem Tutorial werden wir: 0. Oobaboogas Textgenerierungs-Webui, ein LLM (Mistral-7b) und Autogen besorgen

  1. Einrichten der OpenAi-Formaterweiterung auf Oobabooga

  2. Starten des lokalen LLM-Servers mit dem OpenAi-Format

  3. Anschließen an Autogen


Lass uns anfangen!


[Agent Smith] „Ich, ich, ich …“


0. Holen Sie sich Oobaboogas Text-Generation-Webui, ein LLM (Mistral-7b) und Autogen


Bevor Sie fortfahren, wird empfohlen, bei der Installation von Pip-Paketen eine virtuelle Umgebung zu verwenden. Erstellen Sie ein neues und aktivieren Sie es, wenn Sie möchten.


Obbaboogas Text Generation Webui erhalten: Dies ist ein bekanntes Programm zum Hosten von LLMs auf Ihrem lokalen Computer. Gehen Sie zur Seite von text-generation-webui und folgen Sie der Installationsanleitung. Der Einstieg ist sehr einfach. Möglicherweise möchten Sie CUDA auch herunterladen, wenn Sie zur Beschleunigung eine NVIDIA-GPU verwenden.


Ein LLM (Mistral-7b-Instruct) erhalten: Nach dem Herunterladen der Webui zur Textgenerierung starten Sie sie noch nicht. Wir brauchen einen LLM, um unseren Agenten Leben einzuhauchen.


Heute werden wir Mistral-7B erkunden, insbesondere Mistral-7B-instruct-v0.1.Q4_K_S.gguf , eine optimierte Version des Modells von TheBloke. Anhand der Erläuterungen in der Beschreibung können Sie das optimierte Modell auswählen, das perfekt zu Ihrer Maschine passt.


Abhängig von Ihrer Hardware können Sie zwischen kleineren und größeren Modellen wählen. Scheuen Sie sich nicht, Dinge an Ihrem Computer auszuprobieren, denn wir machen hier Wissenschaft.


Gehen Sie zur Seite „Dateien und Versionen“ und holen Sie sich Folgendes:

  • config.json

  • Mistral-7B-instruct-v0.1.Q4_K_S.gguf (läuft in den meisten mittleren Setups gut)


Seite „Dateien und Versionen“.


Gehen Sie nach dem Herunterladen zum Installationsordner text-generation-webui und öffnen Sie darin den Ordner models . Erstellen Sie dort einen neuen Ordner mit dem Namen Ihres Modells (oder einem beliebigen Namen), z. B. „mistral-7b-instruct“ . Der Pfad wird so aussehen:


 C:/.../text-generation-webui/models/mistral-7b-instruct


Platzieren Sie sowohl die Datei config.json als auch die Datei model.gguf im neuen Ordner.


Autogen erhalten :
Um die Python-Bibliothek zur Multiagentenerstellung von Microsoft zu installieren, installieren Sie sie einfach mit dem Pip-Paketinstallationsprogramm in Ihrem Terminal.


 pip install pyautogen


1. Einrichten der OpenAi-Formaterweiterung auf Oobabooga


[Agent Smith] „Sie beanspruchen alle Muskeln außer der, die wichtig ist.“


Wenn Ihr brandneues Textgenerierungs-Webui installiert und das LLM heruntergeladen ist, können wir damit fortfahren, Ihren lokalen Oobabooga-Server im OpenAi-JSON-Format sprechen zu lassen. Sie können mehr über die OpenAi-API-Formate und deren Funktionen erfahren Dokumentation .


Um Autogen mit unserem lokalen Server zu verbinden, müssen wir die Erweiterung „openai“ im Erweiterungsordner „text-generation-webui“ von Ooobaboga aktivieren.


Gehen Sie in Ihrem Terminal zum Ordner „text-generation-webui/extensions/openai“ und installieren Sie dort die Anforderungen:


 pip install -r requirements.txt


2. Starten des lokalen LLM-Servers im OpenAi-Format

Gehen Sie nun zurück zum Stammordner /text-generation-webui in Ihrem Terminal. Es ist Zeit, dieses Baby zum Laufen zu bringen.


Wie der Name schon sagt, sollte es als WebUI verwendet werden, Sie können es aber auch einfach als Server laufen lassen, um APIs von anderen von Ihnen erstellten Programmen abzufragen.


Um es als lokalen Server und mit der OpenAI-API-Erweiterung zu starten, verwenden Sie den folgenden Befehl entsprechend Ihrem aktuellen Betriebssystem.


Vergessen Sie nicht, den Parameter „model“ in den Ordnernamen zu ändern, den wir zuvor unter /models erstellt haben. (In meinem Fall habe ich den Ordner **„**mistral-7b-instruct“ genannt.)


Windows:

 ./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


Wir übergeben den Parameter „extensions openai“ , um die Erweiterung zu laden, hören zu, einen Server zu starten, den wir von Autogen, Loader und Model abfragen können, der den Loader für das Modell und den Namen des Modellordners angibt, den wir zuvor erstellt haben, mit config.json und dem Modell. gguf-Dateien.


Wenn alles richtig läuft, sehen Sie möglicherweise Folgendes:


Erfolg!


Das WebUI läuft wie üblich auf Ihrem lokalen Host-Port 7860, aber beachten Sie, dass unsere OpenAI-kompatible API auch für die Verwendung durch Autogen auf unserem lokalen Host bereit ist http://127.0.0.1:5001/v1 .


3. Anschließen an Autogen

Zu diesem Zeitpunkt ist die Autogen-Bibliothek bereits installiert, es ist also an der Zeit, sie zu importieren und unseren LLM-Server anzuschließen.


Beginnen wir mit etwas Einfachem: einem einzelnen Agenten, der mit einem Menschen (Ihnen) interagiert. Erstellen Sie an einer beliebigen Stelle ein neues Verzeichnis und fügen Sie dort eine neue autogen.py- Datei hinzu. Sie können die Datei auch beliebig umbenennen.


Um einfach eine Verbindung zur OpenAi GPT-API herzustellen, würden Sie die Datei im Allgemeinen wie folgt starten:


 import autogen #start importing the autogen lib config_list = [ { 'model': 'gpt-3.5-turbo', 'api_key': 'your openai real key here' } ]


Aber um unseren laufenden lokalen Server zu verwenden, initiieren wir es wie folgt:


 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 } ]


Da Sie für die lokale Arbeit keinen echten Schlüssel benötigen, verwenden wir lediglich den Platzhalter sk-1111….

Als nächstes können wir den Agenten und den menschlichen Benutzer einrichten. Lesen Sie die Kommentare zum besseren Verständnis.


 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.""", )


Denken Sie daran, message=“…“ bei Ihren ersten Bestellungen zu ändern.


Wenn Sie einfach das Skript mit der Nachricht ausführen, sehen Sie möglicherweise ein neues Verzeichnis namens „agents-workspace“ mit einer CSV-Datei darin, die „manuell“ vom Agenten erstellt wurde.


[Agent Smith] „HAHAHAHA“


Gehen wir nun zu etwas etwas Fortgeschrittenerem über.
Mehrere Agenten mit Rollen und Kontexten.


Dies funktioniert wie eine „Chat-Gruppe“ wie jede Ihnen bekannte Messaging-App. Ihre Kontexte (Systemmeldung) sagen ihnen, wie sie sich verhalten sollen und welcher Hierarchie sie gehorchen sollen. Diesmal haben wir:


  • Zwei Menschen: der Administrator und der Testamentsvollstrecker.
  • Vier Agenten: der Ingenieur, der Wissenschaftler, der Planer und der Kritiker.


 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""", # )


Da haben Sie Ihre neue Agentenarmee.


Wir sind nicht hier, weil wir frei sind. Wir sind hier, weil wir NICHT frei sind.

Ich empfehle dringend, tiefer in die Autogen-Dokumentation einzutauchen, um zu verstehen, was diese Art der Agenturautomatisierung sonst noch leisten kann.


Nachdem Sie verstanden haben, wie Autogen unter der Haube funktioniert, möchten Sie es vielleicht auch über eine Schnittstelle wie verwenden Autogen-UI , oder erstellen Sie vielleicht Ihr eigenes im Dashboard Ihres Unternehmens.


Jetzt liegt es an Ihnen. Orchestrieren Sie Agenten, die von den OpenAi-Einschränkungen befreit sind, um eine bessere Zukunft für uns Menschen aufzubauen. Denken Sie immer daran, dass mit großer Macht auch große Verantwortung einhergeht. Also, was bauen Sie als nächstes?


[Agent Smith] „Warum, Mr. Anderson? Warum? Warum bestehen Sie darauf?“ [Neo] „Weil ich es entschieden habe.“


Dieser Beitrag wurde vollständig von einem Menschen™ geschrieben

Auch hier veröffentlicht.