Convert Figma logo to code with AI

deepset-ai logohaystack

Open-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipelines and agent workflows with explicit control over retrieval, routing, memory, and generation. Built for scalable agents, RAG, multimodal applications, semantic search, and conversational systems.

25,118
2,771
25,118
118

Top Related Projects

State-of-the-Art Embeddings, Retrieval, and Reranking

40,473

A library for efficient similarity search and clustering of dense vectors.

Official Python client for Elasticsearch

45,149

Milvus is a high-performance, cloud-native vector database built for scalable vector ANN search

6,909

AI + Data, online. https://vespa.ai

Quick Overview

Haystack is an open-source framework for building production-ready question-answering (QA) and document retrieval systems. It provides a modular and extensible architecture that allows developers to easily integrate various NLP models, data sources, and deployment options to create custom QA solutions.

Pros

  • Modular and Extensible Architecture: Haystack offers a flexible and modular design, allowing developers to easily integrate different NLP models, data sources, and deployment options to build custom QA solutions.
  • Comprehensive Documentation: The project has extensive documentation, including tutorials, API references, and deployment guides, making it easier for developers to get started and understand the framework.
  • Active Community and Contributions: Haystack has an active community of contributors, who regularly add new features, fix bugs, and provide support through the project's GitHub repository and forums.
  • Supports Multiple NLP Models and Backends: Haystack supports a wide range of NLP models, including BERT, RoBERTa, and DistilBERT, and can be integrated with various backend systems, such as Elasticsearch, Milvus, and Pinecone.

Cons

  • Steep Learning Curve: While the documentation is comprehensive, the framework's modular design and the number of available options can make it challenging for new users to get started, especially if they are not familiar with NLP and information retrieval concepts.
  • Performance Overhead: Depending on the complexity of the QA system and the size of the data, Haystack may have a higher performance overhead compared to more specialized or lightweight solutions.
  • Limited Support for Non-English Languages: While Haystack supports multiple languages, the majority of the pre-trained models and examples are focused on English, which may limit its usefulness for non-English applications.
  • Potential Vendor Lock-in: Depending on the backend systems and deployment options chosen, users may experience some degree of vendor lock-in, which could make it difficult to migrate to other platforms or solutions in the future.

Code Examples

Here are a few code examples to give you a sense of how Haystack can be used:

  1. Retrieving Answers from a Document Store:
from haystack.document_stores import ElasticsearchDocumentStore
from haystack.nodes import DensePassageRetriever, FARMReader

# Initialize the document store
document_store = ElasticsearchDocumentStore(host="localhost", username="", password="", index="documents")

# Initialize the retriever and reader
retriever = DensePassageRetriever(document_store=document_store)
reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2")

# Retrieve and answer a question
query = "What is the capital of France?"
prediction = reader.predict(query=query, top_k_retriever=10)
print(prediction["answers"][0].answer)
  1. Ingesting Documents from Various Sources:
from haystack.document_stores import ElasticsearchDocumentStore
from haystack.utils import convert_files_to_dicts
from haystack.pipelines import DocumentSearchPipeline

# Convert files to dicts
dicts = convert_files_to_dicts(dir_path="path/to/documents", clean_func=None, meta_data_keys=["name", "author"])

# Initialize the document store
document_store = ElasticsearchDocumentStore(host="localhost", username="", password="", index="documents")

# Ingest the documents
document_store.write_documents(dicts)

# Create a search pipeline
pipeline = DocumentSearchPipeline(document_store=document_store)

# Run a search
result = pipeline.run(query="What is the capital of France?", top_k_retriever=5, top_k_reader=1)
print(result["answers"][0].answer)
  1. Deploying a QA System as a REST API:
from haystack.pipelines import ExtractiveQAPipeline
from haystack.document_stores import ElasticsearchDocumentStore
from haystack.nodes import DensePassageRetriever, FARMReader
from fastapi import FastAPI

# Initialize the document store, retriever, and reader
document_store =

Competitor Comparisons

State-of-the-Art Embeddings, Retrieval, and Reranking

Error generating comparison

40,473

A library for efficient similarity search and clustering of dense vectors.

Pros of FAISS

  • Highly optimized for efficient similarity search and clustering of dense vectors
  • Supports GPU acceleration for faster processing of large-scale datasets
  • Offers a wide range of indexing algorithms for different use cases

