🦜🔗LangChain: повышение производительности за счет объема памяти
Повышение LangChain за счет методов расширения памяти
Я уже публиковал статьи о LangChain ранее, знакомя с библиотекой и всеми ее возможностями. Теперь я хотел бы сосредоточиться на ключевом аспекте, как управлять памятью в интеллектуальных чат-ботах.
Чат-ботам или агентам также нужен механизм хранения информации, который может принимать разные формы и выполнять разные функции. Внедрение системы запоминания в чат-ботах не только помогает сделать их более умными, но и делает их более естественными и полезными для пользователей.
К счастью, LangChain предоставляет API, упрощающие разработчикам реализацию памяти в своих приложениях. В этой статье мы рассмотрим этот аспект более подробно.
Используйте память в LangChain
При разработке чат-ботов рекомендуется сохранять все взаимодействия чат-бота с пользователем. Это связано с тем, чтосостояние LLM может меняться в зависимости от предыдущего разговора, в Фактически, LLM на один и тот же вопрос от 2 пользователей также будет отвечать по-разному, потому что у них был другой предыдущий разговор с чат-ботом, и поэтому он находится в другом состоянии.
Итак, то, что создает память чат-бота, — это не что иное, как список старых сообщений, которые возвращаются к нему до того, как будет задан новый вопрос. Конечно, LLM имеет ограниченный контекст, поэтому вам нужно проявить немного творчества и выбрать, как отправить эту историю обратно в LLM. Наиболее распространенные методы — вернуть сводку старых сообщений или вернуть только N последних сообщений, которые, вероятно, являются наиболее информативными.
Начните с основ с ChatMessageHistory
Это основной класс, который позволяет нам управлять сообщениями, которые происходят между чат-ботом (AI) и пользователем (человеком). Этот класс предоставляет два основных метода:
- add_user_message: позволяет нам добавить сообщение в память чат-бота и пометить сообщение как «пользователь».
- add_ai_message: позволяет нам добавить сообщение в память чат-бота и пометить сообщение как «ИИ».
!pip install langchain from langchain.memory import ChatMessageHistory history = ChatMessageHistory() history.add_user_message("Hi!") history.add_ai_message("Hey, how can I help you today?") #print messages history.messages
Этот класс позволяет вам делать различные вещи, но в его простейшем использовании вы можете рассматривать его как сохранение различных сообщений в список время от времени. Затем вы также можете просмотреть все сообщения, которые вы добавили, просто перебирая историю следующим образом.
for message in history.messages: print(message.content)
Расширенная память с ConversationBufferMemory
Класс ConversationBufferMemory ведет себя примерно так же, как класс ChatMessageHistory в отношении хранилища сообщений, хотя он предоставляет умные методы для извлечения старых сообщений.
Например, мы можем получить старые сообщения, в виде списка сообщений или в виде одной большой строки в зависимости от того, что нам нужно. Если мы хотим попросить LLM подвести итоги прошлой беседы, может быть полезно иметь прошлую беседу в виде одной большой строки. Если вместо этого мы хотим провести подробный анализ прошлого, мы можем читать по одному сообщению, извлекая список.
Также с помощью класса ConversationBufferMemory мы можем добавлять сообщения в историю, используя методы add_user_message и add_user_message.
С другой стороны, метод load_memory_variables используется для извлечения старых сообщений в виде списка или словаря в зависимости от того, что указано, давайте посмотрим пример.
from langchain.memory import ConversationBufferMemory memory = ConversationBufferMemory() memory.chat_memory.add_user_message("Hi, how are you?") memory.chat_memory.add_ai_message("hey,I am fine! How are you?") memory_variables = memory.load_memory_variables({}) print(memory_variables['history'])
Управление памятью в нескольких беседах
Мы видели игрушечные примеры того, как управлять памятью, сохраняя и извлекая сообщения. Но в реальном приложении вам, вероятно, потребуется управлять памятью нескольких диалогов. LangChain позволяет вам управлять и этим случаем с помощью так называемых цепочек.
Цепь — это не что иное, как рабочий процесс, состоящий из различных простых или сложных шагов, которые позволяют вам достичь определенной цели.
Например, LLM, который ищет информацию в Википедии, потому что не знает, как ответить на определенный вопрос, представляет собой цепочку.
Для обработки различных диалогов достаточно связать ConversationBufferMemory с каждой цепочкой, созданной с помощью экземпляра класса ConversationChain.
Таким образом, когда вызывается метод прогнозирования модели, выполняются все шаги цепочки, поэтому модель будет считывать прошлые сообщения беседа.
Давайте рассмотрим простой пример.
from langchain.llms import OpenAI from langchain.chains import ConversationChain from langchain.memory import ConversationBufferMemory memory = ConversationBufferMemory() conversation = ConversationChain(llm= OpenAI(), memory=memory) conversation.predict(input="Hey! how are you?")
Последние мысли
В заключение следует отметить, чтопамять является критически важным компонентом чат-бота, и LangChain предоставляет несколько платформ и инструментов для эффективного управления памятью. С помощью таких классов, как ChatMessageHistory и ConversationBufferMemory, вы можете фиксировать и сохранять взаимодействие пользователей с ИИ и использовать эту информацию для управления будущими ответами ИИ. Я надеюсь, что эта информация поможет вам создавать более умных и эффективных чат-ботов!
В следующей статье я покажу вам, как использовать инструменты LangChain.
Если вы нашли эту статью полезной, подписывайтесь на меня здесь, на Medium! 😉
Конец
Марчелло Полити