llamaindexを使用したragでのメモリとハイブリッド検索
導入
検索拡張生成(RAG)パイプラインは、AIシステムがカスタムデータとどのように相互作用するかを改善していますが、ここで焦点を当てる2つの重要なコンポーネント:メモリとハイブリッド検索。この記事では、これらの強力な機能を統合することで、RAGシステムを単純な質問ツールからコンテキスト認識のインテリジェントな会話エージェントに変えることができる方法を探ります。
RAGのメモリにより、システムは会話履歴を維持および活用し、より首尾一貫したコンテキストに関連する相互作用を作成できます。一方、ハイブリッド検索は、ベクトル検索のセマンティック理解とキーワードベースのアプローチの精度と組み合わせて、RAGパイプラインの検索精度を大幅に向上させます。
この記事では、llamaindexを使用して、qdrantを使用してベクターストアとして、Googleのジェミニを大規模な言語モデルとして使用してメモリとハイブリッド検索の両方を実装します。
学習目標
- RAGシステムにおけるメモリの役割の実装理解と、文脈的に正確な応答の生成への影響を取得します。
- GoogleのGemini LLMおよびQdrant Fast EmbeddingsをLlamainDexフレームワーク内に統合することを学ぶことができます。これは、OpenAIがLlamainDexで使用されるデフォルトのLLMおよび埋め込みモデルであるため有用です。
- QDrant Vector Storeを使用してハイブリッド検索技術の実装を開発し、ベクトルとキーワード検索を組み合わせて、RAGアプリケーションの検索精度を強化します。
- QDRANTの機能をベクターストアとして調べて、組み込みのハイブリッド検索機能と高速埋め込み機能に焦点を当てています。
この記事は、データサイエンスブログソンの一部として公開されました。
目次
- QDRANTでのハイブリッド検索
- LlamainDexを使用したメモリとハイブリッド検索
- ステップ1:インストール要件
- ステップ2:LLMと埋め込みモデルを定義します
- ステップ3:データの読み込み
- ステップ4:ハイブリッド検索でQDRANTをセットアップします
- ステップ5:ドキュメントのインデックス付け
- ステップ6:インデックスクエリエンジンのクエリ
- ステップ7:メモリを定義します
- ステップ8:メモリを使用したチャットエンジンの作成
- ステップ9:メモリのテスト
- よくある質問
QDRANTでのハイブリッド検索
大規模なeコマースサイトのチャットボットを構築していると想像してください。ユーザーは、「最新のiPhoneモデルを見せて」と尋ねます。従来のベクトル検索では、意味的に同様の結果が得られる場合がありますが、正確な一致を見逃す可能性があります。一方、キーワード検索は剛性が高すぎる可能性があります。ハイブリッド検索はあなたに両方の最高の世界を提供します:
- ベクトル検索は、セマンティックの意味とコンテキストをキャプチャします
- キーワード検索により、特定の用語の精度が保証されます
QDRANTは、この記事で選択したベクトルストアであり、正当な理由です。
- QDRANTは、定義されたときにハイブリッドパラメーターを有効にするだけで、ハイブリッド検索の実装を簡単にします。
- モデルがONNX形式でロードされる場所を使用して、最適化された埋め込みモデルが付属しています。
- QDRANTの実装は、機密情報の保護を優先し、汎用性の高い展開オプションを提供し、応答時間を最小限に抑え、運用費を削減します。
LlamainDexを使用したメモリとハイブリッド検索
LlamainDexフレームワーク内でのメモリとハイブリッド検索の実際の実装に飛び込み、これらの機能が検索拡張生成(RAG)システムの機能をどのように強化するかを示します。これらのコンポーネントを統合することにより、履歴データと高度な検索手法の両方を効果的に利用する、よりインテリジェントでコンテキストを意識した会話エージェントを作成できます。
ステップ1:インストール要件
さて、これを段階的に分解しましょう。 QDRANTからファストメイド、GoogleのGeminiモデル、QDRANT Vector Store、LlamainDex、QDRANT Vector Storeを使用します。これらのライブラリがインストールされていることを確認してください。
!ピップインストールllama-index llama-index-llms-gemini lalama-index-vector-stores-qdrant astembed !ピップインストールllama-index-embeddings-fastembed
ステップ2:LLMと埋め込みモデルを定義します
まず、依存関係をインポートして、APIキーを設定しましょう。
OSをインポートします GetPass Import getPassから llama_index.llms.geminiインポートGeminiから llama_index.embeddings.fastembed Import fastembededdingから google_api_key = getPass( "gemini apiを入力:") os.environ ["google_api_key"] = google_api_key llm = gemini()#gemini 1.5フラッシュ embed_model = fastembedembeding()
次に、サンプルユーザークエリでそのLLMを実行することにより、APIが現在定義されているかどうかをテストしましょう。
llm_response = llm.complete( "1つのピースがいつ始まったのか?")。テキスト print(llm_response)
Llamaindexでは、OpenAIはデフォルトのLLMおよび埋め込みモデルであり、LlamainDex Coreから設定を定義する必要があることをオーバーライドします。ここでは、LLMと埋め込みモデルの両方をオーバーライドする必要があります。
llama_index.coreインポート設定から settings.llm = llm settings.embed_model = embed_model
ステップ3:データの読み込み
この例では、データフォルダーにPDFがあると仮定しましょう。LlamainDexのSimpleDirectoryリーダーを使用してデータフォルダーをロードできます。
llama_index.coreからImport SimpledirectoryReaderから documents = simpledirectoryreader( "./ data/")。load_data()
ステップ4:ハイブリッド検索でQDRANTをセットアップします
QDRANTVectorStoreインスタンスを定義し、この例ではメモリに設定する必要があります。また、QDRANTクライアントをクラウドサービスまたはLocalHostで定義することもできますが、メモリの記事では、コレクション名の定義を行う必要があります。
これにより、qdrantのハイブリッド検索機能を使用できるため、enable_hybrid = trueを確認してください。データフォルダーには、エージェントに関する研究論文にPDFが含まれているため、コレクション名は「Paper」です。
llama_index.coreからvectorstoreindex、storagecontextからインポート llama_index.vector_stores.qdrantインポートqdrantvectorstoreから qdrant_clientをインポートします client = qdrant_client.qdrantclient( location = ":memory:"、 )) vector_store = qdrantvectorStore( collection_name = "Paper"、 クライアント=クライアント、 enable_hybrid = true、#ハイブリッド検索が行われます batch_size = 20、 ))
ステップ5:ドキュメントのインデックス付け
ラグシステムにメモリとハイブリッド検索を実装することで、よりインテリジェントでコンテキストを作成しました。
Storage_context = storagecontext.from_defaults(vector_store = vector_store) index = vectorStoreIndex.from_documents( 文書、 Storage_Context = store_context、 ))
ステップ6:インデックスクエリエンジンのクエリ
インデックス作成は、LlamainDexのレトリバーとジェネレーターチェーンを定義している部分です。ドキュメントコレクションで各ドキュメントを処理し、各ドキュメントのコンテンツの埋め込みを生成します。次に、これらの埋め込みをQDRANTベクターストアに保管します。効率的な検索を可能にするインデックス構造を作成します。クエリエンジンを定義しながら、ハイブリッドでクエリモードを必ず確認してください。
query_engine = index.as_query_engine( vector_store_query_mode = "hybrid" )) Response1 = query_engine.query( "人生の意味は何ですか?") print(Response1) response2 = query_engine.query( "2文以内の要約を与える")) print(Response2)
上記のクエリエンジンでは、コンテキスト内にある2つのクエリを実行し、もう1つはコンテキストの外側を実行します。これが私たちが得た出力です:
出力 #応答-1 提供されたテキストは、自律エージェントでの計画のための大規模な言語モデル(LLM)の使用に焦点を当てています。 それは人生の意味について議論していません。 #応答-2 このドキュメントでは、複雑なタスクを解決するためのエージェントとしての大規模な言語モデル(LLM)の使用を調査します。 2つの主なアプローチに焦点を当てています。 分解ファーストメソッド、 実行前にタスクがサブタスクに分解される場合、および フィードバックに基づいて分解を動的に調整するインターリーブ分解方法。
ステップ7:メモリを定義します
チャットボットはうまく機能し、改善された応答を提供していますが、複数の相互作用にわたってコンテキストの認識が不足しています。これは、メモリが写真に入る場所です。
llama_index.core.memoryからchatmemorybufferをインポートします メモリ= chatmemorybuffer.from_defaults(token_limit = 3000)
ステップ8:メモリを使用したチャットエンジンの作成
ハイブリッド検索とメモリの両方を使用するチャットエンジンを作成します。 lamaindexでは、外部データまたは外部データがある場合、ragベースのアプリケーションの場合は、チャットモードがコンテキストであることを確認します。
chat_engine = index.as_chat_engine( chat_mode = "context"、 メモリ=メモリ、 System_prompt =( 「あなたはユーザーの質問に答えるAIアシスタントです」 )、、 ))
ステップ9:メモリのテスト
いくつかのクエリを実行して、メモリが期待どおりに機能しているかどうかを確認しましょう。
iPython.displayからインポートマークダウン、ディスプレイ check1 = chat_engine.chat( "2文以内の要約を与える") check2 = chat_engine.chat( "要約を続け、前の2文にもう1つの文を追加する")) check3 = chat_engine.chat( "上記の要約を詩にする"))
結論
メモリとハイブリッド検索を検索拡張生成(RAG)システムに統合することで、能力が大幅に向上する方法を調査しました。 QDRANTをベクトルストアとしてQDRANTと大規模な言語モデルとしてGoogleのGeminiを使用することにより、ハイブリッド検索がベクターとキーワードベースの検索の強度を組み合わせてより正確な結果を提供する方法を実証しました。メモリを追加すると、コンテキストの理解がさらに向上し、チャットボットが複数の相互作用にわたってコヒーレントな応答を提供できます。一緒に、これらの機能は、よりインテリジェントでコンテキスト認識システムを作成し、複雑なAIアプリケーションに対してラグパイプラインをより効果的にします。
キーテイクアウト
- RAGパイプラインでのメモリコンポーネントの実装により、チャットボットのコンテキスト認識と、複数のインタラクション全体で一貫した会話を維持する能力が大幅に向上します。
- QDRANTを使用したハイブリッド検索のベクトルストアとしての統合。ベクターとキーワード検索の両方の強度を組み合わせて、幻覚のリスクを最小限に抑えるRAGシステムの検索精度と関連性を改善します。免責事項、幻覚を完全に除去するわけではありません。むしろリスクを軽減します。
- 会話履歴を効率的に管理するためのLlamaindexのChatMemoryBufferの利用、コンテキストの保持と計算リソースのバランスをとる構成可能なトークン制限。
- LlamainDexフレームワーク内にLLMおよび埋め込みプロバイダーとしてGoogleのGeminiモデルを組み込むと、さまざまなAIモデルと埋め込み技術に対応するLlamainDexの柔軟性が示されています。
よくある質問
Q 1。ハイブリッド検索とは何ですか?なぜそれがぼろきれで重要なのですか?A.ハイブリッド検索は、ベクトル検索のセマンティック理解のための検索と精度のキーワード検索を組み合わせます。これにより、システムがコンテキストと正確な用語の両方を考慮し、特に複雑なデータセットでより良い検索結果につながることにより、結果の精度が向上します。
Q2。なぜragでハイブリッド検索にqdrantを使用するのですか?A. QDRANTは、箱から出してハイブリッド検索をサポートし、高速埋め込みに最適化されており、スケーラブルです。これにより、RAGシステムでベクターとキーワードベースの両方の検索を実装し、大規模なパフォーマンスを確保するための信頼できる選択肢になります。
Q3。メモリはRAGシステムをどのように改善しますか?A.ラグシステムのメモリにより、会話履歴の保持が可能になり、チャットボットが相互作用全体でよりコヒーレントでコンテキスト的に正確な応答を提供し、ユーザーエクスペリエンスを大幅に向上させることができます。
Q4。RAGアプリケーションにクラウドベースのAPIの代わりにローカルモデルを使用できますか?A.はい、OpenAIなどのクラウドベースのAPIを使用する代わりに、ローカルLLM(OllamaやHuggingfaceなど)を実行できます。これにより、外部サーバーにアップロードせずにデータを完全に制御することができます。これは、プライバシーに敏感なアプリケーションの一般的な関心事です。
この記事に示されているメディアは、Analytics Vidhyaが所有しておらず、著者の裁量で使用されています。
以上がllamaindexを使用したragでのメモリとハイブリッド検索の詳細内容です。詳細については、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)

ホットトピック











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

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

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

導入 Mistralは、最初のマルチモーダルモデル、つまりPixtral-12B-2409をリリースしました。このモデルは、Mistralの120億個のパラメーターであるNemo 12bに基づいて構築されています。このモデルを際立たせるものは何ですか?これで、画像とTexの両方を採用できます

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

問題のあるベンチマーク:ラマのケーススタディ 2025年4月上旬、MetaはLlama 4スイートのモデルを発表し、GPT-4oやClaude 3.5 Sonnetなどの競合他社に対して好意的に位置付けた印象的なパフォーマンスメトリックを誇っています。ラウンクの中心

エージェントAIに取り組んでいる間、開発者は速度、柔軟性、リソース効率の間のトレードオフをナビゲートすることがよくあります。私はエージェントAIフレームワークを探索していて、Agnoに出会いました(以前はPhi-でした。

ビデオゲームは不安を緩和したり、ADHDの子供を焦点を合わせたり、サポートしたりできますか? ヘルスケアの課題が世界的に急増しているため、特に若者の間では、イノベーターはありそうもないツールであるビデオゲームに目を向けています。現在、世界最大のエンターテイメントインダスの1つです
