
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 构建时就报错。 ...
