LangChain でエージェントとベクター ストアを組み合わせるには?

Langchain Deejentotobekuta Sutoawo Zumi Hewaseruniha



LangChain は言語モデルを設計するフレームワークです。これらのモデルは、大量のデータによって自然言語でトレーニングされます。これらのデータセットを管理するためのデータベースや Chroma などのベクター ストアが多数あります。エージェント ストアとベクター ストアを組み合わせることで、モデルはさまざまなドメインからのデータを使用してパフォーマンスが向上します。 LangChain を使用すると、多くのベクター ストアを使用して言語モデルやチャットボットをトレーニングできます。

概要

この投稿では次の内容が表示されます。







エージェントを使用して LangChain で構造化された出力を返す方法



方法 1: エージェントとベクター ストアを組み合わせる



方法 2: エージェントをルーターとして使用する





方法 3: マルチホップ ベクター ストアでエージェントを使用する

結論



エージェントを使用して LangChain で構造化された出力を返すにはどうすればよいですか?

開発者はエージェントを使用して、モデルのトレーニング データを含むデータベース間のルーティングを行います。エージェントは、すべてのステップを保存することで、完全なプロセスの青写真を保持します。エージェントには、プロセスを完了するためにこれらすべてのアクティビティを実行するツールがあります。ユーザーはエージェントを使用してさまざまなデータ ストアからデータを取得し、モデルを多様にすることもできます。

LangChain でエージェントとベクター ストアを組み合わせるプロセスを学ぶには、以下の手順に従ってください。

ステップ 1: フレームワークのインストール

まず、エージェントとベクター ストアを結合するための LangChain モジュールとその依存関係をインストールします。

pip インストール ラングチェーン

このガイドでは、データをさまざまな場所またはテーブルに保存できる Chroma データベースを使用しています。

pip インストール chromadb

データをより深く理解するには、tiktoken トークナイザーを使用して大きなファイルを小さなチャンクに分割します。

pipインストールtiktoken

OpenAI は、LangChain フレームワークで大規模な言語モデルを構築するために使用できるモジュールです。

pip インストール openai

ステップ 2: OpenAI 環境

ここでの次のステップは、 環境をセットアップする OpenAI 公式アカウントから抽出できる OpenAI の API キーを使用します。

輸入 あなた
輸入 ゲットパス

