Haystackとは
検索・質問応答システムの構築を起源とする、RAGパイプライン構築向けのオープンソースフレームワーク
ひとことで言うと
検索や質問応答システムを作るための、オープンソースのフレームワーク。
概要
Haystackとは、ドイツのdeepset社が開発するオープンソースのPythonフレームワークで、文書検索・質問応答・RAGパイプラインの構築に用いられる。 LLMの流行以前から、文書検索と質問応答システムの構築を目的に開発されてきた経緯があり、検索コンポーネントとLLMを組み合わせたパイプラインの構築に強みを持つ。 コンポーネントをパイプラインとして明示的に接続する設計思想を持ち、検索・生成・評価の各ステップを独立した部品として組み替えやすい点が、他のLLMフレームワークとの違いとして挙げられる。 検索コンポーネント(Retriever)、文書変換コンポーネント、生成コンポーネント(Generator)を独立した部品として組み合わせられるため、既存の検索基盤にLLMによる回答生成を後付けするような構成にも対応しやすい。
背景
大量の文書から必要な情報を検索し回答を生成するという課題は、LLM登場以前から情報検索・質問応答システムの分野で取り組まれてきた。 Haystackは、この分野の知見をもとに構築され、後にLLM・RAGの普及に合わせて機能を拡張していった。
歴史
2019年: deepset社がHaystackを公開し、文書検索・質問応答システム構築用のフレームワークとして展開。 2020年代以降、LLM・RAGの普及に合わせて機能を拡張し、RAGパイプライン構築向けのフレームワークとしても広く利用されるようになる。
アーキテクチャ
文書の読み込み・チャンキング・埋め込み生成・検索・LLMによる回答生成といった処理を、パイプラインで接続可能なコンポーネント群として提供する。
コード例
BM25検索パイプラインの構築(概念例)
from haystack import Pipeline, Document
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
document_store = InMemoryDocumentStore()
document_store.write_documents([Document(content="LangChainはLLMアプリ構築用のフレームワーク")])
pipeline = Pipeline()
pipeline.add_component("retriever", InMemoryBM25Retriever(document_store=document_store))
result = pipeline.run({"retriever": {"query": "LangChainとは"}})
print(result["retriever"]["documents"])利点
- 検索・質問応答システムの構築に関する知見の蓄積があり、RAGパイプラインの構築に強みを持つ
- 文書処理からLLM呼び出しまでの一連の処理をパイプラインとして統一的に扱える
- コンポーネントの入出力が型付けされており、パイプラインの構成ミスを検出しやすい
欠点
- LangChain等と比べると、コミュニティの規模や対応統合数はやや小さい
- 独自のパイプライン構築の作法を学ぶ必要がある
- メジャーバージョン間(1.x→2.x等)ではAPIの互換性が大きく変わることもある
比較
関連用語
よくある質問
HaystackはLLMがなくても使える?
元々はLLMを前提としない検索・質問応答システム構築用のフレームワークとして始まっており、従来型の検索コンポーネントのみでの利用も可能。
Haystackはどの会社が開発している?
ドイツのdeepset社が開発・メンテナンスしているオープンソースフレームワークで、同社はHaystackを用いたマネージドサービスも提供している。
参考文献
- Official WebsiteHaystack
- GitHubdeepset-ai/haystack