Создание разговорного ИИ-агента с долговременной памятью с использованием LangChain и Milvus
Большие языковые модели (LLMs) изменили правила игры в области искусственного интеллекта (AI). Эти продвинутые модели могут легко понимать и генерировать человекоподобный текст с впечатляющей точностью, делая AI-ассистентов и чат-ботов гораздо умнее и полезнее. Благодаря LLMs у нас теперь есть AI-инструменты, которые могут выполнять сложные языковые задачи — от ответов на вопросы до перевода языков.
Разговорные агенты — это программные программы, которые общаются с пользователями на естественном языке, как при разговоре с реальным человеком. Они лежат в основе таких вещей, как чат-боты и виртуальные ассистенты, помогая нам с повседневными задачами, понимая наши вопросы и команды и отвечая на них.
LangChain — это open-source фреймворк, который упрощает создание таких разговорных агентов. Он предоставляет удобные инструменты и шаблоны для быстрого и эффективного создания умных, учитывающих контекст чат-ботов и других AI-приложений.
Введение в LangChain Agents
LangChain agents — это продвинутые системы, которые используют LLM для взаимодействия с различными инструментами и источниками данных, чтобы выполнять сложные задачи. Эти агенты могут понимать пользовательский ввод, принимать решения и создавать ответы, используя LLM, чтобы обеспечивать более гибкое и адаптивное принятие решений, чем традиционные методы.
Большое преимущество LangChain Agents — их способность использовать внешние инструменты и источники данных. Это означает, что они могут собирать информацию, выполнять вычисления и предпринимать действия, выходящие за рамки простой обработки языка, что делает их более мощными и эффективными для различных приложений
LangChain Agents vs. Chains
Chains и агенты — это два основных инструмента, используемых в LangChain. Chains позволяют создать заранее определённую последовательность использования инструментов, что полезно для задач, требующих определённого порядка операций.
Как работают LangChain Chains
С другой стороны, Agents позволяют большой языковой модели использовать инструменты в цикле, давая ей возможность решать, сколько раз использовать инструменты. Такая гибкость идеально подходит для задач, требующих итеративной обработки или динамического принятия решений.
Как работают LangChain Agents
Создание разговорного агента с помощью LangChain
Давайте создадим разговорного агента с помощью LangChain на Python.
Установка зависимостей
Чтобы создать агента LangChain, нам нужно установить следующие зависимости:
LangChain: LangChain — это open-source фреймворк, который помогает разработчикам создавать приложения с использованием больших языковых моделей (LLMs).
Langchain OpenAI: Этот пакет содержит интеграции LangChain для OpenAI через их
openaiSDK.OpenAI API SDK: Библиотека OpenAI для Python предоставляет удобный доступ к OpenAI REST API из любого приложения на Python 3.7+.
Dotenv: Python-dotenv считывает пары ключ-значение из файла
.envи может устанавливать их как переменные окружения.Milvus: open-source векторная база данных, лучше всего подходящая для хранения векторов миллиардного масштаба и поиска по сходству. Она также является популярным инфраструктурным компонентом для создания приложений Retrieval Augmented Generation (RAG).
Pymilvus: Python SDK для Milvus. Он интегрирует множество популярных моделей эмбеддингов и реранжирования, что упрощает создание RAG-приложений.
Tiktoken: быстрый токенизатор BPE для использования с моделями OpenAI.
Вы можете установить их, выполнив следующую команду:
pip install langchain==0.1.20 langchain-openai openai python-dotenv pymilvus langchain_milvus tiktoken
Обратите внимание, что в этом примере мы будем специально использовать LangChain версии 0.1.20.
После того как мы установили все зависимости, давайте напишем код для настройки простого разговорного агента.
Загрузка переменных окружения
Сначала мы загрузим переменные окружения с помощью пакета dotenv. Этот пакет помогает защитить конфиденциальную информацию, такую как API-ключи.
from dotenv import load_dotenv
load_dotenv()
Убедитесь, что в каталоге вашего проекта есть файл .env, содержащий ваш OpenAI API key.
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Инициализация OpenAI LLM
Далее мы инициализируем OpenAI LLM с помощью пакета langchain_openai.
from langchain_openai import OpenAI
llm = OpenAI()
Создание цепочки разговора
Мы используем класс ConversationChain из langchain.chains, чтобы создать разговорного агента. Эта цепочка будет обрабатывать диалог с пользователем.
from langchain.chains import ConversationChain
conversation = ConversationChain(
llm=llm,
)
Выполнение прогнозов
Наконец, мы можем выполнять прогнозы, передавая пользовательский ввод в цепочку разговора. В этом примере мы задаем агенту простой вопрос.
answer = conversation.predict(input="What's my name?")
print(answer)
Полный пример кода
Объединив все шаги, вот полный код.
from dotenv import load_dotenv
from langchain_openai import OpenAI
from langchain.chains import ConversationChain
load_dotenv()
llm = OpenAI()
conversation = ConversationChain(
llm=llm,
)
answer = conversation.predict(input="What's my name?")
print(answer)
Запуск кода
Чтобы запустить код, убедитесь, что вы настроили файл .env с вашим OpenAI API key. Затем выполните ваш Python-скрипт. Вы должны увидеть вывод, в котором агент отвечает на вопрос, демонстрируя разговорные возможности фреймворка LangChain.
После запуска Python-скрипта вы должны получить ответ примерно такого содержания:
> У меня нет доступа к вашей личной информации, поэтому я не могу точно ответить на этот вопрос. Не могли бы вы сообщить мне ваше имя, чтобы я мог обращаться к вам правильно?
Поздравляем! Вы успешно создали базового разговорного агента с помощью LangChain. Этот пример — только начало. С LangChain вы можете создавать более сложных и функциональных AI-агентов, адаптированных под ваши потребности.
Важность памяти в разговорных агентах
Однако, когда мы спросили нашего агента: "Как меня зовут?" он не смог ответить правильно, потому что у него не было памяти о предыдущих взаимодействиях. Это отсутствие памяти ограничивает полезность разговорных агентов, поскольку они не могут сохранять важную информацию о пользователе или контексте разговора. Интегрируя память, наш агент сможет запоминать ключевые детали из прошлых взаимодействий, делая ответы более точными и персонализированными.
Создание разговорного агента с долговременной памятью с использованием LangChain и Milvus
Milvus — это высокопроизводительная векторная база данных с открытым исходным кодом, созданная для эффективного хранения и извлечения миллиардов векторов. Она широко используется для сценариев GenAI, таких как семантический поиск и Retrieval Augmented Generation (RAG). Она также является важным инфраструктурным компонентом для добавления долговременной памяти для LLM.
Milvus Lite — это облегченная версия Milvus, которая может работать на ваших локальных устройствах. В этом примере мы будем использовать Milvus Lite в качестве векторного хранилища для хранения и извлечения моих личных данных.
Теперь давайте расширим нашего разговорного агента долговременной памятью с помощью LangChain и Milvus Lite.
Установка требований
Сначала установите необходимые пакеты, если они у вас еще не установлены.
pip install langchain==0.1.20 langchain-openai python-dotenv openai pymilvus tiktoken
Теперь давайте напишем код шаг за шагом.
Загрузка переменных окружения
Загрузите переменные окружения с помощью пакета dotenv. Этот шаг помогает защитить конфиденциальную информацию, такую как API-ключи.
from dotenv import load_dotenv
load_dotenv()
Убедитесь, что в каталоге вашего проекта есть файл .env, содержащий ваш API-ключ OpenAI.
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Инициализация OpenAI LLM и эмбеддингов
Инициализируйте OpenAI LLM и эмбеддинги с помощью пакета langchain_openai.
from langchain_openai import OpenAI, OpenAIEmbeddings
llm = OpenAI()
embeddings = OpenAIEmbeddings()
Настройка Milvus как векторного хранилища
Настройте векторную базу данных Milvus для хранения и извлечения ваших данных.
from langchain_milvus.vectorstores import Milvus
vectordb = Milvus(
embeddings,
connection_args={"uri": "./milvus_demo.db"},
# The easiest way is to use Milvus Lite where everything is stored in a local file.
# If you have a Milvus server you can use the server URI such as "http://localhost:19530".
)
retriever = vectordb.as_retriever( search_kwargs=dict(k=1))
Создание памяти для агента
Настройте память с помощью векторного ретривера.
from langchain.memory import VectorStoreRetrieverMemory
memory = VectorStoreRetrieverMemory(retriever=retriever)
Сохранение начального контекста
Добавьте некоторую начальную информацию в память.
about_me = [
{"input": "My name is Bob.", "output": "Got it!"},
{"input": "I'm from San Francisco.", "output": "Got it!"},
]
for example in about_me:
memory.save_context({"input": example["input"]}, {"output": example["output"]})
Определение шаблона промпта
Создайте шаблон промпта, который включает память.
from langchain.prompts import PromptTemplate
prompt_template = """The following is a friendly conversation between a user and a chatbot. The chatbot is talkative and provides lots of specific details from its context. If the chatbot does not know the answer to a question, it truthfully says it does not know.
Relevant pieces of previous conversation:
{history}
(You do not need to use these pieces of information if not relevant)
Current conversation:
User: {input}
Chatbot:"""
prompt = PromptTemplate(input_variables=["history", "input"], template=prompt_template)
Создание цепочки разговора с памятью
Настройте цепочку разговора для использования промпта и памяти.
from langchain.chains import ConversationChain
conversation_with_memory = ConversationChain(
llm=llm, prompt=prompt, memory=memory, verbose=True
)
Выполнение предсказаний
Наконец, задайте агенту вопрос, чтобы увидеть, как он использует свою память.
Полный пример кода
Объединяя все шаги, вот полный код.
from dotenv import load_dotenv
from langchain_openai import OpenAIEmbeddings
from langchain_openai import OpenAI
from langchain.memory import VectorStoreRetrieverMemory
from langchain.chains import ConversationChain
from langchain.prompts import PromptTemplate
from langchain_milvus.vectorstores import Milvus
load_dotenv()
llm = OpenAI()
embeddings = OpenAIEmbeddings()
vectordb = Milvus(
embeddings,
connection_args={"uri": "./milvus_demo.db"},
)
retriever = vectordb.as_retriever(search_kwargs=dict(k=1))
memory = VectorStoreRetrieverMemory(retriever=retriever)
about_me = [
{"input": "My name is Bob.", "output": "Got it!"},
{"input": "I'm from San Francisco.", "output": "Got it!"},
]
for example in about_me:
memory.save_context({"input": example["input"]}, {"output": example["output"]})
prompt_template = """The following is a friendly conversation between a user and a chatbot. The chatbot is talkative and provides lots of specific details from its context. If the chatbot does not know the answer to a question, it truthfully says it does not know.
Relevant pieces of previous conversation:
{history}
(You do not need to use these pieces of information if not relevant)
Current conversation:
User: {input}
Chatbot:"""
prompt = PromptTemplate(input_variables=["history", "input"], template=prompt_template)
conversation_with_memory = ConversationChain(
llm=llm, prompt=prompt, memory=memory, verbose=True
)
answer = conversation_with_memory.predict(input="What's my name?")
print(answer)
Запуск кода
Настройте свой файл .env с вашим ключом OpenAI API, чтобы запустить код. Затем выполните свой Python-скрипт. Вы должны увидеть вывод, в котором агент отвечает на вопрос, демонстрируя расширенные возможности фреймворка LangChain с интеграцией памяти.
После запуска Python-скрипта вы должны получить ответ примерно такого содержания:
> Ваше имя — Bob. Знаете ли вы, что имя Bob — это уменьшительная форма имени Robert, которое в германских языках означает «яркая слава»? Это имя было популярно в Средние века и использовалось многими известными людьми на протяжении истории. Знаете ли вы каких-нибудь известных людей по имени Bob?
Поздравляем! Вы успешно создали разговорного агента с долговременной памятью, используя LangChain и Milvus. Этот пример демонстрирует, как память может значительно улучшить способность агентов предоставлять точные и персонализированные ответы. С LangChain и Milvus вы можете создавать еще более продвинутых и способных AI-агентов, адаптированных под ваши потребности.
Краткое содержание
В этой статье мы исследовали увлекательный мир агентов LangChain и их потенциал для трансформации разговорного AI. Мы начали с базового введения в LangChain, разобрав его роль в создании продвинутых, контекстно-ориентированных разговорных агентов. Затем мы рассмотрели практические шаги по созданию простого агента с помощью LangChain, подчеркнув ограничения агентов без памяти.
Чтобы устранить эти ограничения, мы продемонстрировали, как интегрировать долговременную память в вашего агента с помощью Milvus Lite, показав, как это улучшение позволяет агенту сохранять важную информацию и предоставлять более точные, персонализированные ответы.
Призыв к экспериментам
Теперь, когда у вас есть базовое понимание LangChain и того, как создавать разговорных агентов, пришло время экспериментировать! Попробуйте создавать более сложных агентов, интегрировать дополнительные инструменты и исследовать различные варианты использования. Гибкость и мощь LangChain делают его отличным фреймворком для расширения границ того, чего может достичь разговорный AI.
Для более глубокого погружения в LangChain и Milvus ознакомьтесь с их официальной документацией и рекомендуемыми руководствами:
Изучив эти ресурсы, вы получите более всестороннее понимание и будете лучше подготовлены к созданию продвинутых, интеллектуальных разговорных агентов. Удачного кодинга!
Читать далее

Milvus 2.6.x Now Generally Available on Zilliz Cloud, Making Vector Search Faster, Smarter, and More Cost-Efficient for Production AI
Milvus 2.6.x is now GA on Zilliz Cloud, delivering faster vector search, smarter hybrid queries, and lower costs for production RAG and AI applications.

Expanding Our Global Reach: Zilliz Cloud Launches in Azure Central India
Zilliz Cloud expands to Azure Central India. This new region helps customers meet compliance, reduce latency, and optimize cloud costs when building AI applications.

Announcing the General Availability of Zilliz Cloud BYOC on Google Cloud Platform
Zilliz Cloud BYOC on GCP offers enterprise vector search with full data sovereignty and seamless integration.



