ラングチェーンのレトリーバーのための3つの高度な戦略
Langchainの検索:ドキュメントへの効率的かつ柔軟なアクセス
Langchainフレームワークの検索者は重要な役割を果たし、構造化されていないクエリに基づいてドキュメントを返すための柔軟なインターフェイスを提供します。 Vectorデータベースとは異なり、検索者はドキュメントを保存する必要はありません。ベクトルデータベースはレットリアの基礎として機能することができますが、さまざまなタイプのレットリアがあり、それぞれが特定のユースケースにカスタマイズ可能です。
学習目標
- Langchainにおける検索者の重要な役割を理解し、さまざまなアプリケーションのニーズを満たすために効率的で柔軟なドキュメント取得を実現します。
- Langchainの検索者(VectorデータベースからマルチQueries、コンテキスト圧縮まで)が関連情報へのアクセスを簡素化する方法を学びます。
- このガイドは、Langchainのさまざまな検索者タイプをカバーし、クエリ処理とデータアクセスを最適化するために各検索者がどのようにカスタマイズされているかを説明します。
- Langchainの検索機能を掘り下げ、ドキュメントの検索の精度と関連性を高めるためのツールをチェックしてください。
- Langchainのカスタムレトリバーが特定のニーズにどのように適応するかを学び、開発者が非常にレスポンシブなアプリケーションを作成できるようにします。
- 言語モデルとベクトルデータベースを統合して、より正確で効率的な検索結果を取得するLangchainの検索手法を調べます。
目次
- 学習目標
- Langchainの検索者
- Vectorデータベースを検索者として使用します
- Multiquerretrieverを使用します
- サンプルベクトルデータベースを作成します
- 簡単な使用
- カスタムヒント
- コンテキスト圧縮を使用して検索する方法
- コンテキスト圧縮の概要
- カスタム検索者を作成します
- インタフェース
- 例
- 結論は
- よくある質問
Langchainの検索者
検索者は、入力として文字列クエリを受信し、ドキュメントオブジェクトのリストを出力します。このメカニズムにより、アプリケーションは関連情報を効率的に取得し、大規模なデータセットまたは知識ベースとの高度な相互作用を可能にします。
- Vectorデータベースを検索者として使用します
ベクトルデータベースレトリバーは、ベクトル表現を利用してドキュメントを効率的に取得します。ベクトルストレージクラスの軽量ラッパーとして機能し、検索者インターフェイスに準拠し、類似性検索や最大周辺相関(MMR)などの方法を使用します。
ベクトルデータベースから取得者を作成するには、 .as_retriever
メソッドを使用します。たとえば、顧客レビューに基づいたPinecone Vectorデータベースの場合、次のように設定できます。
langchain_community.document_loadersからcsvloaderをインポートします langchain_community.vectorstoresからインポートPineconeから langchain_openaiからOpenAiembedingsをインポートします langchain_text_splittersからImport charateTextSplitter Loader = csvloader( "customer_reviews.csv") documents = roader.load() text_splitter = charateTextSplitter(chunk_size = 500、chunk_overlap = 50) texts = text_splitter.split_documents(documents) 埋め込み= openAiembedings() vectorStore = pinecone.from_documents(テキスト、埋め込み) retriever = vectorStore.as_retriever()
この検索者を使用して関連するコメントを照会できるようになりました。
docs = retriever.invoke(「顧客はバッテリー寿命についてどう思いますか?」)
デフォルトでは、検索者は類似性検索を使用しますが、検索タイプとしてMMRを指定できます。
retriever = vectorStore.as_retriever(search_type = "mmr")
さらに、類似性スコアのしきい値などのパラメーターを渡すか、TOP-Kを使用して結果の数を制限できます。
retriever = vectorStore.AS_RETRIEVER(search_kwargs = {"k":2、 "score_threshold":0.6})
出力:
Vectorデータベースを検索者として使用すると、関連情報への効率的なアクセスを保証することにより、ドキュメントの取得を強化できます。
- Multiquerretrieverを使用します
Multiquerretrieverは、クエリの言葉遣いや次の埋め込みの変更などの一般的な制限に対処することにより、距離ベースのベクターデータベースの検索を強化します。大規模な言語モデル(LLM)自動化プロンプト調整を使用して、異なる角度からの特定のユーザー入力に対して複数のクエリを生成できます。このプロセスにより、各クエリに関連するドキュメントの検索が可能になり、結果を組み合わせて潜在的なドキュメントのより豊富なセットを作成します。
サンプルベクトルデータベースを作成します
MultiquerreTrieverを実証するには、CSVファイルから製品の説明を使用してベクターストアを作成しましょう。
langchain_community.document_loadersからcsvloaderをインポートします langchain_community.vectorstoresからImport faissから langchain_openaiからOpenAiembedingsをインポートします langchain_text_splittersからImport charateTextSplitter #製品の説明loader = csvloader( "product_descriptions.csv") data = roader.load() #テキストをブロックに分割したtext_splitter = charateTextSplitter(chunk_size = 300、chunk_overlap = 50) documents = text_splitter.split_documents(data) #ベクトルストレージ埋め込み= openAiembeddings()を作成します vectordb = faiss.from_documents(documents、embeddeds)
簡単な使用
MultiquerreTrieverを使用するには、クエリ生成に使用されるLLMを指定します。
langchain.retrievers.multi_queryからImport multiquerretrieverから langchain_openaiからChatopenaiをインポートします 質問= "顧客はスマートフォンでどのような機能を大切にしていますか?」 LLM = Chatopenai(温度= 0) retriever_from_llm = multiqueryretriever.from_llm( retriever = vectordb.as_retriever()、llm = llm )) anible_docs = retriever_from_llm.invoke(question) len(sinque_docs)#取得した一意のドキュメントの数
出力:
Multiquerretrieverは複数のクエリを生成し、検索されたドキュメントの多様性と関連性を高めます。
カスタムヒント
生成されたクエリを調整するには、カスタムプロンプトテンプレートと出力パーサーを作成できます。
langchain_core.output_parsersからImport BaseOutputParserから langchain_core.promptsからImport PromptTemplateから インポートリストの入力から #カスタム出力パーサークラスlinElistOutputPuparser(baseOutputPurser [list [str]]): def parse(self、text:str) - > list [str]: return list(filter(none、text.strip()。split( "\ n"))) output_parser = lineListOutputParser() #query生成query_prompt = prompttemplateのカスタムプロンプト input_variables = ["question"]、 template = "" "質問の5つの異なるバージョンを生成:{question}" "" )) llm_chain = query_prompt | #Retriver Retrieverを初期化= MultiqueryRetriever( retriever = vectordb.as_retriever()、llm_chain = llm_chain、parser_key = "lines" )) anible_docs = retriever.invoke( "顧客はスマートフォンでどのような機能を大切にしていますか?") len(sinque_docs)#取得した一意のドキュメントの数
出力
MultiquerreTrieverを使用すると、より効率的な検索プロセスを実現し、ユーザークエリに基づいて多様で包括的な結果を確保できます。
- コンテキスト圧縮を使用して検索する方法
特に、ユーザーが行う特定のクエリについてデータの摂取がわからない場合、ドキュメントの大規模なコレクションから関連情報を取得することは困難です。多くの場合、貴重な洞察は長い文書に隠されており、その結果、言語モデル(LLM)への非効率的で費用のかかる呼び出しが行われ、理想よりも応答性が低くなります。コンテキスト圧縮は、検索プロセスを改善し、関連情報がユーザーのクエリに基づいてのみ返されるようにすることにより、この問題を解決します。この圧縮には、単一のドキュメントの内容を減らし、無関係なドキュメントを除外することが含まれます。
コンテキスト圧縮の概要
コンテキスト圧縮検索者は、基本的な検索者をドキュメントコンプレッサーと統合することにより実行されます。この方法では、ドキュメント全体を返すものではありませんが、クエリによって提供されるコンテキストに基づいてドキュメントを圧縮します。この圧縮には、単一のドキュメントの内容を減らし、無関係なドキュメントを除外することが含まれます。
実装手順
- 基本検索者の初期化:最初に通常のベクトルストレージ検索者を設定します。たとえば、気候変動政策に関するニュース記事を検討してください。
langchain_community.document_loadersからtextloaderをインポートします langchain_community.vectorstoresからImport faissから langchain_openaiからOpenAiembedingsをインポートします langchain_text_splittersからImport charateTextSplitter #記事をロードして分割しますdocuments = textloader( "climate_change_policy.txt")。load() text_splitter = charateTextSplitter(chunk_size = 1000、chunk_overlap = 0) texts = text_splitter.split_documents(documents) #ベクターストレージレトリバーレトリバー= faiss.from_documents(texts、openaiembeddings())。as_retriever()を初期化する
- 初期クエリを実行します:クエリを実行して、関連する情報と無関係な情報を含む可能性のある基本的なレトリバーによって返された結果を表示します。
docs = retriever.invoke(「気候変動と戦うためにどのような行動が提案されていますか?」)
- コンテキスト圧縮を使用した強化された検索:基本的な検索者をContextCompressionRretrieverでラップし、LLMChainExtractorを使用して関連するコンテンツを抽出します。
langchain.retrieversからContextCompressionretrieverをインポートします langchain.retrievers.document_compressorsからllmchainextractorをインポートします langchain_openaiインポートOpenaiから llm = openai(温度= 0) Compressor = llmchainextractor.from_llm(LLM) compression_retriever = contextualCompressionretriever( base_compressor = compressor、base_retriever = retriever )) #compressed_docs = compression_retriever.invokeを実行する( "気候変動と戦うためにどのような行動が提案されているのか?")
圧縮結果を表示する: ContextualCompressionRretrieverの最初のドキュメントを処理し、クエリに関連する関連情報のみを抽出し、それにより応答を最適化します。
カスタム検索者を作成します
多くのLLMアプリケーションで検索が不可欠です。そのタスクは、ユーザークエリに基づいて関連するドキュメントを取得することです。これらのドキュメントはLLMプロンプトとしてフォーマットされており、適切な応答を生成できるようにします。
インタフェース
カスタムレトリバーを作成するには、BaseReTrieverクラスを拡張し、以下を実装してください。
方法 | 説明する | 必須/オプション |
---|---|---|
_get_relevant_documents |
クエリに関連するドキュメントを検索します。 | 必須 |
_aget_relevant_documents |
ネイティブサポートのための非同期実装。 | オプション |
BaseReTrieverから継承されたものは、レトリバーに標準の実行可能な機能を提供します。
例
これが簡単なレトリバーの例です。
インポートリストの入力から langchain_core.documentsからインポートドキュメントから langchain_core.retrieversからImport Baseretrieverから クラスToyretriever(Baseretriever): "" "ユーザーのクエリを含む最初のkドキュメントを返すシンプルなレトリバー" "" " ドキュメント:リスト[ドキュメント] K:int def _get_relevant_documents(self、query:str) - > list [document]: matching_documents = [self.documentsのdoc for doc for self.documents query.lower()in doc.page_content.lower()] return matching_documents [:self.k] #例の使用文書= [ document( "犬は素晴らしい会社です。"、{"Type": "dog"})、 document( "猫は独立したペットです。"、{"タイプ": "cat"})、 ] retriever = toyretriever(documents = documents、k = 1) result = retriever.invoke( "dog") print(result [0] .page_content)
出力
この実装は、ユーザー入力に基づいてドキュメントを取得する簡単な方法を提供し、Langchainのカスタム検索者のコア機能を示しています。
結論は
Langchainフレームワークでは、検索者は、さまざまなドキュメントタイプとユースケースで関連情報に効果的にアクセスできる強力なツールです。さまざまな検索者タイプ(ベクトルストレージレトリバー、マルチクリーレットリリーバー、コンテキスト圧縮リトリーバーなど)を理解および実装することにより、開発者はアプリケーションの特定のニーズに基づいてドキュメント取得をカスタマイズできます。
各レトリバータイプには、マルチクリーレットリリーバーの使用からコンテキスト圧縮の使用まで、応答を最適化することまで、独自の利点があります。さらに、カスタム検索者を作成すると、組み込みのオプションが満たされない可能性のある特別な要件に対応するための柔軟性が高まります。これらの検索手法を習得することで、開発者は言語モデルと大規模なデータセットの可能性を活用するより効率的で応答性の高いアプリケーションを構築できます。
よくある質問
Q1。 A1検索者の主な機能は、クエリに基づいて関連するドキュメントを取得することです。これにより、ドキュメント自体を保存せずに、アプリケーションが大規模なデータセットで必要な情報に効果的にアクセスできます。
Q2。 A2は、類似性ベースの検索を可能にする方法でドキュメントを保存するために使用されます。ベクトルデータベースは検索者の一部になりますが、検索者のタスクは関連情報の取得に焦点を当てています。
Q3。 A3言語モデルを使用して複数のクエリのバリエーションを作成することにより、MultiquerreTrieverが検索結果を改善します。この方法は、さまざまな文言の問題に関連する可能性のあるより広い範囲のドキュメントをキャプチャし、それにより検索情報の豊かさを高めます。
Q4。 A4コンテキストは、ドキュメントのコンテンツを関連する部品のみに削減し、無関係な情報を除外することにより、検索結果を最適化します。これは、完全なドキュメントには無関係な詳細が含まれており、リソースを節約し、より集中化された応答を提供する可能性があるため、大規模なコレクションで特に役立ちます。
Q5。 a5マルチクリーレットレバーをセットアップするには、ドキュメントストレージのためのベクトルデータベース、複数のクエリの視点を生成するための言語モデル(LLM)、およびクエリ生成をさらに最適化するためのオプションのカスタムプロンプトテンプレートが必要です。
以上がラングチェーンのレトリーバーのための3つの高度な戦略の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











メタのラマ3.2:マルチモーダルとモバイルAIの前進 メタは最近、ラマ3.2を発表しました。これは、モバイルデバイス向けに最適化された強力なビジョン機能と軽量テキストモデルを特徴とするAIの大幅な進歩です。 成功に基づいてo

ねえ、忍者をコーディング!その日はどのようなコーディング関連のタスクを計画していますか?このブログにさらに飛び込む前に、コーディング関連のすべての問題について考えてほしいです。 終わり? - &#8217を見てみましょう

今週のAIの風景:進歩、倫理的考慮、規制の議論の旋風。 Openai、Google、Meta、Microsoftのような主要なプレーヤーは、画期的な新しいモデルからLEの重要な変化まで、アップデートの急流を解き放ちました

Shopify CEOのTobiLütkeの最近のメモは、AIの能力がすべての従業員にとって基本的な期待であると大胆に宣言し、会社内の重大な文化的変化を示しています。 これはつかの間の傾向ではありません。これは、pに統合された新しい運用パラダイムです

導入 Openaiは、待望の「Strawberry」アーキテクチャに基づいて新しいモデルをリリースしました。 O1として知られるこの革新的なモデルは、推論能力を強化し、問題を通じて考えられるようになりました

導入 鮮やかな絵画や彫刻に囲まれたアートギャラリーを歩くことを想像してください。さて、各ピースに質問をして意味のある答えを得ることができたらどうでしょうか?あなたは尋ねるかもしれません、「あなたはどんな話を言っていますか?

私のコラムに新しいかもしれない人のために、具体化されたAI、AI推論、AIのハイテクブレークスルー、AIの迅速なエンジニアリング、AIのトレーニング、AIのフィールディングなどのトピックなど、全面的なAIの最新の進歩を広く探求します。

SQLの変更テーブルステートメント:データベースに列を動的に追加する データ管理では、SQLの適応性が重要です。 その場でデータベース構造を調整する必要がありますか? Alter Tableステートメントはあなたの解決策です。このガイドの詳細は、コルを追加します