あなた [ 「OPENAI_API_KEY」 = ゲットパス ゲットパス ( 「OpenAI API キー:」 )

次に、今後使用するために、データをローカル システムから Google コラボレーションにアップロードします。

から グーグル。 輸入 ファイル

アップロードされた = ファイル。 アップロード ( )

ステップ 3: ベクター ストアの作成

このステップでは、アップロードされたデータを保存するためのベクター ストアであるタスクの最初のコンポーネントを構成します。ベクター ストアを構成するには、LangChain のさまざまな依存関係からインポートできるライブラリが必要です。

から ラングチェーン。 埋め込み オープンナイ 輸入 OpenAI埋め込み

#Vector は、必要なデータベースまたはベクターを取得するための依存関係を保存します

から ラングチェーン。 ベクトルストア 輸入 彩度

#テキスト スプリッターは、大きなテキストを小さなチャンクに変換するために使用されます。

から ラングチェーン。 テキストスプリッター 輸入 文字テキストスプリッター

から ラングチェーン。 llms 輸入 OpenAI

から ラングチェーン。 document_loaders 輸入 WebBaseLoader

から ラングチェーン。 輸入 検索QA


llm = OpenAI ( 温度 = 0 )

ステップ 4: パスの設定

ライブラリをインポートした後、データをベクトル ストアに保存する前に、ベクトル ストアにアクセスするためのパスを設定するだけです。

から パスライブラリ 輸入 パス

関連パーツ = [
のために p パス ( 「。」 ) 絶対 ( ) 部品 :
関連パーツ。 追加する ( p )
もし 関連パーツ [ - 3 : == [ 「ラングチェーン」 「ドキュメント」 「モジュール」 :
壊す
#各データベースのパスを設定するループ内の条件文
doc_path = str ( パス ( *関連パーツ ) / 「組合の状態.txt」 )

ステップ 5: データのロードと分割

ここで、データをロードして小さなチャンクに分割するだけで、読みやすさと理解しやすさが向上します。テキストを数値に変換してベクトル空間を作成し、それを Chorma データベースに保存することで、データの埋め込みを作成します。

から ラングチェーン。 document_loaders 輸入 テキストローダー

#データセットをそのパスからロードし、その小さなチャンクをデータベースに保存します

ローダ = テキストローダー ( doc_path )

書類 = ローダ。 負荷 ( )

テキストスプリッター = 文字テキストスプリッター ( チャンクサイズ = 2000年 チャンク_オーバーラップ = 0 )

テキスト = テキストスプリッター。 分割ドキュメント ( 書類 )

#テキストを数値に変換し、埋め込みをデータベースに保存します

埋め込み = OpenAI埋め込み ( )

ドキュメントサーチ = 彩度。 from_documents ( テキスト 埋め込み コレクション名 = 「連合状態」 )

ステップ 6: レトリバーの作成

エージェント ストアとベクター ストアを組み合わせるには、LangChain フレームワークの RetrievalQA() メソッドを使用して取得者を作成する必要があります。この取得方法は、データベースを操作するツールとしてエージェントを使用してベクター ストアからデータを取得する場合に推奨されます。

連合状態 = 検索QA。 from_chain_type (

llm = llm チェーンタイプ = 'もの' レトリーバー = ドキュメントサーチ。 レトリバーとして ( )

)

別のデータセットをロードして、エージェントを複数のデータセットまたはベクター ストアと統合します。

ローダ = WebBaseLoader ( 「https://beta.ruff.rs/docs/faq/」 )

埋め込みベクトルも使用してデータの小さなチャンクを作成した後、ruff データセットを chromadb に保存します。

ドキュメント = ローダ。 負荷 ( )
ruff_texts = テキストスプリッター。 分割ドキュメント ( ドキュメント )
ラフ_データベース = 彩度。 from_documents ( ruff_texts 埋め込み コレクション名 = 「ラフ」 )
ラフ = 検索QA。 from_chain_type (
llm = llm チェーンタイプ = 'もの' レトリーバー = ruff_db。 レトリバーとして ( )
)

方法 1: エージェントとベクター ストアを組み合わせる

エージェントとベクター ストアの両方を組み合わせて情報を抽出する最初の方法については、以下で説明します。

ステップ 1: ツールを構成する

ベクター ストアが設定されたので、プロセスの 2 番目のコンポーネント (エージェント) の構築に進みます。プロセスのエージェントを作成するには、エージェント、ツールなどの依存関係を使用してライブラリをインポートします。

から ラングチェーン。 エージェント 輸入 エージェントの初期化
から ラングチェーン。 エージェント 輸入 エージェントタイプ
#エージェントを構築するために LangChain からツールを取得する
から ラングチェーン。 ツール 輸入 ベースツール
から ラングチェーン。 llms 輸入 OpenAI
#言語モデルを構築するためにチェーンから LLMMathChain を取得する
から ラングチェーン。 輸入 LLMMathChain
から ラングチェーン。 公共事業 輸入 SerpAPIラッパー
から ラングチェーン。 エージェント 輸入 道具

QA システムを使用するか、ツールの名前と説明を使用して以前に構成した取得を使用して、エージェントで使用するツールを構成します。

ツール = [
道具 (
名前 = 「一般教書QAシステム」
機能 = 連合の状態。 走る
説明 = 「ロードされたデータセットに関連する質問に対する回答を、完全な形式の質問として入力して提供します」
)
道具 (
名前 = 「ラフQAシステム」
機能 = ラフ。 走る
説明 = 「ruff (Python リンター) に関する質問に対する回答を、完全に形成された質問として入力して提供します。」
)
]

ステップ 2: エージェントを初期化する

ツールを構成したら、initializa_agent() メソッドの引数にエージェントを設定するだけです。ここで使用するエージェントは、 ZERO_SHOT_REACT_DESCRIPTION ツール、llm (言語モデル)、および詳細情報とともに:

エージェント = エージェントの初期化 (

ツール llm エージェント = エージェントタイプ。 ZERO_SHOT_REACT_DESCRIPTION 冗長な = 真実

)

ステップ 3: エージェントをテストする

引数に質問を含む run() メソッドを使用してエージェントを実行するだけです。

エージェント。 走る (

「ジョー・バイデン大統領は演説の中でカンジ・ブラウンについて何と言ったか」

)

次のスクリーンショットは、エージェントのメモリに保存されている観察結果を使用して両方のデータ ストアから抽出された回答を示しています。

方法 2: エージェントをルーターとして使用する

両方のコンポーネントを組み合わせるもう 1 つの方法は、エージェントをルーターとして使用することです。そのプロセスについては以下で説明します。

ステップ 1: ツールを構成する

エージェントをルーターとして使用するということは、ツールが出力を直接返すように構成されているため、RetrievalQA システムが出力を直接返すことを意味します。

ツール = [
#データからデータを取得するエージェントを構築するために必要なツールを構成する
道具 (
名前 = 「一般教書QAシステム」
機能 = 連合の状態。 走る
説明 = 「ロードされたデータセットに関連する質問に対する回答を、完全な質問として入力して提供します」
リターンダイレクト = 真実
)
道具 (
名前 = 「ラフQAシステム」
機能 = ラフ。 走る
説明 = 「ruff (Python リンター) に関する質問への回答を、完全な質問として入力して提供します。」
リターンダイレクト = 真実
)
]

ステップ 2: エージェントを初期化してテストする

ツールを設定した後は、initialize_agent() メソッドを使用してルーターとしてのみ使用できるエージェントを設定するだけです。

エージェント = エージェントの初期化 (

ツール llm エージェント = エージェントタイプ。 ZERO_SHOT_REACT_DESCRIPTION 冗長な = 真実

)

次のコマンドを実行して、agent.run() メソッドに質問を入力してエージェントをテストします。

エージェント。 走る (

「ジョー・バイデン大統領は演説の中でカンジ・ブラウンについて何と言ったか」

)

出力

出力スクリーンショットには、エージェントが RetrievalQA システムによって抽出されたデータセットから質問に対する回答を返しただけであることが表示されます。

方法 3: マルチホップ ベクター ストアでエージェントを使用する

開発者がエージェント ストアとベクター ストアの両方を組み合わせることができる 3 番目の方法は、マルチホップ ベクター ストア クエリ用です。次のセクションでは、完全なプロセスについて説明します。

ステップ 1: ツールを構成する

最初のステップは、いつものように、データ ストアからデータを抽出するエージェントを構築するために使用されるツールの構成です。

ツール = [
道具 (
名前 = 「一般教書QAシステム」
機能 = 連合の状態。 走る
説明 = 「ロードされたデータセットに関連する質問に対する回答を、前の会話の代名詞を参照せずに、完全に形式化された質問として入力して提供します。」
)
道具 (
名前 = 「ラフQAシステム」
機能 = ラフ。 走る
説明 = 「ロードされたデータセットに関連する質問に対する回答を、前の会話の代名詞を参照せずに、完全に形式化された質問として入力して提供します。」
)

ステップ 2: エージェントを初期化してテストする

その後、initialize_agent() メソッドを使用してエージェントの名前を指定してエージェント変数を構築します。

エージェント = エージェントの初期化 (

ツール llm エージェント = エージェントタイプ。 ZERO_SHOT_REACT_DESCRIPTION 冗長な = 真実

)

次のコード ブロックにはそのような質問が含まれているため、複数の側面または機能を含むマルチホップの質問を使用してエージェントを実行します。

エージェント。 走る (

「ruff は Python ノートブックを実行するためにどのツールを使用していますか? 講演者の誰かが講演でそのツールについて言及しましたか?」

)

出力

次のスクリーンショットは、エージェントが質問の複雑さを理解するために質問に取り組む必要があることを示しています。プロセスの前半でアップロードした複数のデータ ストアから QA システムによって抽出された回答が返されました。

LangChain でエージェントとベクター ストアを組み合わせる方法については以上です。

結論

エージェントを LangChain のベクター ストアと組み合わせるには、環境をセットアップしてデータセットをロードするためのモジュールのインストールから始めます。最初にデータをより小さなチャンクに分割してデータをロードするようにベクター ストアを構成し、次に OpenAI() メソッドを使用して言語モデルを構築します。エージェントをベクトル ストアと統合して、さまざまな種類のクエリのデータを抽出するように構成します。この記事では、LangChain でエージェントとベクター ストアを組み合わせるプロセスについて詳しく説明しました。