ヘイスタックフレームワークを使用してエージェントQAラグシステムを構築する方法
製品に関する質問に答える必要があるカスタマーサポートAIを構築していると想像してください。ドキュメントから情報を取得する必要がある場合もあれば、最新の更新をWebで検索する必要がある場合もあります。エージェントRAGシステムは、このようなタイプの複雑なAIアプリケーションで役立ちます。それらは、あなたの内部ドキュメントを知っているだけでなく、Webを検索する時期を決定するスマートな研究助手と考えてください。このガイドでは、Haystackフレームワークを使用してエージェントQAラグシステムを構築するプロセスを進めます。
学習目標- エージェントLLMとは何かを知って、それがRAGシステムとどのように異なるかを理解してください。
- エージェントLLMアプリケーションのHaystackフレームワークを慣れさせます テンプレートから迅速な構築のプロセスを理解し、さまざまなプロンプトを一緒に結合する方法を学びます。
- haystackでChromadbを使用して埋め込みを作成する方法を学びます 埋め込みから世代へと完全なローカル開発システムをセットアップする方法を学びましょう。
- この記事は、
データサイエンスブログの一部として公開されました。 目次 エージェントLLMとは何ですか?ブロックコンポーネント
pipeline
- ノード
- 接続グラフ
-
- Routerを実装
- プロンプトテンプレートを作成
- クエリpipeline
- 描画パイプライングラフを描画します
- 頻繁に聞かれる質問エージェントLLMとは何ですか?
- エージェントLLMは、意思決定を行い、タスクの理解に基づいて行動を起こすことができるAIシステムです。主にテキスト応答を生成する従来のLLMとは異なり、エージェントLLMはさらに多くのことを行うことができます。
- 最小限の人間の入力で考え、計画し、行動することができます。知識を評価し、より多くの情報や外部ツールが必要なときを認識します。 エージェントLLMS
- 静的データやインデックス付き知識に依存しないでください。代わりに、どのソースを信頼するか、どのように最良の洞察を収集するかを決定します。
- このタイプのシステムは、ジョブに適したツールを選択することもできます。ドキュメントを取得するか、計算を実行するか、タスクを自動化する必要があるかを決定できます。それらを際立たせているのは、複雑な問題をステップに分解し、それらを独立して実行する能力であるため、研究、分析、ワークフローの自動化に価値があります。
rag vsエージェントラグ
従来のRAGシステムは線形プロセスに従います。 クエリが受信されると、システムは最初にリクエスト内の重要な要素を識別します。次に、知識ベースを検索し、正確な応答を設計するのに役立つ関連情報をスキャンします。関連する情報またはデータが取得されると、システムはそれを処理して意味のあるコンテキストに関連する応答を生成します。
以下の図でプロセスを簡単に理解できます。クエリ要件の評価
複数の知識ソース間を決定
- さまざまなソースからの情報を潜在的に組み合わせる
- 応答戦略について自律的な決定を下す
- ソースに貢献した応答を提供
- 重要な違いは、固定された検索パターンに従うのではなく、クエリを処理する方法についてインテリジェントな決定を下すシステムの能力にあります。 Haystackフレームワークコンポーネントの理解
- Haystackは、生産対応のAI、LLMアプリケーション、RAGパイプライン、および検索システムを構築するためのオープンソースフレームワークです。 LLMアプリケーションを構築するための強力で柔軟なフレームワークを提供します。これにより、Huggingface、Openai、Cohere、Mistral、Local Ollamaなどのさまざまなプラットフォームからモデルを統合できます。また、AWS Sagemaker、Bedrock、Azure、GCPなどのクラウドサービスにモデルを展開することもできます。
HayStackは、効率的なデータ管理のための堅牢なドキュメントストアを提供します。また、アプリケーションのすべてのレイヤーにわたってスムーズなパフォーマンスを確保するための評価、監視、データ統合のための包括的なツールセットが付属しています。また、さまざまなサービスプロバイダーからの新しいサービス統合を定期的に行う強力なコミュニティコラボレーションもあります。
HayStackを使用して何を構築できますか?
堅牢な取得と生成のテクニックを使用して、データをぼろぼろに進めるのは簡単です。
GPT-4、llama3.2、deepseek-r1。などの最新のGenaiモデルを使用するチャットボットとエージェント混合型(画像、テキスト、オーディオ、テーブル)の生成マルチモーダルの質問回答システム)知識ベース。 ドキュメントからの情報抽出または知識グラフの構築。
HayStack Building Blocks
- Haystackには、完全に機能するGenai LLMシステムの構築に関する2つの主要な概念があります。コンポーネントとパイプラインです。日本のアニメのキャラクターのぼろきれの簡単な例でそれらを理解しましょう
-
コンポーネント
コンポーネントは、Haystackのコアビルディングブロックです。ドキュメントの保存、ドキュメントの検索、テキスト生成、埋め込みなどのタスクを実行できます。 Haystackには、インストール後に直接使用できるコンポーネントがたくさんあります。また、Pythonクラスを作成して独自のコンポーネントを作成するためのAPIも提供します。
パートナー企業とコミュニティからの統合のコレクションがあります。ライブラリをインストールし、ollama を設定します
$ pip install haystack-ai ollama-haystack # On you system download Ollama and install LLM ollama pull llama3.2:3b ollama pull nomic-embed-text # And then start ollama server ollama serve
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーいくつかのコンポーネントをインポート
ドキュメントとドキュメントストアを作成しますfrom haystack import Document, Pipeline from haystack.components.builders.prompt_builder import PromptBuilder from haystack.components.retrievers.in_memory import InMemoryBM25Retriever from haystack.document_stores.in_memory import InMemoryDocumentStore from haystack_integrations.components.generators.ollama import OllamaGenerator
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーpipelinedocument_store = InMemoryDocumentStore() documents = [ Document( content="Naruto Uzumaki is a ninja from the Hidden Leaf Village and aspires to become Hokage." ), Document( content="Luffy is the captain of the Straw Hat Pirates and dreams of finding the One Piece." ), Document( content="Goku, a Saiyan warrior, has defended Earth from numerous powerful enemies like Frieza and Cell." ), Document( content="Light Yagami finds a mysterious Death Note, which allows him to eliminate people by writing their names." ), Document( content="Levi Ackerman is humanity’s strongest soldier, fighting against the Titans to protect mankind." ), ]
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーパイプラインを
で定義できますpipe = Pipeline() pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store)) pipe.add_component("prompt_builder", PromptBuilder(template=template)) pipe.add_component( "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434") ) pipe.connect("retriever", "prompt_builder.documents") pipe.connect("prompt_builder", "llm")
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーimage_param = { "format": "img", "type": "png", "theme": "forest", "bgColor": "f2f3f4", } pipe.show(params=image_param)
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピー- 柔軟なコンポーネントアレンジメント
- 簡単なデバッグと監視 スケーラブルな処理アーキテクチャ
- ノード
例
pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store)) pipe.add_component("prompt_builder", PromptBuilder(template=template)) pipe.add_component( "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434") )
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーアニメパイプラインの接続グラフ
image_param = { "format": "img", "type": "png", "theme": "forest", "bgColor": "f2f3f4", } pipe.show(params=image_param)
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピー入力/出力関係を管理
並列処理を有効にします
柔軟な処理経路を作成します- プロンプトを使用してアニメナレッジベースを照会できます。
- プロンプトテンプレートを作成
- このプロンプトは、ドキュメントベースから情報を取得する回答を提供します。 プロンプトとレトリーバーを使用した クエリ
応答:
template = """ Given only the following information, answer the question. Ignore your own knowledge. Context: {% for document in documents %} {{ document.content }} {% endfor %} Question: {{ query }}? """
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピー高等二次物理学のための質問回答ragプロジェクト
使用します。
local llama3.2:3bまたはllama3.2:1b
-
埋め込みストレージ
- chromadb ローカル埋め込みのNOMIC Embed Text Model
- duckduckgo Web検索の検索またはTavily Search(オプション)
- 無料の完全にローカライズされたシステムを使用しています。 開発者環境のセットアップ
conda env python 3.12
をセットアップします$ pip install haystack-ai ollama-haystack # On you system download Ollama and install LLM ollama pull llama3.2:3b ollama pull nomic-embed-text # And then start ollama server ollama serve
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーqagent
。という名前のプロジェクトディレクトリを作成しますfrom haystack import Document, Pipeline from haystack.components.builders.prompt_builder import PromptBuilder from haystack.components.retrievers.in_memory import InMemoryBM25Retriever from haystack.document_stores.in_memory import InMemoryDocumentStore from haystack_integrations.components.generators.ollama import OllamaGenerator
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピープロジェクトにはプレーンPythonファイルを使用したり、プロジェクトにJupyterノートブックを使用したりできます。プレーンPythonファイルを使用します プロジェクトルートに
main.pyファイルを作成します。document_store = InMemoryDocumentStore() documents = [ Document( content="Naruto Uzumaki is a ninja from the Hidden Leaf Village and aspires to become Hokage." ), Document( content="Luffy is the captain of the Straw Hat Pirates and dreams of finding the One Piece." ), Document( content="Goku, a Saiyan warrior, has defended Earth from numerous powerful enemies like Frieza and Cell." ), Document( content="Light Yagami finds a mysterious Death Note, which allows him to eliminate people by writing their names." ), Document( content="Levi Ackerman is humanity’s strongest soldier, fighting against the Titans to protect mankind." ), ]
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピー必要なライブラリのインポート
システムパッケージ
Core Haystackコンポーネント
埋め込みコンポーネントのChromadb- ローカル推論のためのオラマコンポーネント
- およびWeb検索のためのDuckduckgo
ドキュメントストアは最も重要です。ここでは、入力のために埋め込みを保存します。具体化ストアにpipe = Pipeline() pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store)) pipe.add_component("prompt_builder", PromptBuilder(template=template)) pipe.add_component( "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434") ) pipe.connect("retriever", "prompt_builder.documents") pipe.connect("prompt_builder", "llm")
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーchromadbimage_param = { "format": "img", "type": "png", "theme": "forest", "bgColor": "f2f3f4", } pipe.show(params=image_param)
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーを使用します。以前の例でわかるように、迅速な取得のためにインメモリドキュメントストアを使用します。システムを開始します。pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store)) pipe.add_component("prompt_builder", PromptBuilder(template=template)) pipe.add_component( "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434") )
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーimage_param = { "format": "img", "type": "png", "theme": "forest", "bgColor": "f2f3f4", } pipe.show(params=image_param)
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーソリューションは、松ぼっくり、織り、ポストグレスベクターDB、ChromADBなどのベクトルデータベースです。 ChromAdbを使用しています。これは、無料でオープンソース、使いやすく、堅牢であるためです。template = """ Given only the following information, answer the question. Ignore your own knowledge. Context: {% for document in documents %} {{ document.content }} {% endfor %} Question: {{ query }}? """
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーwesting_pathは、埋め込みを保存したい場所です。
pdfファイルパス
query = "How Goku eliminate people?" response = pipe.run({"prompt_builder": {"query": query}, "retriever": {"query": query}}) print(response["llm"]["replies"])
ログイン後にコピーログイン後にコピーPDFファイルで構成されるデータフォルダーからファイルのリストを作成します。 ドキュメント前処理コンポーネント
クリーナー、スプリッター、ファイルコンバーターなどのHayStackの組み込みドキュメントプリプロセッサを使用し、ライターを使用してデータをストアに書き込みます。 クリーナー:
ドキュメントから余分なスペース、繰り返しの行、空の線などがきれいになります。スプリッター:$conda create --name agenticlm python=3.12 $conda activate agenticlm
ログイン後にコピー単語、文章、パラ、ページなど、さまざまな方法でドキュメントを分割します。
ファイルコンバーター:PYPDFを使用して、PDFをドキュメントに変換します。
$ pip install haystack-ai ollama-haystack # On you system download Ollama and install LLM ollama pull llama3.2:3b ollama pull nomic-embed-text # And then start ollama server ollama serve
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーライター:ドキュメントを保存する場所にドキュメントを保存し、ドキュメントを重複させるために、以前のドキュメントで上書きします。
ドキュメントインデックスのために埋め込みを設定します。from haystack import Document, Pipeline from haystack.components.builders.prompt_builder import PromptBuilder from haystack.components.retrievers.in_memory import InMemoryBM25Retriever from haystack.document_stores.in_memory import InMemoryDocumentStore from haystack_integrations.components.generators.ollama import OllamaGenerator
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーEmbedder:NOMIC EMBED TEXT 非常に効果的で無料のinhuggingfaceとollamaです。 インデックスパイプラインを実行する前に、端末を開き、以下を入力して、ノミック埋め込みテキストとllama3.2:3bモデルをオラマモデルストア
コマンドを入力してオラマを開始します
ollama servedocument_store = InMemoryDocumentStore() documents = [ Document( content="Naruto Uzumaki is a ninja from the Hidden Leaf Village and aspires to become Hokage." ), Document( content="Luffy is the captain of the Straw Hat Pirates and dreams of finding the One Piece." ), Document( content="Goku, a Saiyan warrior, has defended Earth from numerous powerful enemies like Frieza and Cell." ), Document( content="Light Yagami finds a mysterious Death Note, which allows him to eliminate people by writing their names." ), Document( content="Levi Ackerman is humanity’s strongest soldier, fighting against the Titans to protect mankind." ), ]
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーollamadocumentembedder
コンポーネントを埋め込むにはドキュメントを埋め込みますが、テキスト文字列を埋めたい場合は、olamatextembedder。
インデックス作成パイプラインの作成pipe = Pipeline() pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store)) pipe.add_component("prompt_builder", PromptBuilder(template=template)) pipe.add_component( "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434") ) pipe.connect("retriever", "prompt_builder.documents") pipe.connect("prompt_builder", "llm")
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピー以前のおもちゃのぼろきれの例と同様に、パイプラインクラスを開始することから始めます。 次に、コンポーネントをパイプラインに1つずつ追加します
パイプラインにコンポーネントを追加しても注文は気にしないため、任意の順序でコンポーネントを追加できます。しかし、接続することが重要です。ここでは、コンポーネントを接続する方法がパイプラインにパイプラインをどのように流れるかをパイプラインに伝えるため、注文することが重要です。それは、どの順序で、または配管品を購入する場所から重要ではありませんが、それらをまとめる方法はあなたがあなたの水を得るかどうかを決定するでしょう。image_param = { "format": "img", "type": "png", "theme": "forest", "bgColor": "f2f3f4", } pipe.show(params=image_param)
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーコンバーターはPDFを変換し、洗浄のために掃除するように送信します。次に、クリーナーがクリーニングされたドキュメントをスプリッターに送信してチャンクします。その後、これらのチャンクはベクトル化のために埋め込まれたものに渡され、最後の埋め込まれたものはこれらの埋め込みをライターに渡してストレージのために引き渡します。
理解!わかりました、データフローを検査できるように、インデックスの視覚的なグラフを教えてください。pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store)) pipe.add_component("prompt_builder", PromptBuilder(template=template)) pipe.add_component( "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434") )
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーインデックス作成パイプラインを描画します
image_param = { "format": "img", "type": "png", "theme": "forest", "bgColor": "f2f3f4", } pipe.show(params=image_param)
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーインデックス作成パイプラインのグラフ
私は今、あなたがヘイスタックパイプラインの背後にあるアイデアを完全に把握していると思います。配管工に感謝します。
routertemplate = """ Given only the following information, answer the question. Ignore your own knowledge. Context: {% for document in documents %} {{ document.content }} {% endfor %} Question: {{ query }}? """
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーを実装します
次に、異なるパスを通してデータをルーティングするためにルーターを作成する必要があります。この場合、特定の条件でルーティングジョブを行う条件付きルーターを使用します。条件付きルーターは、コンポーネントの出力に基づいて条件を評価します。さまざまなパイプラインブランチを介してデータフローを導き、動的な意思決定を可能にします。また、堅牢なフォールバック戦略もあります
$ pip install haystack-ai ollama-haystack # On you system download Ollama and install LLM ollama pull llama3.2:3b ollama pull nomic-embed-text # And then start ollama server ollama serve
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーシステムが埋め込みストアのコンテキストからNO_ANSWERが返信すると、インターネットから関連するデータを収集するためにWeb検索ツールに移動します。
Web検索では、DuckDuckgo APIまたはTavilyを使用します。ここではDuckDuckgoを使用しました。from haystack import Document, Pipeline from haystack.components.builders.prompt_builder import PromptBuilder from haystack.components.retrievers.in_memory import InMemoryBM25Retriever from haystack.document_stores.in_memory import InMemoryDocumentStore from haystack_integrations.components.generators.ollama import OllamaGenerator
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピープロンプトテンプレートを作成
テンプレートからプロンプトを構築するためにHayStack PromptBuilderコンポーネントを使用します
最初に、qa
のプロンプトを作成しますさて、LLMからNO_Answerを取得した後の2番目のプロンプトで、システムはインターネットからコンテキストを収集するためにWeb検索ツールを使用します。 duckduckgoプロンプトテンプレートdocument_store = InMemoryDocumentStore() documents = [ Document( content="Naruto Uzumaki is a ninja from the Hidden Leaf Village and aspires to become Hokage." ), Document( content="Luffy is the captain of the Straw Hat Pirates and dreams of finding the One Piece." ), Document( content="Goku, a Saiyan warrior, has defended Earth from numerous powerful enemies like Frieza and Cell." ), Document( content="Light Yagami finds a mysterious Death Note, which allows him to eliminate people by writing their names." ), Document( content="Levi Ackerman is humanity’s strongest soldier, fighting against the Titans to protect mankind." ), ]
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーシステムがWeb検索に移動し、クエリに応答しようとするようになります。
HayStackのPromptBuilderを使用してプロンプトを作成しますpipe = Pipeline() pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store)) pipe.add_component("prompt_builder", PromptBuilder(template=template)) pipe.add_component( "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434") ) pipe.connect("retriever", "prompt_builder.documents") pipe.connect("prompt_builder", "llm")
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーヘイスタックプロンプトジョイナーを使用して、プロンプトのブランチに参加します。 クエリパイプラインを実装
クエリパイプラインは、埋め込みからコンテキストリソースを収集し、LLMまたはWeb検索ツールを使用してクエリに答えるクエリを埋め込みます。image_param = { "format": "img", "type": "png", "theme": "forest", "bgColor": "f2f3f4", } pipe.show(params=image_param)
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーインデックスパイプラインに似ています。
パイプラインの開始pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store)) pipe.add_component("prompt_builder", PromptBuilder(template=template)) pipe.add_component( "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434") )
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピークエリパイプラインにコンポーネントを追加
image_param = { "format": "img", "type": "png", "theme": "forest", "bgColor": "f2f3f4", } pipe.show(params=image_param)
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーRetriverは、prospt_builderのドキュメントにデータを送信しますtemplate = """ Given only the following information, answer the question. Ignore your own knowledge. Context: {% for document in documents %} {{ document.content }} {% endfor %} Question: {{ query }}? """
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピープロンプトビルダーは、他のプロンプトと参加するためにプロンプトジョイナーに移動します。
プロンプトジョイナーは、生成のためにデータをLLMに渡します。no_answerquery = "How Goku eliminate people?" response = pipe.run({"prompt_builder": {"query": query}, "retriever": {"query": query}}) print(response["llm"]["replies"])
ログイン後にコピーログイン後にコピーまたはnot.if
no_answer- にあるかどうかを確認します。
- Web検索は、クエリとしてデータをWeb検索プロンプトに送信します。 Web検索ドキュメントデータをWeb検索ドキュメントに送信します。
- Web検索プロンプトは、データをプロンプトジョイナーに送信します。 そして、プロンプトジョイナーは、回答生成のためにデータをLLMに送信します。
- 自分で見てみませんか?
- クエリパイプライングラフを描画
- クエリグラフ
-
私はそれが巨大なグラフであることを知っていますが、それは獣の腹の下で何が起こっているのかを正確に示します。
今、私たちの努力の果物を楽しむ時が来ました。
簡単にクエリするための関数を作成します
これは、回答生成のための簡単な単純な機能です。$ pip install haystack-ai ollama-haystack # On you system download Ollama and install LLM ollama pull llama3.2:3b ollama pull nomic-embed-text # And then start ollama server ollama serve
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーそれは1回限りの仕事です。インデックスをインデックスした後、この行にコメントする必要があります。そうしないと、本の再インデックスを開始します。from haystack import Document, Pipeline from haystack.components.builders.prompt_builder import PromptBuilder from haystack.components.retrievers.in_memory import InMemoryBM25Retriever from haystack.document_stores.in_memory import InMemoryDocumentStore from haystack_integrations.components.generators.ollama import OllamaGenerator
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーそして、ファイルの下部にクエリのためにドライバーコードを記述します
本の知識からの抵抗性に関する
mcqdocument_store = InMemoryDocumentStore() documents = [ Document( content="Naruto Uzumaki is a ninja from the Hidden Leaf Village and aspires to become Hokage." ), Document( content="Luffy is the captain of the Straw Hat Pirates and dreams of finding the One Piece." ), Document( content="Goku, a Saiyan warrior, has defended Earth from numerous powerful enemies like Frieza and Cell." ), Document( content="Light Yagami finds a mysterious Death Note, which allows him to eliminate people by writing their names." ), Document( content="Levi Ackerman is humanity’s strongest soldier, fighting against the Titans to protect mankind." ), ]
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピー本にない別の質問
outputpipe = Pipeline() pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store)) pipe.add_component("prompt_builder", PromptBuilder(template=template)) pipe.add_component( "llm", OllamaGenerator(model="llama3.2:1b", url="http://localhost:11434") ) pipe.connect("retriever", "prompt_builder.documents") pipe.connect("prompt_builder", "llm")
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピー別の質問を試してみましょう。
image_param = { "format": "img", "type": "png", "theme": "forest", "bgColor": "f2f3f4", } pipe.show(params=image_param)
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピーそれで、それは機能しています!より多くのデータ、書籍、またはPDFを埋め込みに使用することができます。また、GPT-4O、AnthropicのClaude、またはその他のクラウドLLMなどのLLMは、仕事をさらに良くします。
記事で使用されているすべてのコードをこちらを見つけることができます。
キーテイクアウトエージェントラグシステムは、従来のぼろきれよりもインテリジェントで柔軟な応答を提供します。
Haystackのパイプラインアーキテクチャにより、複雑でモジュラーワークフローが可能になりますルーターは、応答生成で動的な意思決定を有効にします。
- 接続グラフは、柔軟で保守可能なコンポーネントの相互作用を提供します
- 複数の知識ソースの統合により、応答の品質が向上します
- この記事に示されているメディアは、Analytics Vidhyaが所有しておらず、著者の裁量で使用されています。
- よくある質問
- q1。システムは未知のクエリをどのように処理しますか?システムは、ローカルナレッジが不十分な場合にルーターコンポーネントを使用して、自動的にWeb検索に戻り、包括的なカバレッジを確保します。パイプラインアーキテクチャはどのような利点を提供しますか?パイプラインアーキテクチャにより、モジュール開発、簡単なテスト、柔軟なコンポーネントの配置が可能になり、システムが維持可能かつ拡張可能になります。 q3。接続グラフはシステム機能をどのように強化しますか?接続グラフにより、複雑なデータフローと並列処理が可能になり、さまざまな種類のクエリを処理する際のシステム効率と柔軟性が向上します。他のLLM APIを使用できますか?はい、Gemini、Anthropic、GROQなどのそれぞれのLLM APIに必要な統合パッケージをインストールし、APIキーで使用してください。
以上がヘイスタックフレームワークを使用してエージェントQAラグシステムを構築する方法の詳細内容です。詳細については、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)

ホットトピック











この記事では、トップAIアートジェネレーターをレビューし、その機能、創造的なプロジェクトへの適合性、価値について説明します。 Midjourneyを専門家にとって最高の価値として強調し、高品質でカスタマイズ可能なアートにDall-E 2を推奨しています。

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

この記事では、ChatGpt、Gemini、ClaudeなどのトップAIチャットボットを比較し、自然言語の処理と信頼性における独自の機能、カスタマイズオプション、パフォーマンスに焦点を当てています。

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

この記事では、Grammarly、Jasper、Copy.ai、Writesonic、RytrなどのトップAIライティングアシスタントについて説明し、コンテンツ作成のためのユニークな機能に焦点を当てています。 JasperがSEOの最適化に優れているのに対し、AIツールはトーンの維持に役立つと主張します

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

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

この記事では、Google Cloud、Amazon Polly、Microsoft Azure、IBM Watson、DecriptなどのトップAI音声ジェネレーターをレビューし、機能、音声品質、さまざまなニーズへの適合性に焦点を当てています。
