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

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 までご連絡ください。
ロボット工学者になる方法は?ロボット工学者になる方法は?Apr 15, 2025 am 09:41 AM

ロボット工学:急速に拡大するフィールドでのやりがいのあるキャリアパス ロボット工学の分野は、爆発的な成長を経験しており、多くのセクターにわたって革新を促進し、日常生活を送っています。 自動製造から医療ロボットや自動運転車まで、

Excelで複製を削除する方法は? - 分析VidhyaExcelで複製を削除する方法は? - 分析VidhyaApr 15, 2025 am 09:20 AM

データの整合性:正確な分析のためにExcelで重複を削除します クリーンデータは、効果的な意思決定には非常に重要です。 Excelスプレッドシートの複製エントリは、エラーや信頼できない分析につながる可能性があります。このガイドは、DUPを簡単に削除する方法を示しています

トップ10の電話インタビューのヒント - 分析Vidhyaトップ10の電話インタビューのヒント - 分析VidhyaApr 15, 2025 am 09:19 AM

電話インタビューの芸術をマスターする:成功へのあなたのガイド 電話インタビューを成功させると、求人プロセスの次の段階に進む可能性が大幅に増加する可能性があります。 この重要な第一印象は、多くの場合唯一のfacです

統計学者になる方法は?統計学者になる方法は?Apr 15, 2025 am 09:15 AM

導入 ヘルスケア、金融、スポーツなどの分野で自分とあなたの会社のために情報に基づいた決定を下す力を持っていることを想像してください。それが統計学者の役割です。 組織でのデータの使用の増加に伴い、統計学者の需要

AIはどのように機能しますか? - 分析VidhyaAIはどのように機能しますか? - 分析VidhyaApr 15, 2025 am 09:14 AM

人工知能:包括的なガイド テクノロジーにより、マシンが私たちの好みを理解し、私たちのニーズを予測し、過去の相互作用から学び、より良い結果を提供する世界を想像することができました。これはサイエンスフィクションではありません。その

Pictogramグラフとは何ですか? - 分析VidhyaPictogramグラフとは何ですか? - 分析VidhyaApr 15, 2025 am 09:09 AM

導入 データ分析の世界では、効果的なコミュニケーションが重要です。 Pictogramグラフは強力なソリューションを提供し、視覚的に魅力的で簡単に消化可能な形式で情報を提示します。複雑なチャートや図、絵文字も異なります

llama-3.1-storm-8b:8b LLMはメタとエルメスを上回るllama-3.1-storm-8b:8b LLMはメタとエルメスを上回るApr 15, 2025 am 09:08 AM

Llama 3.1 Storm 8b:効率的な言語モデルのブレークスルー 効率的で正確な言語モデルの追求により、80億パラメーターモデルカテゴリの大幅な進歩であるLlama 3.1 Storm 8Bの開発が発生しました。 これは洗練されています

Gitのインストール方法は? - 分析VidhyaGitのインストール方法は? - 分析VidhyaApr 15, 2025 am 09:07 AM

Git:バージョン制御とコラボレーションへの本質的なガイド GITは、開発者にとって重要なツールであり、プロジェクトのコラボレーションとバージョン制御を簡素化します。 このガイドは、Linux、MacOS、およびWindにGitをインストールするための簡単な手順を提供します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール