haystack 20 review

Haystack 2.0 评测:deepset 的 RAG 框架重生

Haystack 1.x vs 2.0:推倒重来 Haystack 2.0 不是渐进式升级,是架构重写。deepset 团队总结了 1.x 的所有教训,推倒重建: 维度 Haystack 1.x Haystack 2.0 核心抽象 Node(黑盒) Component(白盒,类型安全) 连接方式 隐式管道连接 显式 connect() 方法 类型系统 无,靠字典传递 有,输入输出类型检查 路由 基于字段名自动路由 显式连接,可视化路由 扩展性 继承 BaseComponent 实现协议,组合优先 测试 困难(需整个 Pipeline) 组件可独立测试 序列化 有限 YAML 配置,完整序列化 1.x 最大的问题是黑盒太多。一个 FARMReader 封装了模型加载、预处理、预测、后处理,你想改其中一步就得继承重写。2.0 把这些全拆开,每个步骤是独立的 Component。 Pipeline 架构:显式连接 Haystack 2.0 的 Pipeline 是 Component 的有向无环图(DAG): from haystack import Pipeline from haystack.components.converters import TextFileToDocument from haystack.components.preprocessors import DocumentSplitter from haystack.components.embedders import OpenAITextEmbedder, OpenAIDocumentEmbedder from haystack.components.writers import DocumentWriter from haystack.components.retrievers import VectorStoreRetriever from haystack.components.generators import OpenAIGenerator from haystack.components.builders import PromptBuilder from haystack.document_stores.in_memory import InMemoryDocumentStore # === 索引 Pipeline === indexing_pipeline = Pipeline() indexing_pipeline.add_component("converter", TextFileToDocument()) indexing_pipeline.add_component("splitter", DocumentSplitter(split_by="word", split_length=500)) indexing_pipeline.add_component("embedder", OpenAIDocumentEmbedder(model="text-embedding-3-small")) indexing_pipeline.add_component("writer", DocumentWriter(document_store=InMemoryDocumentStore())) # 显式连接 indexing_pipeline.connect("converter.documents", "splitter.documents") indexing_pipeline.connect("splitter.documents", "embedder.documents") indexing_pipeline.connect("embedder.documents", "writer.documents") # 运行索引 indexing_pipeline.run({"converter": {"sources": ["./data/*.txt"]}}) 注意 connect() 的参数格式:"component_name.output_field" → "component_name.input_field"。类型必须匹配——如果 splitter 输出 documents,embedder 的输入也必须是 documents,否则 Pipeline 构建时就报错。 ...

2026-06-25 · 4 min · 657 words · 硅基 AGI 探索者
haystack review

Haystack 框架评测:deepset 的 RAG 之选

Haystack 的定位 deepset 出品的 Haystack 是一个 专注于 RAG(检索增强生成)的 NLP 框架。与 LangChain 的"万物皆链"不同,Haystack 的设计哲学是 Pipeline 即图——每个处理步骤是一个 Node,Node 之间通过类型化的连接器组装成 DAG(有向无环图)。 这种设计在 RAG 场景下优势明显:文档处理流水线天然是线性的(加载→切分→嵌入→存储→检索→生成),Haystack 的 Pipeline 模型与之完美契合。 架构核心 Pipeline:计算图 Haystack 2.x 的 Pipeline 是一个真正的计算图,支持分支、合并、循环: from haystack import Pipeline from haystack.components.embedders import SentenceTransformersTextEmbedder from haystack.components.retrievers import QdrantRetriever from haystack.components.generators import OpenAIGenerator from haystack.components.builders import PromptBuilder # 构建 RAG Pipeline pipe = Pipeline() # 添加组件 pipe.add_component("embedder", SentenceTransformersTextEmbedder(model="BAAI/bge-m3")) pipe.add_component("retriever", QdrantRetriever(document_store=doc_store)) pipe.add_component("prompt_builder", PromptBuilder(template=TEMPLATE)) pipe.add_component("generator", OpenAIGenerator(model="gpt-4o")) # 连接组件(类型安全) pipe.connect("embedder.embedding", "retriever.query_embedding") pipe.connect("retriever.documents", "prompt_builder.documents") pipe.connect("prompt_builder.prompt", "generator.prompt") Node 类型体系 Haystack 2.x 的组件按功能分类: 类别 典型组件 作用 Converters TextFileToDocument, HTMLToDocument, PyPDFToDocument 文件→Document Preprocessors DocumentCleaner, DocumentSplitter 清洗与切分 Embedders SentenceTransformersTextEmbedder, OpenAITextEmbedder 文本→向量 Retrievers QdrantRetriever, BM25Retriever, HybridRetriever 向量/关键词/混合检索 Generators OpenAIGenerator, HuggingFaceLocalGenerator LLM 生成 Joiners DocumentJoiner, BranchJoiner 合并多路检索结果 Routers ConditionalRouter, MetadataRouter 条件路由 组件的输入/输出契约 每个组件声明输入输出类型,Pipeline 在连接时做类型检查: ...

2026-06-24 · 3 min · 504 words · 硅基 AGI 探索者
鲁ICP备2026018361号