概要
この投稿では次の内容が表示されます。
LangChain にカスタム メモリ タイプを追加する方法
LangChain にカスタム メモリ タイプを追加するにはどうすればよいですか?
LangChain にカスタマイズされたメモリ タイプを追加すると、メモリとして最大限のパフォーマンスを得ることができます。ユーザーは要件に応じてメモリのタイプを設定できます。 LangChain にカスタム メモリ タイプを追加するには、次の手順を実行するだけです。
ステップ 1: フレームワークのインストール
まず、LangChain フレームワークをインストールして、カスタム メモリ タイプを追加するプロセスを開始します。
pip インストール ラングチェーンPython ノートブックで上記のコマンドを実行すると、次のスニペットに示すように、LangChain の依存関係がインストールされます。
OpenAI モジュールをインストールして、LLM の構成に使用できるライブラリを取得します。
pip インストール openai
このガイドでは、spaCy フレームワークを使用して LangChain のカスタム メモリ タイプを設計し、次のコードを使用してモジュールをインストールします。
pip インストール スペイシー
spaCy モデルはハッシュ テーブルを使用して、以前のチャット メッセージと同様に情報を観測値として保存します。次のコードは、spaCy ライブラリから大規模言語モデルまたは LLM をダウンロードして、高度な NLP モデルを構築するために使用されます。
! python -m spacy ダウンロード en_core_web_lg
「」をインポートしています あなた ' そして ' ゲットパス 」ライブラリは、OpenAI のアカウントから API キーを入力するためのものです。 その環境をセットアップする :
輸入 あなた輸入 ゲットパス
あなた 。 約 [ 「OPENAI_API_KEY」 】 = ゲットパス 。 ゲットパス ( 「OpenAI API キー:」 )
ステップ 2: ライブラリのインポート
次のステップでは、チャット モデルに従ってメモリ タイプをカスタマイズするために必要なライブラリをインポートします。
から ラングチェーン。 スキーマ 輸入 ベースメモリから ラングチェーン。 鎖 輸入 会話チェーン
から 卑劣な 輸入 ベースモデル
から ラングチェーン。 llms 輸入 OpenAI
から タイピング 輸入 リスト 、 辞書 、 どれでも
「」をインポートする スペイシー ” ライブラリをロードして” en_core_web_lg ” モデルを作成し、それを” NLP 」変数は自然言語処理モデルです。
輸入 広々としたNLP = スペーシー。 負荷 ( 「en_core_web_lg」 )
ステップ 3: カスタム メモリの構築
その後、Memory クラスの BaseMemory 引数と BaseModel 引数を使用してカスタム メモリを構築するだけです。次に、完全な情報として、または単一の単位としてメモリに保存できるエンティティ (データから収集/保存) を構成します。メモリとモデルのパフォーマンスを最適化するために、ドキュメントのすべてのエンティティを含むようにメモリが構成されています。
クラス スペースエンティティメモリ ( ベースメモリ 、 ベースモデル ) :''' エンティティに関する情報を格納するためのメモリ クラス'''
エンティティ: 辞書 = { }
メモリキー: str = 「エンティティ」
確かに クリア ( 自己 ) :
自己 。 エンティティ = { }
@ 財産
確かに メモリ変数 ( 自己 ) - > リスト [ str 】 :
''' クエリに提供された変数を初期化します'''
戻る [ 自己 。 メモリキー 】
#引数を使用してメモリ変数を定義します
確かに ロードメモリ変数 ( 自己 、 入力: 辞書 [ str 、 どれでも 】 ) - > 辞書 [ str 、 str 】 :
''' メモリ用の変数、つまりエンティティ キーを呼び出します'''
博士 = NLP ( 入力 [ リスト ( 入力。 キー ( ) ) [ 0 】 】 )
#個々のユニットのメモリに保存されるエンティティを設定します
エンティティ = [
自己 。 エンティティ [ str ( エント ) 】 のために エント で 博士。 エント もし str ( エント ) で 自己 。 エンティティ
】
戻る { 自己 。 メモリキー : 」 \n 」 。 参加する ( エンティティ ) }
#メモリを使用するためのsave_context()を定義します
確かに コンテキストの保存 ( 自己 、 入力: 辞書 [ str 、 どれでも 】 、 出力: 辞書 [ str 、 str 】 ) - > なし :
'''このチャットからの観察を記憶に保存します'''
文章 = 入力 [ リスト ( 入力。 キー ( ) ) [ 0 】 】
博士 = NLP ( 文章 )
のために エント で 博士。 エント :
ent_str = str ( エント )
もし ent_str で 自己 。 エンティティ :
自己 。 エンティティ [ ent_str 】 + = f 」 \n {文章}'
それ以外 :
自己 。 エンティティ [ ent_str 】 = 文章
ステップ 4: プロンプト テンプレートの構成
その後、ユーザー/人間が提供する入力の構造を説明するプロンプト テンプレートを構成するだけです。
から ラングチェーン。 プロンプト 。 プロンプト 輸入 プロンプトテンプレートテンプレート = '''以下は、機械と人間の間の対話です。機械が答えを知らない場合は、「わからない」と表示されます。機械 (AI) は、コンテキストから詳細を提供し、質問に対する答えが理解できない場合は、ただごめんなさいと言うだけ
エンティティ情報:
{エンティティ}
コミュニケーション:
人間: {入力}
アイ「」
プロンプト = プロンプトテンプレート ( 入力変数 = [ 「エンティティ」 、 '入力' 】 、 テンプレート = テンプレート )
ステップ 5: モデルのテスト
モデルをテストする前に、OpenAI() メソッドを使用して LLM を構成し、引数を使用して ConversationChain() 関数をセットアップします。
llm = OpenAI ( 温度 = 0 )会話 = 会話チェーン (
llm = llm 、 プロンプト = プロンプト 、 冗長な = 真実 、 メモリ = スペースエンティティメモリ ( )
)
会話変数を使用して detect() メソッドを呼び出しながら、入力引数を使用してモデルに情報を与えます。
会話。 予測する ( 入力 = 「ハリソンは機械学習が好きです」 )出力
モデルは情報を吸収してメモリに保存し、会話を続けるための情報に関連する質問も投げかけます。
ユーザーはモデルからの質問に応答して、メモリにさらに情報を追加したり、情報に関する質問をしてメモリをテストしたりできます。
会話。 予測する (入力 = 「ハリソンの好きな科目は何ですか」
)
次のスニペットに示すように、モデルは以前の情報に基づいて出力を提供し、それを画面に表示します。
LangChain にカスタム メモリ タイプを追加する方法は以上です。
結論
LangChain にカスタム メモリ タイプを追加するには、ライブラリをインポートしてカスタム メモリを構築するために必要なモジュールをインストールするだけです。 spaCy は、このガイドで NLP モデルを使用してカスタム メモリを追加するために使用されている重要なライブラリです。その後、カスタム メモリとプロンプト テンプレートを構成して、チャット インターフェイスの構造を指定します。構成が完了したら、保存されたデータに関連する情報を要求してモデルのメモリをテストするだけです。