LangChainとMilvusを用いた長期記憶を持つ会話AIエージェントの構築

大規模言語モデル(LLMs)は人工知能(AI)のゲームを変えた。これらの高度なモデルは、人間のようなテキストを簡単に理解し、驚くほどの精度で生成することができ、AIアシスタントやチャットボットをより賢く、より便利なものにしている。LLMのおかげで、質問に対する回答から言語の翻訳まで、複雑な言語タスクを処理できるAIツールが登場した。
会話エージェントは、実際の人間と話すように、自然言語でユーザーとチャットするソフトウェア・プログラムである。チャットボットやバーチャルアシスタントのようなもので、私たちの質問やコマンドを理解し応答することで、日常的なタスクを助けてくれる。
LangChainは、このような会話エージェントを簡単に構築できるオープンソースのフレームワークである。スマートでコンテキストを意識したチャットボットやその他のAIアプリケーションを迅速かつ効率的に作成するための便利なツールやテンプレートを提供しています。
##LangChainエージェント入門
LangChainエージェントは、複雑なタスクを完了するために様々なツールやデータソースと対話するためにLLMを使用する高度なシステムです。これらのエージェントは、ユーザの入力を理解し、決定を下し、応答を作成することができ、従来の方法よりも柔軟で適応的な意思決定を提供するためにLLMを使用します。
LangChainエージェントの大きな利点は、外部のツールやデータソースを利用できることです。つまり、単に言語を処理するだけでなく、情報を収集したり、計算を実行したり、アクションを起こしたりすることができるため、様々なアプリケーションでより強力で効果的なものとなります。
ラングチェーンエージェントとチェーンの比較
チェーン とエージェントは、LangChainで使われる2つの主要なツールです。チェーンは、あらかじめ定義されたツールの使用順序を作ることができ、特定の操作順序を必要とするタスクに便利です。
LangChainチェーンの仕組み](https://assets.zilliz.com/How_Lang_Chain_Chains_work_b15cd2e788.png)
一方、エージェントは、大規模な言語モデルがループでツールを使用することを可能にし、ツールを使用する回数を決めることができます。この柔軟性は、反復処理や動的な意思決定を必要とするタスクに最適である。
LangChainエージェントの仕組み](https://assets.zilliz.com/How_Lang_Chain_Agents_work_de7b0757ce.png)
##LangChainを使った会話エージェントの構築
PythonでLangChainを使った会話エージェントを作ってみましょう。
依存関係のインストール
LangChainエージェントを構築するには、以下の依存関係をインストールする必要があります:
LangChain](https://pypi.org/project/langchain/):LangChainはオープンソースのフレームワークで、大規模言語モデル(LLM)を使ったアプリケーションの開発を支援します。
Langchain OpenAI](https://pypi.org/project/langchain-openai/):本パッケージには
openai
SDK を通して OpenAI に統合された LangChain が含まれます。OpenAI API SDK](https://pypi.org/project/openai/):OpenAI Python ライブラリは、Python 3.7+ アプリケーションから OpenAI REST API への便利なアクセスを提供します。
Dotenv](https://pypi.org/project/python-dotenv/):Python-dotenv は
.env
ファイルからキーと値のペアを読み込み、環境変数として設定することができます。Milvus](https://pypi.org/project/milvus/):億単位のベクトル保存と類似検索に最適なオープンソースのベクトルデータベース。また、RAG (Retrieval Augmented Generation) アプリケーションを構築するためのインフラストラクチャ・コンポーネントとしても人気がある。
Pymilvus](https://pypi.org/project/pymilvus/):MilvusのPython SDK。多くの一般的な埋め込みと再ランク付けモデルを統合しており、RAGアプリケーションの構築を効率化する。
Tiktoken](https://pypi.org/project/tiktoken/): OpenAIのモデルで使える高速なBPEトークナイザー。
以下のコマンドを実行することでインストールできます:
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()
プロジェクトのディレクトリに、OpenAIのAPIキーを含む .env
ファイルがあることを確認します。
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxx
OpenAI LLMを初期化する
次に、langchain_openai
パッケージを使って OpenAI LLM を初期化します。
from langchain_openai import OpenAI
llm = OpenAI()
会話チェーンの作成
会話エージェントを作成するために langchain.chains
の ConversationChain
クラスを使う。このチェーンはユーザとの対話を処理する。
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()
会話 = ConversationChain(
llm=llm、
)
answer = conversation.predict(input="私の名前は?")
print(answer)
コードの実行
コードを実行するには、.env
ファイルに OpenAI API キーが設定されていることを確認してください。そして、Pythonスクリプトを実行します。エージェントが質問に答える出力が表示され、LangChainフレームワークの会話機能が紹介されるはずです。
Pythonスクリプトを実行すると、以下のような応答が返ってくるはずです:
> 私はあなたの個人情報にアクセスできませんので、その質問に正確にお答えすることができません。あなたのお名前をお教えください。
おめでとう!あなたはLangChainを使って基本的な会話エージェントを作ることに成功しました。この例はほんの始まりに過ぎません。LangChainを使えば、あなたのニーズに合わせた、より複雑で有能なAIエージェントを構築することができます。
会話エージェントにおけるメモリの重要性
しかし、私たちがエージェントに "私の名前は何ですか?"*と尋ねると、エージェントには以前の対話の記憶がないため、正しく答えることができませんでした。このような記憶の欠如は、会話エージェントの有用性を制限します。記憶を統合することで、私たちのエージェントは過去の対話から重要な詳細を記憶することができ、応答をより正確でパーソナライズされたものにすることができます。
LangChainとMilvusを使った長期記憶を持つ会話エージェントの構築
Milvusは、10億スケールのベクトルを効率的に保存・検索するために構築された、高性能なオープンソースのベクトルデータベースです。意味検索](https://zilliz.com/glossary/semantic-search)や検索拡張生成(RAG)のようなGenAIのユースケースに広く利用されている。また、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()
プロジェクトのディレクトリに、OpenAIのAPIキーを含む .env
ファイルがあることを確認します。
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxx
OpenAI LLMとEmbeddingsを初期化する.
langchain_openai` パッケージを使って、OpenAI LLM とエンベッディングを初期化します。
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"}、
# 最も簡単な方法は、Milvus Liteを使用することです。
# Milvusサーバーがある場合は "http://localhost:19530 "のようなサーバーURIを利用することができます.
)
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"]})
プロンプト・テンプレートの定義
memoryを含むプロンプト・テンプレートを作成する。
from langchain.prompts import PromptTemplate
prompt_template = """以下はユーザーとチャットボットのフレンドリーな会話です。チャットボットは饒舌で、文脈から具体的な詳細をたくさん提供してくれます。チャットボットは質問の答えを知らない場合、正直に「知らない」と答えます。
以前の会話の関連する部分:
{歴史}。
(関連性がない場合は、これらの情報を使用する必要はありません。)
現在の会話
ユーザー: {入力}
チャットボット:""
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":"了解!"}、
{"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 = """以下は、ユーザーとチャットボットのフレンドリーな会話です。チャットボットは饒舌で、コンテキストから具体的な詳細をたくさん提供してくれます。チャットボットが質問の答えを知らない場合、正直に「知らない」と答えます。
以前の会話の関連する部分:
{歴史}。
(関連性がなければ、これらの情報を使う必要はありません。)
現在の会話
ユーザー: {入力}
チャットボット:""
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という名前の短縮形であることをご存知ですか?中世に人気のあった名前で、歴史上多くの有名人に使われてきました。ボブという名前の有名人を知っていますか?
おめでとう!あなたはLangChainとMilvusを使って長期記憶を持つ会話エージェントを作ることに成功しました。この例は、正確でパーソナライズされた応答を提供するために、記憶がエージェントの能力をいかに著しく向上させるかを示しています。LangChainとMilvusを使えば、あなたのニーズに合わせたさらに高度で有能なAIエージェントを構築することができます。
要約
本記事では、LangChainエージェントの魅力的な世界と、会話AIを変革する可能性を探ってきました。まず、LangChainの基本的な紹介から始め、高度でコンテキストを意識した会話エージェントの構築におけるLangChainの役割を理解しました。そして、LangChainを使った簡単なエージェントを作成する実践的なステップを探求し、メモリを持たないエージェントの限界を明らかにしました。
これらの限界に対処するために、Milvus Liteを使用してエージェントに長期記憶を統合する方法を実演し、この拡張機能によってエージェントが重要な情報を保持し、より正確でパーソナライズされた応答を提供できることを紹介しました。
実験のすすめ
LangChainの基礎と会話エージェントの作り方を理解したところで、いよいよ実験です!より複雑なエージェントを作ってみたり、追加ツールを統合してみたり、様々なユースケースを試してみてください。LangChainの柔軟性とパワーは、会話AIが達成できる限界を押し広げるための素晴らしいフレームワークです。
LangChainとMilvusをより深く知るには、公式ドキュメントと推奨チュートリアルをご覧ください:
LangChainチェーン vs. エージェント](https://python.langchain.com/v0.1/docs/use_cases/tool_use/)
LangChainエージェント](https://python.langchain.com/v0.1/docs/modules/agents/)
ベクターデータベースとは](https://zilliz.com/learn/what-is-vector-database)
数秒でGenAIアプリケーションを構築できるMilvus Liteのご紹介](https://milvus.io/blog/introducing-milvus-lite.md)
ローカルでMilvus Liteを動かす](https://milvus.io/docs/milvus_lite.md)
MilvusでLangChain](https://python.langchain.com/v0.1/docs/integrations/vectorstores/milvus/)
これらのリソースを探索することで、より包括的な理解を得ることができ、高度でインテリジェントな会話エージェントを構築するためのより良い環境を得ることができます。ハッピーコーディング
読み続けて

Building RAG Pipelines for Real-Time Data with Cloudera and Milvus
explore how Cloudera can be integrated with Milvus to effectively implement some of the key functionalities of RAG pipelines.

3 Key Patterns to Building Multimodal RAG: A Comprehensive Guide
These multimodal RAG patterns include grounding all modalities into a primary modality, embedding them into a unified vector space, or employing hybrid retrieval with raw data access.

Top 10 AI Agents to Watch in 2025 🚀
AI agents are like having a supercharged assistant by your side—analyzing data, making decisions, and seamlessly integrating with tools and environments.