LangChain:メモリ容量でパフォーマンスを向上させる
LangChain Improving Performance with Memory Capacity.
LangChainのメモリ拡張技術による強化
以前にLangChainに関する記事を投稿し、ライブラリとその機能全体を紹介しました。今回は、インテリジェントチャットボットでメモリを管理する方法に焦点を当てたいと思います。
チャットボットまたはエージェントには、異なる形式で異なる機能を実行できる情報ストレージメカニズムが必要です。チャットボットにメモリシステムを実装することは、彼らをより賢くするだけでなく、ユーザーにとってより自然で有用になるのに役立ちます。
幸いにも、LangChainは開発者がアプリケーションでメモリを実装するのを容易にするAPIを提供しています。この記事では、この側面を詳しく探っていきます。
LangChainでメモリを使用する
チャットボットを開発する際のベストプラクティスは、チャットボットがユーザーとのすべてのやり取りを保存することです。これは、LLMの状態が過去の会話に応じて変化するためです。実際、2人のユーザーからの同じ質問に対するLLMの回答も異なるため、彼らはチャットボットと異なる過去の会話を持っており、そのため異なる状態にあるためです。
そのため、チャットボットメモリが作成するものは、新しい質問が行われる前にフィードバックされる古いメッセージのリストにすぎません。もちろん、LLMには限られた文脈しかないため、この履歴をLLMにフィードバックする方法を選択するためには、少し創造的である必要があります。最も一般的な方法は、古いメッセージの要約を返すか、おそらく最も情報量の多いN個の最新のメッセージのみを返すことです。
ChatMessageHistoryで基礎を学ぶ
これは、チャットボット(AI)とユーザー(人間)の間で発生するメッセージを管理するための主要なクラスです。このクラスは、以下の2つの主要なメソッドを提供します。
- add_user_message: メッセージをチャットボットのメモリに追加し、メッセージに「ユーザー」というタグを付けることができます
- add_ai_message: メッセージをチャットボットのメモリに追加し、メッセージに「AI」というタグを付けることができます
!pip install langchainfrom langchain.memory import ChatMessageHistoryhistory = ChatMessageHistory()history.add_user_message("こんにちは!")history.add_ai_message("こんにちは、今日はどうしたいですか?")# メッセージを出力するprint(history.messages)
このクラスでは、さまざまなことができますが、最も単純な使用法では、時々メッセージをリストに保存するということだけを行うことができます。その後、以下の方法で過去に追加したすべてのメッセージを簡単に確認できます。
for message in history.messages: print(message.content)
ConversationBufferMemoryで高度なメモリ
ConversationBufferMemoryクラスは、メッセージストアに関してChatMessageHistoryクラスと同様に動作しますが、古いメッセージを取得するための賢い方法を提供します。たとえば、必要に応じてメッセージをリストまたは1つの大きな文字列として取得できます。過去の会話の要約をLLMに作らせる場合は、過去の会話を1つの大きな文字列として持っている方が便利です。代わりに、過去の詳細な分析を行いたい場合は、リストから1つのメッセージを抽出して1つずつ読むことができます。
また、ConversationBufferMemoryクラスでも、add_user_messageとadd_user_messageメソッドを使用して履歴にメッセージを追加できます。一方、load_memory_variablesメソッドは、指定されたリストまたは辞書形式で古いメッセージを抽出するために使用されます。次に、例を見てみましょう。
from langchain.memory import ConversationBufferMemorymemory = ConversationBufferMemory()memory.chat_memory.add_user_message("こんにちは、調子はどうですか?")memory.chat_memory.add_ai_message("こんにちは、私は元気です!あなたはどうですか?")memory_variables = memory.load_memory_variables({})print(memory_variables['history'])
複数の会話でメモリを管理する
メッセージを保存して取り出すことによってメモリを管理する方法のおもちゃの例を見てきました。しかし、実際のアプリケーションでは複数の会話のメモリを管理する必要がある場合があります。 LangChainは、チェーンと呼ばれるものを使用して、この場合も管理できます。 チェーンとは、特定の目標を達成するためのさまざまな単純または複雑なステップのワークフローにすぎません。
たとえば、ある質問に答える方法がわからないため、Wikipediaで情報を検索するLLMは、チェーンです。 さまざまな会話を処理するには、ConversationChainクラスのインスタンス化で作成された各チェーンにConversationBufferMemoryを関連付けるだけで十分です。 この方法でモデルのpredictメソッドが呼び出されると、チェーンのすべてのステップが実行されるため、モデルは会話の過去のメッセージを読み取ることができます。 簡単な例を見てみましょう。
from langchain.llms import OpenAIfrom langchain.chains import ConversationChainfrom langchain.memory import ConversationBufferMemorymemory = ConversationBufferMemory()conversation = ConversationChain(llm= OpenAI(), memory=memory)conversation.predict(input="Hey! how are you?")
最後に
結論として、メモリはチャットボットの重要なコンポーネントです。 LangChainは、メモリを効果的に管理するためのさまざまなフレームワークやツールを提供しています。ChatMessageHistoryやConversationBufferMemoryなどのクラスを使用することで、AIとのユーザーのインタラクションをキャプチャして保存し、この情報を将来のAIの応答のガイドとして使用できます。 この情報が、よりスマートで能力の高いチャットボットを構築するのに役立つことを願っています!
次の記事では、LangChainツールの使用方法を説明します。
この記事が役に立った場合は、VoAGIで私をフォローしてください! 😉
おわり
Marcello Politi
Linkedin , Twitter , Website
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles