Skip to main content
PromptQuorumBuilt for humans. Structured for AI.
Inicio/LLM locales avanzados
RAG & Document Chat

Haystack de deepset: framework Python para RAG y búsqueda en producción

·12 min de lecturaPor Hans Kuepper · Fundador de PromptQuorum · Motor de descubrimiento de IA de pesos abiertos y código abierto

Haystack es un framework Python gratuito y open source (Apache 2.0) de la empresa alemana deepset, para construir pipelines de búsqueda y RAG en producción a partir de bloques Component y Pipeline explícitos y tipados — no un producto alojado.

Conclusiones clave

  • Licencia Apache 2.0, auto-alojable gratis — pip install haystack-ai, código fuente en github.com/deepset-ai/haystack
  • Desarrollado por deepset, empresa con sede en Alemania, desde 2019, primero como framework de respuesta a preguntas extractiva y búsqueda — antes de que la generación aumentada por recuperación fuera un término habitual
  • Dos bloques: Component (un paso de procesamiento: retriever, embedder, generador, conversor) y Pipeline (un grafo conectado de components con llamadas .add_component() y .connect() explícitas)
  • Document Store es una abstracción de backend intercambiable — Haystack incluye un store en memoria para pruebas y se integra con Elasticsearch, Weaviate, Pinecone y otras bases de datos vectoriales
  • Hayhooks, la propia herramienta de deepset, despliega un pipeline de Haystack como servidor API REST y MCP local, ejecutándose sobre Uvicorn (por defecto http://localhost:1416)
  • Independiente del proveedor de modelos: se integra con OpenAI, Anthropic, Mistral, Cohere, Hugging Face, Google, Azure OpenAI y AWS Bedrock
  • deepset también vende Haystack Enterprise Platform y Haystack Enterprise Starter — capas comerciales con constructor visual de pipelines y despliegue gestionado sobre el mismo núcleo open source

📍 En una frase

Haystack es el framework Python open source (Apache 2.0) de deepset para construir pipelines de búsqueda y RAG en producción a partir de abstracciones Component y Pipeline explícitas y tipadas, actualmente en la versión 3.2.0.

💬 En términos simples

En lugar de encadenar llamadas a funciones como la mayoría de bibliotecas LLM, Haystack exige conectar components con nombre — un retriever, un constructor de prompts, un generador — en un objeto Pipeline con llamadas .connect() explícitas, de forma que el flujo de datos sea visible y comprobable en vez de estar oculto dentro de una cadena.

📌Nota: El framework open source y los productos comerciales de deepset son independientes: esta reseña cubre solo el código gratuito y auto-alojado bajo Apache 2.0, salvo que una sección mencione explícitamente "Enterprise Platform".

Haystack es anterior al término "RAG" — deepset lo creó en 2019 como framework de respuesta a preguntas extractiva, años antes de que la generación aumentada por recuperación se convirtiera en el enfoque estándar para anclar un LLM en documentos propios. Ese origen en el mundo de los motores de búsqueda todavía define su arquitectura: cada paso es una Component tipada, conectada en un Pipeline explícito — no una cadena de llamadas implícitas.

Haystack de deepset: framework Python para RAG y búsqueda en producción

¿Qué es Haystack?

Haystack es un framework Python de código abierto (Apache 2.0, github.com/deepset-ai/haystack) para construir aplicaciones de búsqueda, preguntas y respuestas, y generación aumentada por recuperación (RAG). Lo mantiene deepset, una empresa con sede en Alemania, y se instala con pip install haystack-ai.

  • Iniciado en 2019 como framework de respuesta a preguntas extractiva — encontrar el fragmento exacto de la respuesta dentro de un documento — antes de que los LLM generativos convirtieran el RAG en el patrón dominante
  • Reescrito a fondo en torno a Haystack 2.0 hacia la arquitectura Component/Pipeline actual, ahora en la versión 3.2.0 (publicada el 24/09/2026)
  • Incluye components para conversión de documentos (PDF, HTML, DOCX), división de texto, embedding, retrieval (por palabras clave BM25 y vectorial/semántico), generación y evaluación
  • La abstracción Document Store separa la lógica del pipeline del backend de almacenamiento — cambiar el store en memoria por Elasticsearch, Weaviate o Pinecone sin reescribir el pipeline
  • Incluye un document store en memoria listo para usar en desarrollo local y pruebas, sin necesidad de una base de datos externa para empezar
  • Admite retrieval por palabras clave (BM25) y vectorial/semántico en el mismo pipeline, además de retrieval híbrido que combina ambos

¿Cómo funciona la arquitectura Pipeline/Component de Haystack?

Una Component es un único paso de procesamiento (un retriever, un embedder, un generador), y un Pipeline es un grafo dirigido de components conectadas mediante llamadas explícitas .add_component() y .connect(), de forma que el flujo de datos entre pasos es visible en el código en lugar de estar oculto en un objeto cadena.

  • Los pipelines son serializables a YAML — un pipeline construido en Python puede guardarse, versionarse y recargarse sin volver a ejecutar el código que lo construyó
  • La ramificación y la fusión son nativas del modelo de grafo — la salida de un retriever puede alimentar a dos generadores distintos, o dos retrievers pueden alimentar a un ranker, sin código adicional de conexión
  • Como las conexiones son explícitas, un pipeline roto (tipos incompatibles, conexión faltante) falla en el momento de construir el pipeline con un error claro, no en tiempo de ejecución en lo profundo de una pila de llamadas

Component

Una Component encapsula una unidad de trabajo — recuperar documentos, generar embeddings de texto, construir un prompt, llamar a un LLM, convertir un archivo. Cada component declara entradas y salidas tipadas, de modo que una component que produce una lista de objetos Document solo puede conectarse a una entrada que acepte ese tipo. Se pueden escribir components personalizadas heredando de la clase base Component y definiendo run().

Pipeline

Una instancia Pipeline contiene las components y las conexiones entre ellas. pipeline.add_component("nombre", instancia_component) registra cada paso, y pipeline.connect("origen.salida", "destino.entrada") las conecta. Llamar a pipeline.run(...) ejecuta el grafo en orden de dependencias y devuelve las salidas de cada component que no se consumió aguas abajo.

¿En qué se diferencia Haystack de LangChain y LlamaIndex?

Haystack, LangChain y LlamaIndex son frameworks Python code-first, sin constructor visual en su núcleo open source — la diferencia está en su abstracción central. Haystack organiza todo en torno a grafos Pipeline explícitos de Components tipadas; LlamaIndex organiza en torno a un Index construido sobre los datos, con objetos Retriever y QueryEngine encima; LangChain organiza en torno a chains y, en su extensión LangGraph, un state graph para agentes.

El modelo Pipeline/Component de Haystack

Cada paso — retrieval, prompting, generación — es una Component con nombre conectada en un Pipeline mediante llamadas .connect() explícitas. Nada es implícito: si dos components no están conectadas, no fluyen datos entre ellas. Esto hace que los pipelines sean fáciles de inspeccionar, comprobables component por component y serializables a YAML para control de versiones.

El modelo centrado en el índice de LlamaIndex

LlamaIndex se centra en construir un Index (vectorial, de lista, de árbol o por palabras clave) sobre una colección de documentos, y consultarlo después mediante un Retriever y un QueryEngine. Está optimizado para la comodidad de ingesta e indexación de datos — unas pocas líneas indexan una carpeta de archivos y permiten empezar a consultarla — con menos del cableado explícito paso a paso de Haystack.

Qué significa esto en la práctica

El grafo explícito de Haystack suele merecer la pena en sistemas de producción donde hace falta saber exactamente qué se ejecuta, en qué orden, y sustituir un paso (otro retriever, otro generador) sin tocar el resto. La abstracción de índice de LlamaIndex suele ser más rápida para prototipar cuando la tarea es "indexar estos datos y dejarme consultarlos".

¿Cómo construir un primer pipeline de Haystack?

Un pipeline RAG mínimo necesita tres components conectadas: un retriever, un constructor de prompts y un generador, conectadas en un objeto Pipeline y ejecutadas con una consulta.

  1. 1
    Instalar el paquete: pip install haystack-ai.
  2. 2
    Importar las piezas necesarias: 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
    Crear un document store y escribir documentos en él: document_store = InMemoryDocumentStore(), y luego document_store.write_documents([Document(content="...")​, ...]).
  4. 4
    Crear las components: retriever = InMemoryBM25Retriever(document_store=document_store), prompt_builder = ChatPromptBuilder(template=prompt_template, required_variables="*") y llm = OpenAIChatGenerator(api_key=Secret.from_env_var("OPENAI_API_KEY"), model="gpt-4o-mini").
  5. 5
    Ensamblar el pipeline: rag_pipeline = Pipeline(), y luego rag_pipeline.add_component("retriever", retriever), rag_pipeline.add_component("prompt_builder", prompt_builder) y rag_pipeline.add_component("llm", llm).
  6. 6
    Conectar las components: rag_pipeline.connect("retriever", "prompt_builder.documents") y rag_pipeline.connect("prompt_builder", "llm").
  7. 7
    Ejecutarlo: 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}})

¿Necesito una clave API de OpenAI para probar Haystack?

El ejemplo anterior usa OpenAIChatGenerator, pero Haystack también tiene components generadores para Hugging Face, Anthropic, Mistral, Cohere, Google, Azure OpenAI y AWS Bedrock, además de integraciones con modelos locales — no está atado a un único proveedor de modelos.

¿Necesito una base de datos vectorial para empezar?

No. InMemoryDocumentStore no requiere ningún servicio externo y es suficiente para construir y probar un pipeline en local. Cámbielo por Elasticsearch, Weaviate o Pinecone solo al pasar a escala de producción.

¿Para quién es Haystack?

Haystack encaja con equipos que necesitan control explícito sobre un pipeline de búsqueda o RAG en producción y se sienten cómodos escribiendo Python — no es una herramienta no-code ni visual en su núcleo open source.

Use Haystack si

  • Construye un sistema de búsqueda, preguntas y respuestas o RAG en producción donde la calidad del retrieval debe medirse y ajustarse, no solo conectarse
  • Quiere un grafo de pipeline explícito e inspeccionable que pueda probar component por component, en vez de una cadena implícita
  • Necesita cambiar retrievers, document stores o proveedores de modelos sin reescribir el resto del pipeline
  • Se siente cómodo con Python y quiere un framework, no un producto alojado — Haystack es auto-alojado, code-first y gratuito bajo Apache 2.0

