Skip to main content
PromptQuorum
ホーム/ローカルLLM活用/Haystack(deepset)2026:PythonでRAG検索パイプラインを構築
RAG & Document Chat

Haystack(deepset)2026:PythonでRAG検索パイプラインを構築

·12分で読めます·Hans Kuepper 著 · PromptQuorumの創設者、マルチモデルAIディスパッチツール · PromptQuorum

Haystackはドイツ企業deepsetが開発する無料・オープンソース(Apache 2.0)のPythonフレームワークで、型付きの明示的なComponentとPipelineから本番環境の検索・RAGパイプラインを構築する——ホスティング型サービスではない。

Haystackは「RAG」という言葉より古い。deepsetは2019年、抽出型質問応答フレームワークとしてHaystackを作った——検索拡張生成が自社文書にLLMを紐づける標準手法になる何年も前のことだ。この検索エンジン由来の設計思想は今も残っている。すべての処理ステップは型付きComponentであり、明示的なPipelineに配線される——暗黙の呼び出し連鎖ではない。

Haystack(deepset)2026:PythonでRAG検索パイプラインを構築

重要なポイント

  • Apache 2.0ライセンス、無料でセルフホスト可能——pip install haystack-ai、ソースはgithub.com/deepset-ai/haystack
  • ドイツに拠点を置くdeepsetが2019年から開発、当初は抽出型質問応答・検索フレームワークだった——検索拡張生成が一般的な用語になる前のこと
  • 2つの構成要素:Component(1つの処理ステップ:retriever、embedder、generator、converter)とPipeline(.add_component()と.connect()呼び出しで明示的に接続されたComponentのグラフ)
  • Document Storeは差し替え可能なバックエンド抽象化——Haystackはテスト用のインメモリストアとElasticsearch・Weaviate・Pineconeなどのベクトルデータベース連携を用意
  • モデルプロバイダーに依存しない:OpenAI、Anthropic、Mistral、Cohere、Hugging Face、Google、Azure OpenAI、AWS Bedrockと連携
  • deepsetはHaystack Enterprise PlatformとHaystack Enterprise Starterという商用製品も販売——同じオープンソースの中核の上に、ビジュアルパイプラインビルダーとマネージドデプロイを重ねたもの

📍 一文で説明

Haystackはdeepset製のオープンソース(Apache 2.0)Pythonフレームワークで、型付きの明示的なComponentとPipelineの抽象化から本番環境の検索・RAGパイプラインを構築する。現行バージョンは3.1。

💬 簡潔に説明

多くのLLMライブラリのように関数呼び出しを連鎖させる代わりに、Haystackは名前付きのComponent——retriever、prompt builder、generator——を.connect()呼び出しで明示的にPipelineオブジェクトへ配線させる。データフローがチェーンの中に隠れず、見える形でテストできる。

📌補足: オープンソースフレームワークとdeepsetの商用製品は別物。本レビューは、セクションで明示的に「Enterprise Platform」と書かれている箇所を除き、無料でセルフホストできるApache 2.0コードのみを扱う。

Haystackとは何か?

Haystackは検索・質問応答・検索拡張生成(RAG)アプリケーションを構築するためのオープンソースPythonフレームワーク(Apache 2.0、github.com/deepset-ai/haystack)。ドイツに拠点を置くdeepsetが保守しており、pip install haystack-aiでインストールする。

  • 2019年に抽出型質問応答フレームワークとしてスタート——文書内から正確な回答箇所を見つける仕組み——生成AIがRAGを主流パターンにする前のこと
  • Haystack 2.0前後で現行のComponent/Pipelineアーキテクチャへ大幅に書き換えられ、現在はバージョン3.1(2026年8月24日リリース)
  • 文書変換(PDF、HTML、DOCX)、テキスト分割、embedding、retrieval(キーワードベースのBM25とベクトル/セマンティック)、生成、評価のためのComponentを提供
  • Document Store抽象化がパイプラインロジックとストレージバックエンドを分離——パイプラインを書き換えずにインメモリストアをElasticsearch、Weaviate、Pineconeに差し替え可能
  • ローカル開発・テスト向けにインメモリのdocument storeを標準搭載しており、外部データベースなしで始められる
  • 同じパイプライン内でキーワードretrieval(BM25)とベクトル/セマンティックretrievalの両方に対応、両者を組み合わせたハイブリッドretrievalも可能

HaystackのPipeline/Componentアーキテクチャの仕組みは?

Componentは1つの処理ステップ(retriever、embedder、generatorなど)であり、Pipelineは.add_component()と.connect()の明示的な呼び出しで接続されたComponentの有向グラフだ。ステップ間のデータフローはコード上で可視化されており、チェーンオブジェクトの中に隠れていない。

  • Pipelineはyamlへシリアライズ可能——Pythonで構築したpipelineを保存・バージョン管理し、構築コードを再実行せずに再読み込みできる
  • 分岐と合流はグラフモデルにネイティブで対応——1つのretrieverの出力を2つの異なるgeneratorへ渡したり、2つのretrieverを1つのrankerへ渡したりでき、追加の接着コードは不要
  • 接続が明示的なため、壊れたpipeline(型の不一致、接続漏れ)はコールスタックの奥深くで実行時に失敗するのではなく、pipeline構築時に明確なエラーで失敗する

HaystackはLangChain・LlamaIndexと何が違うか?

Haystack、LangChain、LlamaIndexはいずれもコードファーストのPythonフレームワークで、オープンソースの中核にビジュアルビルダーは無い——違いは中心となる抽象化にある。Haystackは型付きComponentの明示的なPipelineグラフを中心に構築される。LlamaIndexは自分のデータ上に構築したIndexを中心に、RetrieverとQueryEngineオブジェクトをその上に置く。LangChainはchainを中心に、LangGraph拡張ではエージェント向けのstate graphを中心にする。

最初のHaystackパイプラインの作り方は?

最小構成のRAGパイプラインには、retriever、prompt builder、generatorという3つの接続されたComponentが必要で、これらをPipelineオブジェクトに配線し、クエリで実行する。

  1. 1
    パッケージをインストール:pip install haystack-ai。
  2. 2
    必要な要素をインポート:from haystack import Pipeline, Document; from haystack.components.generators.chat import OpenAIChatGenerator; from haystack.components.retrievers import InMemoryBM25Retriever; from haystack.document_stores.in_memory import InMemoryDocumentStore; from haystack.components.builders import ChatPromptBuilder; from haystack.utils import Secret。
  3. 3
    document storeを作成し、文書を書き込む:document_store = InMemoryDocumentStore()、続いて document_store.write_documents([Document(content="...")​, ...])。
  4. 4
    Componentを作成:retriever = InMemoryBM25Retriever(document_store=document_store)、prompt_builder = ChatPromptBuilder(template=prompt_template, required_variables="*")、llm = OpenAIChatGenerator(api_key=Secret.from_env_var("OPENAI_API_KEY"), model="gpt-4o-mini")。
  5. 5
    パイプラインを組み立てる:rag_pipeline = Pipeline()、続いて rag_pipeline.add_component("retriever", retriever)、rag_pipeline.add_component("prompt_builder", prompt_builder)、rag_pipeline.add_component("llm", llm)。
  6. 6
    接続を配線:rag_pipeline.connect("retriever", "prompt_builder.documents") と rag_pipeline.connect("prompt_builder", "llm")。
  7. 7
    実行:results = rag_pipeline.run({"retriever": {"query": question}, "prompt_builder": {"question": question}})。
python
from haystack import Pipeline, Document
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.components.retrievers import InMemoryBM25Retriever
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.builders import ChatPromptBuilder
from haystack.utils import Secret

document_store = InMemoryDocumentStore()
document_store.write_documents([
    Document(content="My name is Jean and I live in Paris."),
    Document(content="My name is Mark and I live in Berlin."),
    Document(content="My name is Giorgio and I live in Rome."),
])

retriever = InMemoryBM25Retriever(document_store=document_store)
prompt_builder = ChatPromptBuilder(template=prompt_template, required_variables="*")
llm = OpenAIChatGenerator(api_key=Secret.from_env_var("OPENAI_API_KEY"), model="gpt-4o-mini")

rag_pipeline = Pipeline()
rag_pipeline.add_component("retriever", retriever)
rag_pipeline.add_component("prompt_builder", prompt_builder)
rag_pipeline.add_component("llm", llm)
rag_pipeline.connect("retriever", "prompt_builder.documents")
rag_pipeline.connect("prompt_builder", "llm")

results = rag_pipeline.run({"retriever": {"query": question}, "prompt_builder": {"question": question}})

Haystackを試すのにOpenAIのAPIキーは必要か?

上の例ではOpenAIChatGeneratorを使っているが、HaystackにはHugging Face、Anthropic、Mistral、Cohere、Google、Azure OpenAI、AWS Bedrock向けのgenerator Componentもあり、ローカルモデル連携も存在する——1つのモデルプロバイダーに縛られることはない。

始めるのにベクトルデータベースは必要か?

不要。InMemoryDocumentStoreは外部サービスを必要とせず、ローカルでpipelineを構築・テストするには十分。本番規模へ移行する段階でElasticsearch、Weaviate、Pineconeなどに差し替えればよい。

Haystackはどんな人に向いているか?

Haystackは、本番の検索・RAGパイプラインを明示的に制御する必要があり、Pythonでのコーディングに抵抗が無いチームに向いている——オープンソースの中核部分はノーコードやビジュアルツールではない。

Haystack vs. 代替ツール

以下の3つのフレームワークはいずれもオープンソースでPython中心、かつ活発に保守されている——選択は、チームがpipelineをどう捉えたいかに合った中心的な抽象化がどれかで決まる。

ツール
中心的な抽象化
ライセンス
最適な用途
Haystack型付きComponentのPipelineApache 2.0本番検索/測定可能なRAG
LlamaIndexIndex + Retriever + QueryEngineMIT高速なデータ取り込み/索引化
LangChainChain / LangGraph state graphMIT汎用LLMアプリ・エージェントの接着コード

Haystack評価でよくある間違い

これらの間違いは、Haystackをホスティング型SaaS製品として扱ったり、別フレームワークの抽象化の代替品として扱ったりすることから生じる。

よくある質問

Haystackとは何か?

Haystackはドイツに拠点を置くdeepsetによるオープンソースPythonフレームワークで、検索・質問応答・RAGのパイプラインを構築する。ライセンスはApache 2.0で、pip install haystack-aiでインストールする。

誰がHaystackを開発しているか?

ドイツに拠点を置くdeepset。deepsetは2019年、検索拡張生成が一般的な用語になる前に、抽出型質問応答フレームワークとしてHaystackを開始した。

Haystackはどのライセンスで公開されているか?

Apache License 2.0。ソースコードはgithub.com/deepset-ai/haystackにあり、自由に利用・改変・セルフホストできる。

Haystackの現行バージョンは?

Haystack 3.1、2026年8月24日リリース。Haystack 2.0前後で現行のComponent/Pipelineアーキテクチャへ大幅に書き換えられた。

HaystackにおけるComponentとPipelineの違いは?

Componentは1つの処理ステップ——retriever、embedder、prompt builder、generatorなど。Pipelineは.add_component()と.connect()の明示的な呼び出しで接続されたComponentのグラフであり、pipelineの実行は依存関係の順序でグラフをたどる。

HaystackはLlamaIndexと何が違うか?

Haystackは明示的で型付きのComponentをPipelineグラフに配線することを中心にパイプラインを組む。LlamaIndexはデータ上にIndexを構築し、RetrieverとQueryEngineを通じて問い合わせることを中心にする。データのインデックス化を始めるのはLlamaIndexの方が概して速く、Haystackの明示的なグラフは本番パイプラインでより高い可視性と制御力を提供する。

HaystackはLangChainと何が違うか?

どちらもコードファーストのPythonフレームワークで、オープンソースの中核にビジュアルビルダーは無い。LangChainはchainを中心に、LangGraphを介してエージェント向けのstate graphを中心にする。Haystackは型付きComponentのPipelineを中心にし、retrievalと検索を汎用チェーンの一部としてではなく、一級市民の測定可能な関心事として扱う。

Haystackは特定のベクトルデータベースを必要とするか?

不要。Haystackは開発用にインメモリのDocument Storeを標準搭載し、Elasticsearch、Weaviate、Pineconeを含む複数のベクトルデータベースや検索バックエンドと同じComponentインターフェースで連携する——バックエンドの切り替えにpipelineの書き換えは不要。

deepsetのHaystack Enterprise Platformとは何か?

オープンソースのHaystackフレームワークの上に構築された、deepsetの有料商用製品で、ビジュアルパイプラインビルダーと、マネージドまたはセルフホストのデプロイオプションを追加する。本レビューが扱う無料・セルフホストのApache 2.0オープンソースフレームワークとは別物である。

出典

← ローカルLLM活用 に戻る