このガイドでは、LangChain で複数の入力を持つチェーンにメモリを追加するプロセスを説明します。
LangChain で複数の入力を持つチェーンにメモリを追加するにはどうすればよいですか?
LLM またはチャットボットにメモリを追加して、最新のメッセージやデータを保存し、モデルがコマンドのコンテキストを理解できるようにすることができます。 LangChain で複数の入力を使用してチェーンにメモリを追加するプロセスを学習するには、次の手順を実行するだけです。
ステップ 1: モジュールをインストールする
まず、言語モデルを構築するためのさまざまな依存関係がある LangChain フレームワークをインストールします。
pip インストール ラングチェーン
chromadb をインストールして、メモリで使用されるデータを Chroma ベクター ストアに保存します。
pip インストール chromadb
Tiktoken は、大きなドキュメントの小さなチャンクを作成して簡単に管理できるようにするために使用されるトークナイザーです。
pipインストールtiktoken
OpenAI は、OpenAI() メソッドを使用してチェーンと LLM を構築するために使用できるモジュールです。
pip インストール openai
ステップ 2: 環境のセットアップとデータのアップロード
このプロセスに必要なモジュールをすべてインストールした後の次のステップは、 環境をセットアップする OpenAI アカウントの API キーを使用します。
輸入 あなた輸入 ゲットパス
あなた 。 約 [ 「OPENAI_API_KEY」 】 = ゲットパス 。 ゲットパス ( 「OpenAI API キー:」 )
ファイル ライブラリを使用してドキュメントをアップロードし、LangChain フレームワークでチェーンを構築します。
から グーグル。 他 輸入 ファイルアップロードされた = ファイル。 アップロード ( )
ステップ 3: ライブラリをインポートする
ドキュメントが正常にアップロードされたら、必要なライブラリを Langchain モジュールからインポートするだけです。
から ラングチェーン。 埋め込み 。 オープンナイ 輸入 OpenAI埋め込みから ラングチェーン。 埋め込み 。 密着 輸入 Cohereエンベディング
から ラングチェーン。 テキストスプリッター 輸入 文字テキストスプリッター
から ラングチェーン。 ベクトルストア 。 elastic_vector_search 輸入 弾性ベクトル検索
から ラングチェーン。 ベクトルストア 輸入 彩度
から ラングチェーン。 ドキュメントストア 。 書類 輸入 書類
ステップ 4: Chroma データベースを使用してメモリを構築する
ここで、前にアップロードしたドキュメントの埋め込みとトークンを保存するベクトル空間の構築を開始します。
と 開ける ( 「組合の状態.txt」 ) として f:労働組合の状態 = f. 読む ( )
テキストスプリッター = 文字テキストスプリッター ( チャンクサイズ = 1000 、 チャンク_オーバーラップ = 0 )
テキスト = テキストスプリッター。 分割テキスト ( 労働組合の状態 )
埋め込み = OpenAI埋め込み ( )
ドキュメントのテキストと埋め込みを保存するために Chroma データベースを構成します。
ドキュメントサーチ = 彩度。 from_texts (テキスト 、 埋め込み 、 メタデータ = [ { 'ソース' : 私 } のために 私 で 範囲 ( のみ ( テキスト ) ) 】
)
クエリ変数でコマンドを要求してメモリをテストし、similarity_search() メソッドを実行します。
クエリ = 「NATOはいつ結成されたのですか」ドキュメント = ドキュメントサーチ。 類似性検索 ( クエリ )
ステップ 5: プロンプト テンプレートの構成
このステップでは、次のライブラリをインポートしてプロンプトのテンプレートを構成するプロセスについて説明します。
から ラングチェーン。 鎖 。 質問に答える 輸入 ロード_qa_chainから ラングチェーン。 llms 輸入 OpenAI
から ラングチェーン。 プロンプト 輸入 プロンプトテンプレート
から ラングチェーン。 メモリ 輸入 会話バッファメモリ
その後、クエリのテンプレートまたは構造を構成し、メモリがモデルに追加されたらチェーンを実行するだけです。
テンプレート = 「」「あなたは人間と会話するモデルです長い文書と質問から抽出されたチャンクを基に、最終的な回答を作成します。
{コンテクスト}
{履歴}
人間: {入力}
チャットボット:「」
プロンプト = プロンプトテンプレート (
入力変数 = [ 「ヒスト」 、 '入力' 、 'コンテクスト' 】 、 テンプレート = テンプレート
)
メモリ = 会話バッファメモリ ( メモリキー = 「ヒスト」 、 入力キー = '入力' )
鎖 = ロード_qa_chain (
OpenAI ( 温度 = 0 ) 、 チェーンタイプ = 'もの' 、 メモリ = メモリ 、 プロンプト = プロンプト
)
ステップ 6: メモリをテストする
ここでは、クエリ変数を使用して質問し、パラメータを指定してchain() メソッドを実行することでモデルをテストします。
クエリ = 「NATOはいつ結成されたのですか」鎖 ( { 「入力ドキュメント」 : ドキュメント 、 '入力' : クエリ } 、 return_only_outputs = 真実 )
モデルによって与えられた答えが最近メモリに保存されたため、バッファ メモリに保存されているデータを出力します。
印刷する ( 鎖。 メモリ 。 バッファ )
LangChain で複数の入力を持つチェーンにメモリを追加する方法は以上です。
結論
LangChain の複数の入力を持つチェーンにメモリを追加するには、テキストと埋め込みを保存するモジュールとベクター ストアをインストールするだけです。その後、ローカル システムからデータ/ドキュメントをアップロードし、データを保存するために必要なライブラリをインポートして、LLM 用のメモリを構築します。最新のメッセージをバッファ メモリに保存し、チェーンにテキスト メッセージを送信するようにプロンプト テンプレートを構成します。このガイドでは、LangChain で複数の入力を持つチェーンにメモリを追加するプロセスについて詳しく説明しました。