Evite Haystack si

  • Quiere un constructor no-code o visual como interfaz principal — el framework open source es code-first; una capa visual solo existe en la Enterprise Platform de pago de deepset
  • Su tarea se parece más a "indexar esta carpeta de archivos y dejarme consultarla" con la mínima configuración — la API centrada en el índice de LlamaIndex suele llegar antes a una primera respuesta para ese tipo concreto de tarea
  • Necesita un framework nativo de JavaScript/TypeScript — el SDK open source de Haystack es solo para Python
  • No le interesan las métricas de calidad de búsqueda (BM25 vs. vectorial vs. híbrido, evaluación de retrieval) y solo quiere que un LLM responda preguntas sobre un puñado de documentos sin ajustes

Haystack vs. alternativas

Los tres frameworks siguientes son open source, orientados a Python y con mantenimiento activo — la elección depende de qué abstracción central encaja mejor con cómo su equipo quiere razonar sobre un pipeline.

Herramienta
Abstracción central
Licencia
Mejor para
HaystackPipeline de Components tipadasApache 2.0Búsqueda en producción / RAG medible
LlamaIndexIndex + Retriever + QueryEngineMITIngesta e indexación rápidas
LangChainChains / state graph LangGraphMITCódigo de conexión LLM y agentes generalista

Comparar en el directorio

Errores frecuentes al evaluar Haystack

Estos errores vienen de tratar Haystack como un producto SaaS alojado, o como un sustituto directo de la abstracción de otro framework.

Error 1: suponer que Haystack es un producto alojado

El framework open source (pip install haystack-ai) es código auto-alojado, no un SaaS al que se suscribe. Las ofertas comerciales de deepset — Haystack Enterprise Platform y Haystack Enterprise Starter — son capas de pago independientes sobre el mismo núcleo open source, no un requisito para usarlo.

Error 2: esperar la comodidad "indexar una carpeta en tres líneas" de LlamaIndex

El modelo Pipeline/Component explícito de Haystack cambia parte de esa comodidad de inicio rápido por visibilidad y control. Si la tarea es puramente "apuntar a una carpeta y empezar a consultar", espere más configuración que con la API centrada en el índice de LlamaIndex — el beneficio aparece más tarde, cuando hay que sustituir o depurar un paso en producción.

Error 3: ignorar la elección del Document Store hasta producción

InMemoryDocumentStore es cómodo para desarrollo pero no está pensado para escala o persistencia en producción. Decida el Document Store de producción (Elasticsearch, Weaviate, Pinecone u otro backend compatible) pronto, ya que el comportamiento del retriever y la estrategia de indexación pueden variar según el backend.

Preguntas frecuentes

¿Qué es Haystack?

Haystack es un framework Python de código abierto de deepset, una empresa con sede en Alemania, para pipelines de búsqueda, preguntas y respuestas, y RAG. Tiene licencia Apache 2.0 y se instala con pip install haystack-ai.

¿Quién desarrolla Haystack?

deepset, una empresa con sede en Alemania. deepset inició Haystack en 2019 como framework de respuesta a preguntas extractiva, antes de que la generación aumentada por recuperación fuera un término habitual.

¿Bajo qué licencia se publica Haystack?

Apache License 2.0. El código fuente está en github.com/deepset-ai/haystack y puede usarse, modificarse y auto-alojarse libremente.

¿Cuál es la versión actual de Haystack?

Haystack 3.2.0, publicada el 24 de septiembre de 2026. El framework se reescribió a fondo en torno a Haystack 2.0 hacia su arquitectura Component/Pipeline actual.

¿Cuál es la diferencia entre una Component y un Pipeline en Haystack?

Una Component es un único paso de procesamiento — un retriever, un embedder, un constructor de prompts o un generador. Un Pipeline es un grafo de components conectadas mediante llamadas explícitas .add_component() y .connect(); ejecutar el pipeline recorre el grafo en orden de dependencias.

¿En qué se diferencia Haystack de LlamaIndex?

Haystack organiza los pipelines en torno a Components explícitas y tipadas, conectadas en un grafo Pipeline. LlamaIndex organiza en torno a construir un Index sobre sus datos y consultarlo mediante un Retriever y un QueryEngine. LlamaIndex suele ser más rápido para empezar a indexar datos; el grafo explícito de Haystack ofrece más visibilidad y control para pipelines en producción.

¿En qué se diferencia Haystack de LangChain?

Ambos son frameworks Python code-first sin constructor visual en su núcleo open source. LangChain gira en torno a chains y, mediante LangGraph, a un state graph para agentes. Haystack gira en torno a un Pipeline de Components tipadas, donde el retrieval y la búsqueda se tratan como aspectos de primera clase y medibles, no como un eslabón de una cadena generalista.

¿Haystack necesita una base de datos vectorial específica?

No. Haystack incluye un Document Store en memoria para desarrollo y se integra con varias bases de datos vectoriales y backends de búsqueda, incluidos Elasticsearch, Weaviate y Pinecone, a través de la misma interfaz Component — cambiar de backend no requiere reescribir el pipeline.

¿Qué es la Haystack Enterprise Platform de deepset?

Es la oferta comercial de pago de deepset construida sobre el framework open source Haystack, que añade un constructor visual de pipelines y opciones de despliegue gestionado o auto-alojado. Es independiente del framework open source gratuito y auto-alojado bajo Apache 2.0 que cubre esta reseña.

Fuentes

← Volver a LLM locales avanzados

MCP