0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

土山竜輝Advent Calendar 2023

Day 5

LangChainのConversationEntityMemoryを検証してみた

Last updated at Posted at 2023-12-04

はじめに

LangChainの会話履歴を保存するMemory機能の1つであるConversationEntityMemoryを検証してみました。LangChainのConversationEntityMemoryの挙動を確認したい方におすすめです。

開発環境

  • Windows 11
  • Python 3.11.5
  • dotenv
  • LangChain
  • Azure OpenAI

実装

必要なパッケージのインストール

以下のコマンドで必要なパッケージをインストールします。

pip install langchain
pip install openai
pip install python-dotenv

環境変数の設定と依存関係の読み込み

.envファイルを作成し、Azure Open AIの環境変数の設定をします。
ご自身の環境に合わせて設定してください。

.env
# APIキー
OPENAI_API_KEY = "XXXXX"

# エンドポイント
AZURE_OPENAI_ENDPOINT = "XXXXX"

# 使用するOpenAI APIのバージョン
OPENAI_API_VERSION = "XXXXX"

  
必要なライブラリをインポートします。

test.py
# 環境変数を.envファイルから読み込む
from dotenv import load_dotenv
load_dotenv()

from langchain.chat_models import AzureChatOpenAI
from langchain.chains import ConversationChain # 会話専用のChain
from langchain.memory import ConversationEntityMemory
from langchain.memory.prompt import ENTITY_MEMORY_CONVERSATION_TEMPLATE # ConversationEntityMemory専用のテンプレート

使用するモデルの準備

Azure Chat OpenAIを定義します。

test.py
llm = AzureChatOpenAI(
    temperature=0,
    azure_deployment="gpt-35-turbo-16k",
)

ConversationEntityMemoryの定義

以下のようにConversationEntityMemoryを定義します。
ConversationEntityMemoryは会話に含まれているエンティティ情報を保持します。
エンティティとは、話者や固有名詞など、会話中の特定の事物に関する情報のことです。

test.py
memory = ConversationEntityMemory(llm=llm)

chainを作成し、実行

最後にchainを作成し、実行します。最初の質問ではトムとサムという人物がIT企業でエンジニアで働いていることを伝え、次の質問でそれを確かめる質問を投げます。

test.py
conversation = ConversationChain(
    llm=llm,
    verbose=True,
    prompt=ENTITY_MEMORY_CONVERSATION_TEMPLATE,
    memory=memory
)

result = conversation.predict(input="トムとサムはIT企業でエンジニアとして働いています。")
print(result)
result = conversation.predict(input="トムとサムの職業について教えてください。")
print(result)

  
これまでのPythonコードを上から順に記述し終わったら、Pythonファイルを実行します。
実行結果は以下のようになりました。

image.png

「Context」に固有名詞の情報が抽出されています。
その情報から2問目は回答していることが確認できます。

おわりに

LangChainの会話履歴を保存するMemory機能の1つであるConversationEntityMemoryを検証してみました。固有名詞の情報を保持して回答したい場合には有効です。ぜひ、試してみてください。

最後までお読みいただき、ありがとうございました! 記事に関する質問等ございましたら、コメントもしくは以下のDMにてよろしくお願いします。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?