Краткое описание
Этот пост продемонстрирует следующее:
- Как добавить память агенту и его инструментам в LangChain
- Шаг 1: Установка фреймворков
- Шаг 2. Настройка среды
- Шаг 3. Импорт библиотек
- Шаг 4. Добавление ReadOnlyMemory
- Шаг 5: Настройка инструментов
- Шаг 6: Создание агента
- Способ 1: использование ReadOnlyMemory
- Способ 2: использование одной и той же памяти для агента и инструментов
- Заключение
Как добавить память агенту и его инструментам в LangChain?
Добавление памяти агентам и инструментам позволяет им лучше работать благодаря возможности использовать историю чата модели. Благодаря памяти агент может эффективно решать, какой инструмент развернуть и когда. Предпочтительно использовать « Только для чтения памяти » как для агентов, так и для инструментов, чтобы они не могли его изменить. Чтобы изучить процесс добавления памяти как к агентам, так и к инструментам в LangChain, выполните перечисленные шаги:
Шаг 1: Установка фреймворков
Прежде всего, установите langchain-экспериментальный модуль, чтобы получить его зависимости для построения языковых моделей и инструментов для агента. LangChain Experiment — модуль, который получает зависимости для построения моделей, которые чаще всего используются для экспериментов и тестов:
pip установить langchain - экспериментальный
Получить результаты поиска в Google модули с зависимостями OpenAI, чтобы получить наиболее актуальные ответы из Интернета:
pip установить openai google - поиск - Результаты
Шаг 2. Настройка среды
Чтобы построить модель, которая получает ответы из Интернета, необходимо настроить среды с помощью ОпенАИ и СерпAPi ключи:
Импортировать ты
Импортировать получить пропуск
ты. примерно [ 'ОПЕНАЙ_API_KEY' ] '=' получить пропуск. получить пропуск ( «Ключ API OpenAI:» )
ты. примерно [ 'SERPAPI_API_KEY' ] '=' получить пропуск. получить пропуск ( «Ключ API Serpapi:» )
Шаг 3. Импорт библиотек
После настройки сред импортируйте библиотеки для создания инструментов для агента и дополнительную память для интеграции с ними. Следующий код использует агенты, память, llms, цепочки, запросы и утилиты для получения необходимых библиотек:
из Лангчейна. агенты Импортировать ЗероШотАгент , Инструмент , АгентИсполнительиз Лангчейна. Память Импортировать РазговорБуферПамять , ReadOnlySharedMemory
из Лангчейна. llms Импортировать ОпенАИ
#получить библиотеку для построение цепочки с помощью LangChain
из Лангчейна. цепи Импортировать ЛМЧейн
из Лангчейна. подсказки Импортировать Шаблон приглашения
#получить библиотеку для получение информации из Интернета
из Лангчейна. коммунальные услуги Импортировать СерпAPIWrapper
Шаг 4. Добавление ReadOnlyMemory
Настройте шаблон, чтобы агент мог приступить к выполнению задач, как только пользователь предоставит входные данные. После этого добавьте «РазговорБуферМемори()» для хранения истории чата модели и инициализации 'Только для чтения памяти' для агентов и его инструментов:
шаблон '=' '' «Это разговор человека и бота:{чат_история}
#задайте структуру для извлечения точного и простого резюме
Подведите итоги чата для {input}:
' ''
быстрый '=' Шаблон приглашения ( входные_переменные '=' [ 'вход' , 'история_чата' ] , шаблон '=' шаблон )
Память '=' РазговорБуферПамять ( ключ_памяти '=' 'история_чата' )
только для чтения памяти '=' ReadOnlySharedMemory ( Память '=' Память )
Цепочка #summary для объединения всех компонентов для получение резюме разговора
summary_chain '=' ЛМЧейн (
лм '=' ОпенАИ ( ) ,
быстрый '=' быстрый ,
подробный '=' Истинный ,
Память '=' только для чтения памяти ,
)
Шаг 5: Настройка инструментов
Теперь настройте такие инструменты, как поиск и сводка, чтобы получить ответ из Интернета вместе со сводкой чата:
поиск '=' СерпAPIWrapper ( )инструменты '=' [
Инструмент (
имя '=' 'Поиск' ,
функция '=' поиск. бегать ,
описание '=' 'правильные ответы на целевые запросы о последних событиях' ,
) ,
Инструмент (
имя '=' 'Краткое содержание' ,
функция '=' summary_chain. бегать ,
описание '=' «Полезно подвести итоги чата, и входные данные для этого инструмента должны быть строкой, указывающей, кто будет читать это резюме» ,
) ,
]
Шаг 6: Создание агента
Настройте агент, как только инструменты будут готовы, для выполнения необходимых задач и получения ответов из Интернета. « префикс ” выполняется до того, как агенты назначат какую-либо задачу инструментам и “ суффикс » выполняется после того, как инструменты извлекли ответ:
префикс '=' '' «Поговорите с человеком, как можно лучше ответив на следующие вопросы, используя следующие инструменты:» ''суффикс '=' '' 'Начинать!'
#состав для агент, чтобы начать использовать инструменты, используя память
{ история чата }
Вопрос : { вход }
{ Agent_scratchpad } '' '
приглашение = ZeroShotAgent.create_prompt(
#настройте шаблоны подсказок, чтобы понять контекст вопроса
инструменты,
префикс = префикс,
суффикс = суффикс,
input_variables=[' вход ', ' история чата ', ' Agent_scratchpad '],
)
Способ 1: использование ReadOnlyMemory
Как только агент настроен на выполнение инструментов, модель с ReadOnlyMemory становится предпочтительный способ построения и выполнения цепочек для получения ответов, и этот процесс выглядит следующим образом:
Шаг 1: Построение цепочки
Первым шагом в этом методе является построение цепочки и исполнителя для «ZeroShotAgent()» со своими аргументами. «LLMChain()» используется для построения соединения между всеми чатами в языковой модели с использованием аргументов llm и Prompt. Агент использует llm_chain, инструменты и verbose в качестве аргумента и создает агент_цепь для выполнения как агентов, так и его инструментов с использованием памяти:
llm_chain '=' ЛМЧейн ( лм '=' ОпенАИ ( температура '=' 0 ) , быстрый '=' быстрый )агент '=' ЗероШотАгент ( llm_chain '=' llm_chain , инструменты '=' инструменты , подробный '=' Истинный )
агент_цепочка '=' АгентИсполнитель. from_agent_and_tools (
агент '=' агент , инструменты '=' инструменты , подробный '=' Истинный , Память '=' Память
)
Шаг 2: Тестирование цепочки
Позвоните в агент_цепочка используя метод run(), чтобы задать вопрос из Интернета:
агент_цепочка. бегать ( вход '=' «Что такое Лангчейн» )Агент извлек ответ из Интернета с помощью поисковых инструментов:
Пользователь может задать неясный дополнительный вопрос, чтобы проверить память, прикрепленную к агенту:
агент_цепочка. бегать ( вход '=' «Кто это разработал?» )Агент использовал предыдущий чат, чтобы понять контекст вопросов, и получил ответы, как показано на следующем снимке экрана:
Агент использует инструмент (summary_chain) для извлечения сводки всех ответов, извлеченных ранее, используя память агента:
агент_цепочка. бегать (вход '=' «Спасибо! Подведите итоги разговора, для моего 5-летнего ребенка»
)
Выход
Краткое изложение ранее заданных вопросов для 5-летнего ребенка показано на следующем снимке экрана:
Шаг 3. Тестирование памяти
Распечатайте буферную память, чтобы извлечь хранящиеся в ней чаты, используя следующий код:
Распечатать ( агент_цепочка. Память . буфер )Чаты в правильном порядке без каких-либо изменений показаны в следующем фрагменте:
Способ 2: использование одной и той же памяти для агента и инструментов
Второй метод, который не рекомендуется платформой, — использование буферной памяти как для агентов, так и для инструментов. Инструменты могут изменять чаты, хранящиеся в памяти, что может возвращать ложные результаты в больших разговорах:
Шаг 1: Построение цепочки
Использование полного кода из шаблона для создания инструментов и цепочек для агентов с небольшим изменением, поскольку на этот раз ReadOnlyMemory не добавляется:
шаблон '=' '' «Это разговор человека и бота:{чат_история}
Напишите краткое изложение разговора для {input}:
' ''
#строим структуру чата интерфейс используя шаблон подсказки, добавив память по цепочке
быстрый '=' Шаблон приглашения ( входные_переменные '=' [ 'вход' , 'история_чата' ] , шаблон '=' шаблон )
Память '=' РазговорБуферПамять ( ключ_памяти '=' 'история_чата' )
summary_chain '=' ЛМЧейн (
лм '=' ОпенАИ ( ) ,
быстрый '=' быстрый ,
подробный '=' Истинный ,
Память '=' Память ,
)
#создайте инструменты ( поиск и сводка ) для настройка агентов
поиск '=' СерпAPIWrapper ( )
инструменты '=' [
Инструмент (
имя '=' 'Поиск' ,
функция '=' поиск. бегать ,
описание '=' 'правильные ответы на целевые запросы о последних событиях' ,
) ,
Инструмент (
имя '=' 'Краткое содержание' ,
функция '=' summary_chain. бегать ,
описание '=' «полезно получить сводку чата, и вам нужен строковый ввод для этого инструмента, показывающий, кто будет читать эту сводку» ,
) ,
]
#объясните шаги для агент, использующий инструменты для извлечения информации для чат
префикс '=' '' «Поговорите с человеком, отвечая на вопросы наилучшим образом, используя следующие инструменты:» ''
суффикс '=' '' 'Начинать!'
#состав для агент, чтобы начать использовать инструменты, используя память
{ история чата }
Вопрос : { вход }
{ Agent_scratchpad } '' '
приглашение = ZeroShotAgent.create_prompt(
#настройте шаблоны подсказок, чтобы понять контекст вопроса
инструменты,
префикс = префикс,
суффикс = суффикс,
input_variables=[' вход ', ' история чата ', ' Agent_scratchpad '],
)
#интегрируем все компоненты при создании исполнителя агента
llm_chain = LLMChain(llm=OpenAI(температура=0), подсказка=подсказка)
агент = ZeroShotAgent(llm_chain=llm_chain, инструменты=инструменты, подробный=True)
Agent_chain = AgentExecutor.from_agent_and_tools(
агент=агент, инструменты=инструменты, подробный=Истина, память=память
)
Шаг 2: Тестирование цепочки
Запустите следующий код:
агент_цепочка. бегать ( вход '=' «Что такое Лангчейн» )Ответ успешно отображается и сохраняется в памяти:
Задайте дополнительный вопрос, не раскрывая контекста:
агент_цепочка. бегать ( вход '=' «Кто это разработал?» )Агент использует память, чтобы понять вопрос, преобразуя его, а затем печатает ответ:
Получите сводку чата, используя память, прикрепленную к агенту:
агент_цепочка. бегать (вход '=' «Спасибо! Подведите итоги разговора, для моего 5-летнего ребенка»
)
Выход
Сводка была успешно извлечена, и до сих пор все выглядит так же, но изменения происходят на следующем этапе:
Шаг 3. Тестирование памяти
Извлечение сообщений чата из памяти с помощью следующего кода:
Распечатать ( агент_цепочка. Память . буфер )Инструмент изменил историю, добавив еще один вопрос, который изначально не задавался. Это происходит, когда модель понимает вопрос, используя спрашивать себя вопрос. Инструмент ошибочно думает, что его задал пользователь, и обрабатывает его как отдельный запрос. Таким образом, он также добавляет в память дополнительный вопрос, который затем можно использовать для получения контекста разговора:
На данный момент это все.
Заключение
Чтобы добавить память как агенту, так и его инструментам в LangChain, установите модули, чтобы получить их зависимости и импортировать из них библиотеки. После этого создайте память разговоров, языковую модель, инструменты и агента для добавления памяти. рекомендуемый метод для добавления памяти используется ReadOnlyMemory для агента и его инструменты для хранения истории чата. Пользователь также может использовать разговорная память как для агентов, так и для инструментов. Но они получают смущенный иногда и меняю чаты в памяти.