Как добавить память агенту и его инструментам в LangChain?

Kak Dobavit Pamat Agentu I Ego Instrumentam V Langchain



LangChain предоставляет все необходимые инструменты для создания агентов, контролирующих процесс извлечения информации для пользователя. Эти инструменты необходимы для создания агента, поскольку они управляют задачами с помощью разных инструментов. Агенты также манипулируют этими инструментами, проходя этапы и реализуя все действия. Он знает, какой инструмент необходим для работы и когда его следует назначить для этой конкретной задачи.

Краткое описание

Этот пост продемонстрирует следующее:

Как добавить память агенту и его инструментам в 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 для агента и его инструменты для хранения истории чата. Пользователь также может использовать разговорная память как для агентов, так и для инструментов. Но они получают смущенный иногда и меняю чаты в памяти.