«Никогда не отправляйте человека выполнять работу машины»
— Агент Смит
LLM в чате — это круто, но действовать в качестве интеллектуального агента — это следующий уровень. А как насчет многих из них? Встречайте последний проект Microsoft Autogen .
Но есть проблема. Autogen был создан для подключения к OpenAi по умолчанию, что является ограниченным, дорогим и подвергается цензуре/неразумным. Вот почему лучше всего использовать локальный простой LLM, такой как Mistral-7B
. Вы также можете использовать любую другую модель по вашему выбору, например Llama2
, Falcon
, Vicuna
, Alpaca
, небо (ваше оборудование) действительно является пределом.
Секрет заключается в том, чтобы использовать стиль вывода openai JSON на вашем локальном сервере LLM, например, text-generation-webui от Oobabooga, а затем подключить его к autogen. Это то, что мы строим сегодня.
Обратите внимание, что существуют и другие методы создания плевкового текста llms в формате openai apis, а также привязки python llama.cpp.
В этом уроке мы будем: 0. Получение веб-интерфейса для генерации текста Oobabooga, LLM (Mistral-7b) и Autogen.
Настройка расширения формата OpenAi на Oobabooga
Запуск локального LLM-сервера в формате OpenAi
Подключаем его к Autogen
Давайте начнем!
Прежде чем продолжить, рекомендуется использовать виртуальную среду при установке пакетов pip. Создайте новый и активируйте его, если хотите.
Получение Webui для генерации текста Obbabooga: это хорошо известная программа для размещения LLM на вашем локальном компьютере. Перейдите на страницу text-generation-webui и следуйте инструкциям по установке. Начать очень просто. Вы также можете загрузить CUDA , если используете графический процессор NVIDIA для ускорения.
Получение LLM (Mistral-7b-Instruct): после загрузки веб-интерфейса для генерации текста, пока не запускайте его. Нам нужно получить степень магистра права, чтобы дать жизнь нашим агентам.
Сегодня мы будем изучать Mistral-7B , а именно Mistral-7B-instruct-v0.1.Q4_K_S.gguf , оптимизированную версию модели от TheBloke. Вы можете выбрать оптимизированную модель, идеально подходящую для вашей машины, основываясь на пояснениях в описании .
Вы можете выбрать модели меньшего или большего размера в зависимости от вашего оборудования. Не бойтесь пробовать что-то на своем компьютере, мы здесь занимаемся наукой.
Перейдите на страницу «Файлы и версии» и возьмите следующее:
config.json
Mistral-7B-instruct-v0.1.Q4_K_S.gguf (хорошо работает в большинстве средних настроек)
После загрузки перейдите в папку установки text-generation-webui и внутри нее откройте папку models . Там создайте новую папку с названием вашей модели (или любым другим именем по вашему желанию), например «mistral-7b-instruct» . Путь будет таким:
C:/.../text-generation-webui/models/mistral-7b-instruct
Поместите файл config.json и model.gguf в новую папку.
Получение Автогена :
Чтобы установить многоагентную библиотеку Python для создания Microsoft, просто установите ее с помощью установщика пакетов pip в своем терминале.
pip install pyautogen
Установив новый веб-интерфейс для генерации текста и загрузив LLM, мы можем продолжить работу над тем, чтобы ваш локальный сервер Oobabooga говорил в формате OpenAi JSON. Вы можете узнать больше о форматах API OpenAi и их функциях в их
Чтобы подключить Autogen к нашему локальному серверу, нам нужно будет активировать расширение «openai» в папке расширений text-generation-webui Ooobaboga.
В терминале перейдите в папку «text-generation-webui/extensions/openai» и установите туда необходимые требования:
pip install -r requirements.txt
Теперь вернитесь в корневую папку /text-generation-webui вашего терминала. Пришло время привести этого ребенка в порядок.
Как следует из названия, он предназначался для использования в качестве веб-интерфейса, но вы также можете просто оставить его работающим в качестве сервера для запроса API из других программ, которые вы создаете.
Чтобы загрузить его как локальный сервер и с расширением openai api, используйте следующую команду в соответствии с вашей текущей ОС.
Не забудьте изменить параметр «model» на имя папки, которую мы создали ранее в /models. (В моем случае я назвал папку **"**mistral-7b-instruct")
Окна:
./start_windows.bat --extensions openai --listen --loader llama.cpp --model mistral-7b-instruct
Линукс:
./start_linux.sh --extensions openai --listen --loader llama.cpp --model mistral-7b-instruct
МакОС:
./start_macos.sh --extensions openai --listen --loader llama.cpp --model mistral-7b-instruct
Мы передаем параметр Extensions openai для загрузки расширения, прослушиваем запуск сервера, который мы можем запросить у autogen, загрузчика и модели , в которых указывается загрузчик для модели и имя папки модели, которую мы создали ранее, с файлом config.json и моделью. файлы gguf.
Если все пойдет правильно, вы можете увидеть что-то вроде этого:
Webui при обычном запуске работает на порту 7860 вашего локального хоста, но обратите внимание, что наш API-интерфейс, совместимый с OpenAI, также готов к использованию Autogen на нашем локальном хосте по адресу
На данный момент у вас уже установлена библиотека autogen, поэтому пришло время импортировать ее и подключить наш LLM-сервер.
Давайте начнем с чего-то простого: с одного агента, взаимодействующего с человеком (вами). Создайте новый каталог в любом месте и добавьте туда новый файл autogen.py . Вы также можете переименовать файл по своему усмотрению.
Обычно, чтобы просто подключиться к API OpenAi GPT, вы должны запустить файл следующим образом:
import autogen #start importing the autogen lib config_list = [ { 'model': 'gpt-3.5-turbo', 'api_key': 'your openai real key here' } ]
Но чтобы использовать наш работающий локальный сервер, мы инициируем его следующим образом:
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 } ]
Поскольку для локальной работы вам не нужен настоящий ключ, мы просто используем заполнитель sk-1111….
Далее мы можем настроить агента и пользователя-человека. Прочтите комментарии для лучшего понимания.
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.""", )
Не забудьте изменить message="…" в ваших первоначальных заказах.
Если вы просто запустите сценарий с сообщением, вы можете увидеть новый каталог под названием «agents-workspace» с файлом .csv, созданным агентом «вручную».
Теперь давайте перейдем к чему-то более продвинутому.
Несколько агентов с ролями и контекстами.
Это будет работать как «чат-группа», как и любое известное вам приложение для обмена сообщениями. Их контексты (системные сообщения) подскажут им, как вести себя и какой иерархии они должны подчиняться. На этот раз у нас будет:
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""", # )
Вот и все, у вас есть новая армия агентов.
Я настоятельно рекомендую углубиться в документацию Autogen, чтобы понять, на что еще способен этот вид автоматизации агентств.
Кроме того, после понимания того, как работает autogen, вы можете использовать его через интерфейс, например
Теперь дело за вами. Управляйте агентами, свободными от ограничений OpenAi, чтобы построить лучшее будущее для нас, людей. Всегда помните, что с большой силой приходит и большая ответственность. Итак, что вы строите дальше?
Этот пост был полностью написан человеком™
Также опубликовано здесь .