Cons of FAISS

  • Focused primarily on vector similarity search, lacking broader NLP capabilities
  • Steeper learning curve and more complex implementation for non-expert users
  • Limited built-in support for text preprocessing and document handling

Code Comparison

FAISS example:

import faiss
import numpy as np

d = 64  # dimension
nb = 100000  # database size
nq = 10000  # nb of queries
xb = np.random.random((nb, d)).astype('float32')
xq = np.random.random((nq, d)).astype('float32')

index = faiss.IndexFlatL2(d)
index.add(xb)
D, I = index.search(xq, k=4)

Haystack example:

from haystack import Pipeline
from haystack.nodes import EmbeddingRetriever, FARMReader

retriever = EmbeddingRetriever(document_store=document_store)
reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2")

pipe = Pipeline()
pipe.add_node(component=retriever, name="Retriever", inputs=["Query"])
pipe.add_node(component=reader, name="Reader", inputs=["Retriever"])

Official Python client for Elasticsearch

Pros of elasticsearch-py

  • Direct, low-level access to Elasticsearch API
  • Lightweight and focused solely on Elasticsearch integration
  • Extensive documentation and community support

Cons of elasticsearch-py

  • Limited to Elasticsearch-specific functionality
  • Requires more manual configuration for advanced search features
  • Less abstraction for complex NLP tasks

Code Comparison

elasticsearch-py:

from elasticsearch import Elasticsearch

es = Elasticsearch()
result = es.search(index="my_index", body={"query": {"match": {"title": "python"}}})

Haystack:

from haystack import Pipeline
from haystack.nodes import ElasticsearchRetriever, FARMReader

retriever = ElasticsearchRetriever(document_store=document_store)
reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2")
pipe = Pipeline()
pipe.add_node(component=retriever, name="Retriever", inputs=["Query"])
pipe.add_node(component=reader, name="Reader", inputs=["Retriever"])

Summary

Elasticsearch-py is a focused, low-level client for Elasticsearch, offering direct API access and extensive documentation. However, it lacks built-in support for advanced NLP tasks and requires more manual configuration. Haystack, on the other hand, provides a higher-level abstraction for building end-to-end question answering systems, integrating various components including Elasticsearch, but with a steeper learning curve and potentially less flexibility for Elasticsearch-specific optimizations.

45,149

Milvus is a high-performance, cloud-native vector database built for scalable vector ANN search

Pros of Milvus

  • Specialized for vector similarity search and AI applications
  • Highly scalable and optimized for large-scale datasets
  • Supports multiple index types for different use cases

Cons of Milvus

  • Steeper learning curve due to its specialized nature
  • Limited to vector search, less versatile for general NLP tasks
  • Requires more infrastructure setup compared to Haystack

Code Comparison

Milvus (Python client):

from pymilvus import Collection, connections

connections.connect()
collection = Collection("example_collection")
results = collection.search(
    data=[[0.1, 0.2]], 
    anns_field="embedding",
    param={"metric_type": "L2", "params": {"nprobe": 10}},
    limit=5
)

Haystack:

from haystack import Document, Pipeline
from haystack.nodes import EmbeddingRetriever, BM25Retriever

retriever = EmbeddingRetriever(document_store=document_store)
pipeline = Pipeline()
pipeline.add_node(component=retriever, name="Retriever", inputs=["Query"])
results = pipeline.run(query="example query")

Milvus focuses on efficient vector search, while Haystack provides a more comprehensive NLP pipeline framework. Milvus is better suited for large-scale vector search applications, whereas Haystack offers greater flexibility for various NLP tasks and easier integration with other components.

6,909

AI + Data, online. https://vespa.ai

Pros of Vespa

  • Highly scalable and distributed search and recommendation engine
  • Real-time indexing and serving of large-scale data
  • Advanced features like tensor computations and machine-learned ranking

Cons of Vespa

  • Steeper learning curve and more complex setup
  • Requires more resources and infrastructure to run effectively
  • Less focus on natural language processing tasks compared to Haystack

Code Comparison

Vespa query example:

SearchRequest request = new SearchRequest();
request.yql("select * from music where artist contains 'Beatles'");
Result result = container.search(request);

Haystack query example:

finder = Finder(reader, retriever)
answer = finder.get_answers(question="Who are the Beatles?")

Summary

Vespa is a powerful, scalable search and recommendation engine suitable for large-scale applications, while Haystack focuses more on natural language processing and question-answering tasks. Vespa offers advanced features and real-time capabilities but requires more setup and resources. Haystack provides an easier entry point for NLP-related tasks but may not scale as well for massive datasets or complex search scenarios.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Blue banner with the Haystack logo and the text ‘haystack by deepset – The Open Source AI Framework for Production Ready RAG & Agents’ surrounded by abstract icons representing search, documents, agents, pipelines, and cloud systems.
CI/CDTests types - Mypy Coverage badge Ruff
DocsWebsite
PackagePyPI PyPI - Downloads PyPI - Python Version Conda Version GitHub License Compliance
MetaDiscord Twitter Follow

Haystack is an open-source AI orchestration framework for building production-ready LLM applications in Python.

Design modular pipelines and agent workflows with explicit control over retrieval, routing, memory, and generation. Build scalable RAG systems, multimodal applications, semantic search, question answering, and autonomous agents, all in a transparent architecture that lets you experiment, customize deeply, and deploy with confidence.

Table of Contents

Installation

The simplest way to get Haystack is via pip:

pip install haystack-ai

Install nightly pre-releases to try the newest features:

pip install --pre haystack-ai

Haystack supports multiple installation methods, including Docker images. For a comprehensive guide, please refer to the documentation.

Documentation

If you're new to the project, check out "What is Haystack?" then go through the "Get Started Guide" and build your first LLM application in a matter of minutes. Keep learning with the tutorials. For more advanced use cases, or just to get some inspiration, you can browse our Haystack recipes in the Cookbook.

At any given point, hit the documentation to learn more about Haystack, what it can do for you, and the technology behind.

Features

Built for context engineering
Design flexible systems with explicit control over how information is retrieved, ranked, filtered, combined, structured, and routed before it reaches the model. Define pipelines and agent workflows where retrieval, memory, tools, and generation are transparent and traceable.

Model- and vendor-agnostic
Integrate with OpenAI, Mistral, Anthropic, Cohere, Hugging Face, Azure OpenAI, AWS Bedrock, local models, and many others. Swap models or infrastructure components without rewriting your system.

Modular and customizable
Use built-in components for retrieval, indexing, tool calling, memory, and evaluation, or create your own. Add loops, branches, and conditional logic to precisely control how context moves through your pipelines and agent workflows.

Extensible ecosystem
Build and share custom components through a consistent interface that makes it easy for the community and third parties to extend Haystack and contribute to an open ecosystem.

[!TIP]

Would you like to deploy and serve Haystack pipelines as REST APIs or MCP servers? Hayhooks provides a simple way for you to wrap pipelines and agents with custom logic and expose them through HTTP endpoints or MCP. It also supports OpenAI-compatible chat completion endpoints and works with chat UIs like open-webui.

Haystack Enterprise: Support & Platform

Get expert support from the Haystack team, build faster with enterprise-grade templates, and scale securely with deployment guides for cloud and on-prem environments with Haystack Enterprise Starter. Read more about it in the announcement post.

👉 Get Haystack Enterprise Starter

Need a managed production setup for Haystack? The Haystack Enterprise Platform helps you build, test, deploy and operate Haystack pipelines with built-in observability, collaboration, governance, and access controls. It’s available as a managed cloud service or as a self-hosted solution.

👉 Learn more about Haystack Enterprise Platform or try it free

Telemetry

Haystack collects anonymous usage statistics of pipeline components. We receive an event every time these components are initialized. This way, we know which components are most relevant to our community.

Read more about telemetry in Haystack or how you can opt out in Haystack docs.

🖖 Community

If you have a feature request or a bug report, feel free to open an issue in GitHub. We regularly check these, so you can expect a quick response. If you'd like to discuss a topic or get more general advice on how to make Haystack work for your project, you can start a thread in Github Discussions or our Discord channel. We also check 𝕏 (Twitter) and Stack Overflow.

Contributing to Haystack

We are very open to the community's contributions - be it a quick fix of a typo, or a completely new feature! You don't need to be a Haystack expert to provide meaningful improvements. To learn how to get started, check out our Contributor Guidelines first.

There are several ways you can contribute to Haystack:

[!TIP] 👉 Check out the full list of issues that are open to contributions

Organizations using Haystack

Haystack is used by thousands of teams building production AI systems across industries, including:

Are you also using Haystack? Open a PR or tell us your story