ホームページ > テクノロジー周辺機器 > AI > ラングチェーンのレトリーバーのための3つの高度な戦略

ラングチェーンのレトリーバーのための3つの高度な戦略

Jennifer Aniston
リリース: 2025-03-19 11:16:09
オリジナル
312 人が閲覧しました

Langchainの検索:ドキュメントへの効率的かつ柔軟なアクセス

Langchainフレームワークの検索者は重要な役割を果たし、構造化されていないクエリに基づいてドキュメントを返すための柔軟なインターフェイスを提供します。 Vectorデータベースとは異なり、検索者はドキュメントを保存する必要はありません。ベクトルデータベースはレットリアの基礎として機能することができますが、さまざまなタイプのレットリアがあり、それぞれが特定のユースケースにカスタマイズ可能です。

ラングチェーンのレトリーバーのための3つの高度な戦略

学習目標

  • Langchainにおける検索者の重要な役割を理解し、さまざまなアプリケーションのニーズを満たすために効率的で柔軟なドキュメント取得を実現します。
  • Langchainの検索者(VectorデータベースからマルチQueries、コンテキスト圧縮まで)が関連情報へのアクセスを簡素化する方法を学びます。
  • このガイドは、Langchainのさまざまな検索者タイプをカバーし、クエリ処理とデータアクセスを最適化するために各検索者がどのようにカスタマイズされているかを説明します。
  • Langchainの検索機能を掘り下げ、ドキュメントの検索の精度と関連性を高めるためのツールをチェックしてください。
  • Langchainのカスタムレトリバーが特定のニーズにどのように適応するかを学び、開発者が非常にレスポンシブなアプリケーションを作成できるようにします。
  • 言語モデルとベクトルデータベースを統合して、より正確で効率的な検索結果を取得するLangchainの検索手法を調べます。

目次

  • 学習目標
  • Langchainの検索者
  • Vectorデータベースを検索者として使用します
  • Multiquerretrieverを使用します
    • サンプルベクトルデータベースを作成します
    • 簡単な使用
    • カスタムヒント
  • コンテキスト圧縮を使用して検索する方法
    • コンテキスト圧縮の概要
  • カスタム検索者を作成します
    • インタフェース
  • 結論は
  • よくある質問

Langchainの検索者

検索者は、入力として文字列クエリを受信し、ドキュメントオブジェクトのリストを出力します。このメカニズムにより、アプリケーションは関連情報を効率的に取得し、大規模なデータセットまたは知識ベースとの高度な相互作用を可能にします。

  1. 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})
ログイン後にコピー

出力:

ラングチェーンのレトリーバーのための3つの高度な戦略

Vectorデータベースを検索者として使用すると、関連情報への効率的なアクセスを保証することにより、ドキュメントの取得を強化できます。

  1. 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)#取得した一意のドキュメントの数
ログイン後にコピー

出力:

ラングチェーンのレトリーバーのための3つの高度な戦略

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)#取得した一意のドキュメントの数
ログイン後にコピー

出力

ラングチェーンのレトリーバーのための3つの高度な戦略

MultiquerreTrieverを使用すると、より効率的な検索プロセスを実現し、ユーザークエリに基づいて多様で包括的な結果を確保できます。

  1. コンテキスト圧縮を使用して検索する方法

特に、ユーザーが行う特定のクエリについてデータの摂取がわからない場合、ドキュメントの大規模なコレクションから関連情報を取得することは困難です。多くの場合、貴重な洞察は長い文書に隠されており、その結果、言語モデル(LLM)への非効率的で費用のかかる呼び出しが行われ、理想よりも応答性が低くなります。コンテキスト圧縮は、検索プロセスを改善し、関連情報がユーザーのクエリに基づいてのみ返されるようにすることにより、この問題を解決します。この圧縮には、単一のドキュメントの内容を減らし、無関係なドキュメントを除外することが含まれます。

コンテキスト圧縮の概要

コンテキスト圧縮検索者は、基本的な検索者をドキュメントコンプレッサーと統合することにより実行されます。この方法では、ドキュメント全体を返すものではありませんが、クエリによって提供されるコンテキストに基づいてドキュメントを圧縮します。この圧縮には、単一のドキュメントの内容を減らし、無関係なドキュメントを除外することが含まれます。

実装手順

  1. 基本検索者の初期化:最初に通常のベクトルストレージ検索者を設定します。たとえば、気候変動政策に関するニュース記事を検討してください。
 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()を初期化する
ログイン後にコピー
  1. 初期クエリを実行します:クエリを実行して、関連する情報と無関係な情報を含む可能性のある基本的なレトリバーによって返された結果を表示します。
 docs = retriever.invoke(「気候変動と戦うためにどのような行動が提案されていますか?」)
ログイン後にコピー
  1. コンテキスト圧縮を使用した強化された検索:基本的な検索者を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)
ログイン後にコピー

出力

ラングチェーンのレトリーバーのための3つの高度な戦略

この実装は、ユーザー入力に基づいてドキュメントを取得する簡単な方法を提供し、Langchainのカスタム検索者のコア機能を示しています。

結論は

Langchainフレームワークでは、検索者は、さまざまなドキュメントタイプとユースケースで関連情報に効果的にアクセスできる強力なツールです。さまざまな検索者タイプ(ベクトルストレージレトリバー、マルチクリーレットリリーバー、コンテキスト圧縮リトリーバーなど)を理解および実装することにより、開発者はアプリケーションの特定のニーズに基づいてドキュメント取得をカスタマイズできます。

各レトリバータイプには、マルチクリーレットリリーバーの使用からコンテキスト圧縮の使用まで、応答を最適化することまで、独自の利点があります。さらに、カスタム検索者を作成すると、組み込みのオプションが満たされない可能性のある特別な要件に対応するための柔軟性が高まります。これらの検索手法を習得することで、開発者は言語モデルと大規模なデータセットの可能性を活用するより効率的で応答性の高いアプリケーションを構築できます。

よくある質問

Q1。 A1検索者の主な機能は、クエリに基づいて関連するドキュメントを取得することです。これにより、ドキュメント自体を保存せずに、アプリケーションが大規模なデータセットで必要な情報に効果的にアクセスできます。

Q2。 A2は、類似性ベースの検索を可能にする方法でドキュメントを保存するために使用されます。ベクトルデータベースは検索者の一部になりますが、検索者のタスクは関連情報の取得に焦点を当てています。

Q3。 A3言語モデルを使用して複数のクエリのバリエーションを作成することにより、MultiquerreTrieverが検索結果を改善します。この方法は、さまざまな文言の問題に関連する可能性のあるより広い範囲のドキュメントをキャプチャし、それにより検索情報の豊かさを高めます。

Q4。 A4コンテキストは、ドキュメントのコンテンツを関連する部品のみに削減し、無関係な情報を除外することにより、検索結果を最適化します。これは、完全なドキュメントには無関係な詳細が含まれており、リソースを節約し、より集中化された応答を提供する可能性があるため、大規模なコレクションで特に役立ちます。

Q5。 a5マルチクリーレットレバーをセットアップするには、ドキュメントストレージのためのベクトルデータベース、複数のクエリの視点を生成するための言語モデル(LLM)、およびクエリ生成をさらに最適化するためのオプションのカスタムプロンプトテンプレートが必要です。

以上がラングチェーンのレトリーバーのための3つの高度な戦略の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート