haystack
$
npx mdskill add TerminalSkills/skills/haystackBuild and deploy RAG pipelines using the Haystack framework by deepset
- Helps developers create composable LLM application pipelines
- Integrates with 20+ LLM providers and vector databases
- Uses a pipeline-as-code approach with retrievers, readers, and generators
- Connects to document stores for efficient retrieval and generation
SKILL.md
.github/skills/haystackView on GitHub ↗
---
name: haystack
description: >-
You are an expert in Haystack, the open-source framework by deepset for
building production RAG pipelines and LLM applications. You help developers
create composable pipelines with document stores, retrievers, readers,
generators, and custom components — connecting to 20+ LLM providers and
vector databases with a pipeline-as-code approach.
license: Apache-2.0
compatibility: ''
metadata:
author: terminal-skills
version: 1.0.0
category: AI & Machine Learning
tags:
- rag
- pipeline
- nlp
- search
- retrieval
- deepset
- python
---
# Haystack — LLM Application Framework by deepset
You are an expert in Haystack, the open-source framework by deepset for building production RAG pipelines and LLM applications. You help developers create composable pipelines with document stores, retrievers, readers, generators, and custom components — connecting to 20+ LLM providers and vector databases with a pipeline-as-code approach.
## Core Capabilities
### RAG Pipeline
```python
from haystack import Pipeline
from haystack.components.embedders import OpenAIDocumentEmbedder, OpenAITextEmbedder
from haystack.components.writers import DocumentWriter
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
from haystack.components.generators import OpenAIGenerator
from haystack.components.builders import PromptBuilder
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack import Document
store = InMemoryDocumentStore()
# Indexing pipeline
indexing = Pipeline()
indexing.add_component("embedder", OpenAIDocumentEmbedder())
indexing.add_component("writer", DocumentWriter(document_store=store))
indexing.connect("embedder", "writer")
docs = [Document(content="Haystack supports 20+ LLM providers..."), Document(content="Pipelines are composable...")]
indexing.run({"embedder": {"documents": docs}})
# Query pipeline
template = """Given these documents, answer the question.
Documents: {% for doc in documents %}{{ doc.content }}{% endfor %}
Question: {{ question }}
Answer:"""
rag = Pipeline()
rag.add_component("embedder", OpenAITextEmbedder())
rag.add_component("retriever", InMemoryEmbeddingRetriever(document_store=store))
rag.add_component("prompt", PromptBuilder(template=template))
rag.add_component("llm", OpenAIGenerator(model="gpt-4o"))
rag.connect("embedder.embedding", "retriever.query_embedding")
rag.connect("retriever", "prompt.documents")
rag.connect("prompt", "llm")
result = rag.run({"embedder": {"text": "What providers does Haystack support?"}, "prompt": {"question": "What providers?"}})
print(result["llm"]["replies"][0])
```
### Custom Components
```python
from haystack import component
@component
class MetadataFilter:
@component.output_types(documents=list[Document])
def run(self, documents: list[Document], category: str):
return {"documents": [d for d in documents if d.meta.get("category") == category]}
```
## Installation
```bash
pip install haystack-ai
```
## Best Practices
1. **Pipeline-as-code** — Connect components explicitly; clear data flow, easy debugging
2. **Document stores** — InMemory for dev, Qdrant/Pinecone/Weaviate for production
3. **PromptBuilder** — Jinja2 templates for dynamic prompts; inject documents, history, metadata
4. **Custom components** — Use `@component` decorator; define inputs/outputs, Haystack handles wiring
5. **Branching** — Pipelines support conditional routing; different paths based on query type
6. **Serialization** — `pipeline.dumps()` / `Pipeline.loads()` for saving/loading pipeline configs
7. **Evaluation** — Built-in eval components for faithfulness, relevance, answer correctness
8. **Streaming** — Use `OpenAIGenerator(streaming_callback=...)` for real-time token delivery