Langroid
-это интуитивно понятная, легкая, расширяемая и принципиальная рамка Python для легко создания приложений LLM, от исследователей CMU и UW-Madison. Вы настраиваете агенты, оборудоваете их дополнительными компонентами (LLM, векторным магазином и инструментами/функциями), назначаете им задачи и заставляете их совместно решать проблему, обменивая сообщения. Эта многоагентная парадигма вдохновлена актером (но вам не нужно ничего об этом знать!).
Langroid
-это свежий взгляд на разработку приложений LLM, где значительная мысль пошла на упрощение опыта разработчика; Он не использует Langchain
или любую другую структуру LLM.
Прочитайте обзор архитектуры Langroid (WIP)
? Компании используют/адаптируют Langroid в производстве . Вот цитата:
Nullify использует агенты искусственного интеллекта для безопасной разработки программного обеспечения. Он находит, определяет приоритеты и исправляет уязвимости. Мы имеем внутреннюю адаптированную многопользовательскую структуру оркестровки Langroid в производстве после оценки Crewai, Autogen, Langchain, Langflow и т. Д. Агент и абстракции Agent и задачи Langroid интуитивно понятны, хорошо продуманы и обеспечивают отличный опыт разработчика. Мы хотели самый быстрый способ получить что -то в производстве. С другими рамками это заняло бы у нас недели, но с Langroid мы получили хорошие результаты за считанные минуты. Настоятельно рекомендуется!
- Джеки Вонг, глава ИИ в Навитках.
Смотрите это вступление в блог Langroid от команды Lancedb
Только что опубликовано в ML для Healthcare (2024): многоагентная тряпичная система на основе Langroid для фармаконадзора, см. Пост в блоге
Мы приветствуем вклад: посмотрим документ взносов для идей о том, что внести.
Вы строите приложения LLM или хотите помочь с Langroid для вашей компании или хотите расставить приоритеты в функциях Langroid для вашей компании по использованию? Prasad Chalasani доступен для консалтинга (консультации/разработка): Pchalasani в Gmail Dot Com.
Спонсорство также принимается с помощью спонсоров GitHub
Вопросы, обратная связь, идеи? Присоединяйтесь к нам на Discord!
Это просто тизер; Существует гораздо больше, например, для выявления функций/инструментов, многоагентное сотрудничество, извлечение структурированной информации, DocChatagent (RAG), SQLCHATAGENT, непенайский локальный/удаленные LLMS и т. Д. Прокрутите вниз или см. Документы для получения дополнительной информации. См. Colab Langroid Quick-Start, которая создает пример 2-агента, используя API Openai Chatcomplotion. Смотрите также эту версию, которая вместо этого использует API OpenAI Assistants.
Только что выпустил! Пример скрипта, показывающий, как вы можете использовать мультиагенты Langroid и инструменты для извлечения структурированной информации из документа, используя только локальный LLM (Mistral-7B-Instruct-V0.2).
import langroid as lr
import langroid . language_models as lm
# set up LLM
llm_cfg = lm . OpenAIGPTConfig ( # or OpenAIAssistant to use Assistant API
# any model served via an OpenAI-compatible API
chat_model = lm . OpenAIChatModel . GPT4o , # or, e.g., "ollama/mistral"
)
# use LLM directly
mdl = lm . OpenAIGPT ( llm_cfg )
response = mdl . chat ( "What is the capital of Ontario?" , max_tokens = 10 )
# use LLM in an Agent
agent_cfg = lr . ChatAgentConfig ( llm = llm_cfg )
agent = lr . ChatAgent ( agent_cfg )
agent . llm_response ( "What is the capital of China?" )
response = agent . llm_response ( "And India?" ) # maintains conversation state
# wrap Agent in a Task to run interactive loop with user (or other agents)
task = lr . Task ( agent , name = "Bot" , system_message = "You are a helpful assistant" )
task . run ( "Hello" ) # kick off with user saying "Hello"
# 2-Agent chat loop: Teacher Agent asks questions to Student Agent
teacher_agent = lr . ChatAgent ( agent_cfg )
teacher_task = lr . Task (
teacher_agent , name = "Teacher" ,
system_message = """
Ask your student concise numbers questions, and give feedback.
Start with a question.
"""
)
student_agent = lr . ChatAgent ( agent_cfg )
student_task = lr . Task (
student_agent , name = "Student" ,
system_message = "Concisely answer the teacher's questions." ,
single_round = True ,
)
teacher_task . add_sub_task ( student_task )
teacher_task . run ()
Ноябрь 2024:
Agent
S со строгим форматом вывода схемы JSON на совместимых LLMS и строгом режиме для API Openai Tools.Qwen2.5-Coder-32b-Instruct
), размещенная на GLHF.CHATОктябрь 2024:
Сентябрь 2024:
o1-mini
и o1-preview
.DocChatAgent
использует слияние взаимного ранга (RRF) для ранжирования кусков, полученных различными методами.run_batch_task
Новая опция - stop_on_first_result
- позволяет завершить партию, как только любая задача вернет результат.Август 2024:
Task.run(), Task.run_async
.Июль 2024:
Июнь 2024 года:
RewindTool
, который позволяет агенту «перемотать и переделать» прошлое сообщение (и все зависимые сообщения очищаются благодаря отслеживанию линии). Прочитайте заметки здесь.Май 2024:
doc-chat
, db
(для зависимостей, связанных с базой данных). См. Обновленные инструкции по установке ниже и в документах.examples
Classmethod, и случайный пример из этого списка будет использоваться для генерации 1-выстрела для LLM. Это было улучшено, поэтому вы теперь можете предоставить список примеров, где каждый пример является либо экземпляром инструмента, либо кортежом (описание, экземпляр инструмента), где описание - «мысль», которая приводит к использованию LLM для использования инструмента (см. Пример в документах). В некоторых сценариях это может повысить точность генерации инструментов LLM. Кроме того, теперь вместо случайного примера все примеры используются для создания нескольких примеров.TaskConfig
. Обнаружает только точные циклы, а не приблизительные петли, в которых сущности говорят по существу схожими (но не совсем одинаковыми) вещами неоднократно.RecipientTool
, с компромиссом, который, поскольку он не является инструментом, нет никакого способа обеспечить соблюдение/напоминание LLM, чтобы явно указать адресата (в сценариях, где это важно).DocChatAgent
.gpt-4o
теперь по умолчанию LLM повсюду; Обновить тесты и примеры для работы с этим LLM; Используйте токенизатор, соответствующий LLM.gemini 1.5 pro
через litellm
QdrantDB:
обновление для поддержки обученных разреженных внедрений.Апрель 2024:
chat_model="groq/llama3-8b-8192"
. Смотрите учебник.Task.run(), Task.run_async(), run_batch_tasks
имеет параметры max_cost
и max_tokens
для выхода, когда токены или стоимость превышают предел. Результат ChatDocument.metadata
теперь включает в себя поле status
, которое является кодом, указывающим код причины выполнения задачи. Также task.run()
и т. Д. Может быть вызвана с помощью явного поля session_id
, которое используется в качестве ключа для поиска различных настройки в кэше Redis. В настоящее время используется только для поиска «статуса убийства» - это позволяет убить выполняющую задачу, либо по task.kill()
, либо с помощью classmethod Task.kill_session(session_id)
. Например, использование см. test_task_kill
в тестах/MAIN/TEST_TASK.PYМарт 2024:
DocChatAgent
, см. test_doc_chat_agent.py
, в частности, test_doc_chat_batch()
; Утилита новой задачи: run_batch_task_gen
, где можно указать генератор задач, чтобы генерировать одну задачу на вход.DocChatAgent
теперь будет работать с Image-PDF).DocChatAgent
Context-Window исправляетURLLoader
: обнаружить время файла из заголовка, когда URL не заканчивается узнаваемым суффиксом, таким как .pdf
, .docx
и т. Д.sentence_transformer
.unstructured
, haystack
, chromadb
, mkdocs
, huggingface-hub
, sentence-transformers
.import langroid as lr
Февраль 2024 года:
chat_model="ollama/mistral"
. См. Примечания к выпуску.Январь 2024:
SQLChatAgent
). См. Пример сценария, используя этот агент, чтобы ответить на вопросы о зависимостях Python PKG..doc
(в дополнение к .docx
)formatter
в OpenAIGPTConfig
чтобы обеспечить точное форматирование чата для локальных LLMS.DocChatAgentConfig
имеет новый Param: add_fields_to_content
, чтобы указать дополнительные поля документа для вставки в основное поле content
, чтобы помочь улучшить поиск.Декабрь 2023:
DocChatAgent
: ПИТАТЬ ПАНДАСА ДАННЫЕ ФРРИМЫ И фильтрации.LanceDocChatAgent
использует LanceDB
Vector-DB для эффективного поиска вектора и полнотекстового поиска и фильтрации.LanceRAGTaskCreator
для создания системы с 2 агентами, состоящей из LanceFilterAgent
, которая решает фильтр и рефразирующий запрос для отправки в Rag Agent.Task
с помощью по умолчанию ChatAgent
.Ноябрь 2023 г.:
0.1.126: Открытый агент: поддержка кэширования.
0.1.117: поддержка инструментов API Assi Ape Openai: Code-Colder-Intepreter и Retriever (RAG), загрузка файлов. Они беспрепятственно работают с операцией по задании Langroid. Пока документы не будут готовы, лучше всего увидеть эти примеры использования:
Тесты:
Пример сценарии:
0.1.112: OpenAIAssistant
- это подкласс ChatAgent
, который использует новый помощник API Openai. Он может быть использован в качестве замены замены для ChatAgent
, и полагается на помощника API для поддержания состояния разговора, и использует постоянные потоки и помощники, чтобы воссоединиться с ними, если это необходимо. Примеры: test_openai_assistant.py
, test_openai_assistant_async.py
0.1.111: Поддержка последней модели Openai: GPT4_TURBO
(см. Test_llm.py, например, использование)
0.1.110: обновление с OpenAI V0.x до V1.1.1 (в подготовке к ASI ASPI и многое другое); ( litellm
временно отключен из -за конфликта версии Openai).
Октябрь 2023:
DocChatAgent
Re-rankers: rank_with_diversity
, rank_to_periphery
(потерян в середине).DocChatAgentConfig.n_neighbor_chunks > 0
позволяет возвращать куски контекста вокруг совпадения.DocChatAgent
использует RelevanceExtractorAgent
LangChain
чтобы иметь экстракт LLM соответствующие части чанка с использованием номера с предложением, что приводит к огромному снижению скорости и снижению затрат по сравнению с наивным «подходом к лечению» (написание LLMChainExtractor
предложений.import langroid as lr
. Смотрите документацию для использования.Сентябрь 2023:
docx
(предварительно).SQLChatAgent
, который эффективно извлекает соответствующую информацию схемы при переводе естественного языка в SQL.Август 2023:
GoogleSearchTool
, чтобы позволить агентам (их LLM) выполнять поиск в Google с помощью функций, выводящих функции/инструментов. Посмотрите этот пример чата для того, как легко добавить этот инструмент к агенту.SQLChatAgent
- благодаря нашему последнему участнику Ритвику Бабу!Июль 2023 г.:
TableChatAgent
для чата с табличными наборами данных (DataFrames, Files, URL): LLM генерирует код Pandas, а код выполняется с использованием механизма инструмента/функции Langroid.DocChatAgent
теперь принимает PDF -файлы или URL -адреса.Предположим, вы хотите извлечь структурированную информацию о ключевых условиях коммерческого арендного документа. Вы можете легко сделать это с помощью Langroid, используя систему с двумя агентами, как мы показываем в репо-репо Langroid-Examples. (См. Этот скрипт для версии с той же функциональностью, используя локальную модель Mistral-7B.) Демо демонстрирует лишь некоторые из многих функций Langroid, таких как:
LeaseExtractor
отвечает за задачу, а его LLM (GPT4) генерирует вопросы, на которые нанесет DocAgent
.DocAgent
LLM (GPT4) использует поиск из векторного магазина, чтобы ответить на вопросы LeaseExtractor
, ссылается на конкретный выдержка, подтверждающий ответ.LeaseExtractor
LLM представляет информацию в структурированном формате с использованием функционального вызова.Вот как это выглядит в действии (здесь есть паусновое видео MP4).
(Для более актуального списка см. В разделе «Обновления/релизы» выше)
Task.run()
имеет такую же типовую подпись, что и методы респондента агента, и это является ключом к тому, как задача агента может делегировать другие подзадачи: с точки зрения задачи, подзадусы являются просто дополнительными респондентами, которые будут использоваться в моде с раундом-робином после собственных респондентов агента.Agent
и Task
позволяют пользователям разрабатывать агенты с конкретными навыками, обернуть их задачами и гибко объединять задачи.ToolMessage
, который работает с любым LLM, а не только OpenAI. Функциональные вызовы и инструменты имеют тот же интерфейс с разработчиком, реализованный с использованием Pydantic, что позволяет очень легко определить инструменты/функции и позволяет агентам использовать их. Преимущества использования Pydantic заключаются в том, что вам никогда не придется писать сложные спецификации JSON для вызова функций, и когда LLM галлюцинаты утроивают JSON, сообщение об ошибке Pydantic отправляется обратно в LLM, чтобы он мог его исправить.langroid
Langroid требует Python 3.11+. Мы рекомендуем использовать виртуальную среду. Используйте pip
, чтобы установить тонкую версию langroid
(от PYPI) в вашу виртуальную среду:
pip install langroid
Основной пакет Langroid позволяет использовать модели Openai Entricdings через их API. Если вы вместо этого хотите использовать sentence-transformers
встраивающие модели от HuggingFace, установите Langroid, как это:
pip install " langroid[hf-embeddings] "
Для многих практических сценариев вам может понадобиться дополнительная дополнительная зависимости:
doc-chat
Extra: pip install " langroid[doc-chat] "
db
Extra: pip install " langroid[db] "
` `
pip install " langroid[doc-chat,db] "
all
дополнительные (но обратите внимание, что это приведет к более длительному времени загрузки/запуска и большему размеру установки): pip install " langroid[all] "
Если вы используете SQLChatAgent
(например examples/data-qa/sql-chat/sql_chat.py
), с Postgres DB, вам нужно будет:
sudo apt-get install libpq-dev
на Ubuntu,brew install postgresql
на Mac и т. Д.pip install langroid[postgres]
или poetry add langroid[postgres]
или poetry install -E postgres
. Если это дает вам ошибку, попробуйте pip install psycopg2-binary
в вашем виртуальном виде. Если вы получите странные ошибки, связанные с mysqlclient
, попробуйте сделать pip uninstall mysqlclient
, а затем pip install mysqlclient
.
Чтобы начать, все, что вам нужно, это ключ API Openai. Если у вас его нет, посмотрите на эту страницу Openai. (Обратите внимание, что, хотя это самый простой способ начать, Лангроид работает практически с любым LLM, а не только с Openai. См. Руководства по использованию открытых/местных LLMS и других непенайских проприетарных LLMS.)
В корне репо, скопируйте файл .env-template
в новый файл .env
:
cp .env-template .env
Затем вставьте свой ключ API OpenAI. Ваш файл .env
должен выглядеть так (организация необязательна, но может потребоваться в некоторых сценариях).
OPENAI_API_KEY=your-key-here-without-quotes
OPENAI_ORGANIZATION=optionally-your-organization-id
В качестве альтернативы, вы можете установить это как переменную среды в своей оболочке (вам нужно делать это каждый раз, когда вы открываете новую оболочку):
export OPENAI_API_KEY=your-key-here-without-quotes
Все настройки переменной среды являются необязательными, а некоторые - только для использования конкретных функций (как отмечено ниже).
MOMENTO_AUTH_TOKEN
в .env
.CACHE_TYPE=momento
CACHE_TYPE=redis
.env
GoogleSearchTool
. Чтобы использовать Google Search в качестве инструмента LLM/плагин/плагин/функциональный звонок, вам необходимо настроить ключ Google API, затем настроить пользовательскую поисковую систему Google (CSE) и получить идентификатор CSE. (Документация для них может быть сложной задачей, мы предлагаем спросить GPT4 для пошагового руководства.) После получения этих учетных данных сохраните их как значения GOOGLE_API_KEY
и GOOGLE_CSE_ID
в вашем файле .env
. Вскоре приближается полная документация по использованию этого (и других подобных «бессмысленных» инструментов), но тем временем загляните в этот пример чата, который показывает, как вы можете легко оснастить агента GoogleSearchtool
. Если вы добавите все эти дополнительные переменные, ваш файл .env
должен выглядеть так:
OPENAI_API_KEY=your-key-here-without-quotes
GITHUB_ACCESS_TOKEN=your-personal-access-token-no-quotes
CACHE_TYPE=redis # or momento
REDIS_PASSWORD=your-redis-password-no-quotes
REDIS_HOST=your-redis-hostname-no-quotes
REDIS_PORT=your-redis-port-no-quotes
MOMENTO_AUTH_TOKEN=your-momento-token-no-quotes # instead of REDIS* variables
QDRANT_API_KEY=your-key
QDRANT_API_URL=https://your.url.here:6333 # note port number must be included
GOOGLE_API_KEY=your-key
GOOGLE_CSE_ID=your-cse-id
При использовании Azure OpenAI в файле .env
требуются дополнительные переменные среды. Эта страница Microsoft Azure Openai предоставляет больше информации, и вы можете установить каждую переменную среды следующим образом:
AZURE_OPENAI_API_KEY
, из значения API_KEY
AZURE_OPENAI_API_BASE
из значения ENDPOINT
, как правило, выглядит как https://your.domain.azure.com
.AZURE_OPENAI_API_VERSION
вы можете использовать значение по умолчанию в .env-template
, а последняя версия можно найти здесьAZURE_OPENAI_DEPLOYMENT_NAME
- это имя развернутой модели, которая определяется пользователем во время настройки моделиAZURE_OPENAI_MODEL_NAME
azure openai позволяет конкретные имена моделей при выборе модели для вашего развертывания. Вам нужно точно указать точное имя модели, которое было выбрано. Например, GPT-4 (должен быть gpt-4-32k
или gpt-4
).AZURE_OPENAI_MODEL_VERSION
требуется, если AZURE_OPENAI_MODEL_NAME = gpt=4
, что поможет Langroid определить стоимость модели Мы предоставляем контейнерную версию репозитория langroid-examples
через это изображение Docker. Все, что вам нужно сделать, это настроить переменные среды в файле .env
. Пожалуйста, следуйте этим шагам для настройки контейнера:
# get the .env file template from `langroid` repo
wget -O .env https://raw.githubusercontent.com/langroid/langroid/main/.env-template
# Edit the .env file with your favorite editor (here nano), and remove any un-used settings. E.g. there are "dummy" values like "your-redis-port" etc -- if you are not using them, you MUST remove them.
nano .env
# launch the container
docker run -it --rm -v ./.env:/langroid/.env langroid/langroid
# Use this command to run any of the scripts in the `examples` directory
python examples/ < Path/To/Example.py >
Это быстрые тизеры, чтобы дать представление о том, что вы можете сделать с Langroid, и как будет выглядеть ваш код.
langroid-examples
.
Различные подсказки LLM и инструкции в Langroid были протестированы, чтобы хорошо работать с GPT-4 (и в некоторой степени GPT-4O). Переключение на другие LLMS (локальный/открытый и запатентованный) прост (см. Руководства, упомянутые выше), и может быть достаточно для некоторых приложений, но в целом вы можете увидеть нижние результаты, если вы не скорректируете подсказки и/или многоагентную настройку.
Также см. Getting Started Guide
для подробного учебника.
Нажмите, чтобы развернуть любой из примеров кода ниже. Все это можно запустить в ноутбуке Colab:
import langroid . language_models as lm
mdl = lm . OpenAIGPT ()
messages = [
lm . LLMMessage ( content = "You are a helpful assistant" , role = lm . Role . SYSTEM ),
lm . LLMMessage ( content = "What is the capital of Ontario?" , role = lm . Role . USER ),
]
response = mdl . chat ( messages , max_tokens = 200 )
print ( response . message )
cfg = lm . OpenAIGPTConfig (
chat_model = "local/localhost:8000" ,
chat_context_length = 4096
)
mdl = lm . OpenAIGPT ( cfg )
# now interact with it as above, or create an Agent + Task as shown below.
Если модель поддерживается liteLLM
, то не нужно запускать прокси -сервер. Просто установите парамет chat_model
выше на litellm/[provider]/[model]
, например, litellm/anthropic/claude-instant-1
и используйте объект конфигурации, как указано выше. Обратите внимание, что для использования litellm
вам необходимо установить Langroid с litellm
дополнительным: poetry install -E litellm
или pip install langroid[litellm]
. Для удаленных моделей вам обычно нужно установить клавиши API и т. Д. В качестве переменных среды. Вы можете установить их на основе документов Litellm. Если какие -либо необходимые переменные среды отсутствуют, Langroid дает полезное сообщение об ошибке, указывающее, какие из них необходимы. Обратите внимание, что для использования langroid
с litellm
вам нужно установить дополнительное litellm
, то есть либо pip install langroid[litellm]
в вашу виртуальную Env, либо, если вы разрабатываете в langroid
Repo, poetry install -E litellm
.
pip install langroid[litellm]
import langroid as lr
agent = lr . ChatAgent ()
# get response from agent's LLM, and put this in an interactive loop...
# answer = agent.llm_response("What is the capital of Ontario?")
# ... OR instead, set up a task (which has a built-in loop) and run it
task = lr . Task ( agent , name = "Bot" )
task . run () # ... a loop seeking response from LLM or User at each turn
Игра в номерах игрушек, где при получении номера n
:
repeater_task
просто возвращает n
,even_task
's LLM возвращает n/2
если n
ровно, иначе говорит «не знаю»odd_task
возвращает 3*n+1
если n
нечетно, иначе говорит «не знаю» Каждая из этих Task
автоматически настраивает ChatAgent
-по умолчанию.
import langroid as lr
from langroid . utils . constants import NO_ANSWER
repeater_task = lr . Task (
name = "Repeater" ,
system_message = """
Your job is to repeat whatever number you receive.
""" ,
llm_delegate = True , # LLM takes charge of task
single_round = False ,
)
even_task = lr . Task (
name = "EvenHandler" ,
system_message = f"""
You will be given a number.
If it is even, divide by 2 and say the result, nothing else.
If it is odd, say { NO_ANSWER }
""" ,
single_round = True , # task done after 1 step() with valid response
)
odd_task = lr . Task (
name = "OddHandler" ,
system_message = f"""
You will be given a number n.
If it is odd, return (n*3+1), say nothing else.
If it is even, say { NO_ANSWER }
""" ,
single_round = True , # task done after 1 step() with valid response
)
Затем добавьте even_task
и odd_task
в качестве подзадачи repeater_task
и запустите repeater_task
repeater_task . add_sub_task ([ even_task , odd_task ])
repeater_task . run ( "3" )
Langroid использует Pydanta для поддержки API, получающих функции OpenAI, а также его собственные нативные инструменты. Преимущество заключается в том, что вам не нужно писать какой -либо JSON, чтобы указать схему, а также если LLM галлюцинирует синтаксис необработанного инструмента, Langroid отправляет ошибку проверки Pydantic (соответствующим образом дезинфицированную) в LLM, так что он может исправить ее!
Простой пример: скажем, у агента есть секретный список чисел, и мы хотим, чтобы LLM нашла наименьшее число в списке. Мы хотим дать LLM инструмент/функцию probe
, который принимает одно число n
в качестве аргумента. Метод обработчика инструментов в агенте возвращает, сколько чисел в его списке не более n
.
Сначала определите инструмент, используя класс ToolMessage
Langroid:
import langroid as lr
class ProbeTool ( lr . agent . ToolMessage ):
request : str = "probe" # specifies which agent method handles this tool
purpose : str = """
To find how many numbers in my list are less than or equal to
the <number> you specify.
""" # description used to instruct the LLM on when/how to use the tool
number : int # required argument to the tool
Затем определите SpyGameAgent
как подкласс ChatAgent
, с помощью метода probe
, который обрабатывает этот инструмент:
class SpyGameAgent ( lr . ChatAgent ):
def __init__ ( self , config : lr . ChatAgentConfig ):
super (). __init__ ( config )
self . numbers = [ 3 , 4 , 8 , 11 , 15 , 25 , 40 , 80 , 90 ]
def probe ( self , msg : ProbeTool ) -> str :
# return how many numbers in self.numbers are less or equal to msg.number
return str ( len ([ n for n in self . numbers if n <= msg . number ]))
Затем мы создаем экземпляр агента и позволяем ему использовать и отвечать на инструмент:
spy_game_agent = SpyGameAgent (
lr . ChatAgentConfig (
name = "Spy" ,
vecdb = None ,
use_tools = False , # don't use Langroid native tool
use_functions_api = True , # use OpenAI function-call API
)
)
spy_game_agent . enable_message ( ProbeTool )
Для полного рабочего примера см. Скрипт чата-агента-tool.py в репозиции langroid-examples
.
Предположим, вы хотите, чтобы агент извлекла ключевые условия аренды, из арендованного документа, в качестве вложенной структуры JSON. Сначала определите желаемую структуру с помощью моделей Pydantic:
from pydantic import BaseModel
class LeasePeriod ( BaseModel ):
start_date : str
end_date : str
class LeaseFinancials ( BaseModel ):
monthly_rent : str
deposit : str
class Lease ( BaseModel ):
period : LeasePeriod
financials : LeaseFinancials
address : str
Затем определите инструмент LeaseMessage
как подклассы Langroid's ToolMessage
. Обратите внимание, что инструмент имеет необходимые аргументные terms
Lease
типа:
import langroid as lr
class LeaseMessage ( lr . agent . ToolMessage ):
request : str = "lease_info"
purpose : str = """
Collect information about a Commercial Lease.
"""
terms : Lease
Затем определите LeaseExtractorAgent
с помощью метода lease_info
, который обрабатывает этот инструмент, создает экземпляру агента и позволяет ему использовать и отвечать на этот инструмент:
class LeaseExtractorAgent ( lr . ChatAgent ):
def lease_info ( self , message : LeaseMessage ) -> str :
print (
f"""
DONE! Successfully extracted Lease Info:
{ message . terms }
"""
)
return json . dumps ( message . terms . dict ())
lease_extractor_agent = LeaseExtractorAgent ()
lease_extractor_agent . enable_message ( LeaseMessage )
См. Скрипт chat_multi_extract.py
в репокровании langroid-examples
для полного рабочего примера.
Langroid предоставляет специализированный класс DocChatAgent
для этой цели. Он включает в себя шарнинг документов, встраивание, хранение в векторе-ДБ и поколение запросов-ответов. Использовать этот класс для общения со сбором документов легко. Сначала создайте экземпляр DocChatAgentConfig
, с полем doc_paths
, которое указывает документы для общения.
import langroid as lr
from langroid . agent . special import DocChatAgentConfig , DocChatAgent
config = DocChatAgentConfig (
doc_paths = [
"https://en.wikipedia.org/wiki/Language_model" ,
"https://en.wikipedia.org/wiki/N-gram_language_model" ,
"/path/to/my/notes-on-language-models.txt" ,
],
vecdb = lr . vector_store . QdrantDBConfig (),
)
Затем создайте экземпляр DocChatAgent
(это проглатывает документы в векторный магазин):
agent = DocChatAgent ( config )
Тогда мы можем либо задать агенту одноразовые вопросы,
agent . llm_response ( "What is a language model?" )
или оберните его в Task
и запустите интерактивный цикл с пользователем:
task = lr . Task ( agent )
task . run ()
См. Полные рабочие сценарии в папке docqa
репозиции langroid-examples
.
Используя Langroid, вы можете настроить TableChatAgent
с набором данных (путь файла, URL или DataFrame) и запросить его. LLM агента генерирует код PANDAS для ответа на запрос с помощью функционального обжига (или инструмента/плагина), а метод обработки функций агента выполняет код и возвращает ответ.
Вот как вы можете сделать это:
import langroid as lr
from langroid . agent . special import TableChatAgent , TableChatAgentConfig
Установите TableChatAgent
для файла данных, URL или DataFrame (убедитесь, что таблица данных имеет строку заголовка; разделитель/сепаратор является автоматическим определением):
dataset = "https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"
# or dataset = "/path/to/my/data.csv"
# or dataset = pd.read_csv("/path/to/my/data.csv")
agent = TableChatAgent (
config = TableChatAgentConfig (
data = dataset ,
)
)
Создайте задачу и задайте такие одноразовые вопросы, как это:
task = lr . Task (
agent ,
name = "DataAssistant" ,
default_human_response = "" , # to avoid waiting for user input
)
result = task . run (
"What is the average alcohol content of wines with a quality rating above 7?" ,
turns = 2 # return after user question, LLM fun-call/tool response, Agent code-exec result
)
print ( result . content )
Или альтернативно, настройте задачу и запустите ее в интерактивном цикле с пользователем:
task = lr . Task ( agent , name = "DataAssistant" )
task . run ()
Для полного рабочего примера см. Сценарий table_chat.py
в репозиторе langroid-examples
.
Если вам нравится этот проект, пожалуйста, дайте ему звезду и? Распространите информацию в своей сети или в социальных сетях:
Ваша поддержка поможет создать импульс и сообщество Langroid.