在传统数据科学中,设计并实现数据流水线至关重要,因为这能确保企业和公众可以从数据中获得可靠洞察。数据流水线使我们能够系统化地提取信息,并对其进行处理,以供后续使用。
随着自然语言处理(NLP)的发展以及大语言模型(LLM)的兴起,我们如今已经能够处理海量的非结构化数据,例如文本、音频和图像。这一范式转变释放出了惊人的能力。但当我们进入 2026 年时,整个行业也来到了一个关键的拐点。纯粹围绕 LLM 和智能体进行实验的时代已经结束。企业和用户不再问“AI 能不能做到这件事?”,而是开始问:“这个 AI 值不值得信任?”随着组织试图将 AI 智能体从彼此孤立的试点项目扩展到覆盖整个企业的工作流,关注重点已经从单纯的性能,急剧转向决策可靠性、可扩展性与治理能力。
这也带来了 2026 年的核心挑战:智能体可靠性危机。一个 AI 智能体的上限,取决于它所获得的数据和工具。一个消费有缺陷、未经验证或缺乏结构化的数据的智能体,不仅仅是一个不可靠的工具;它更是一种会规模化放大幻觉、加剧运营故障、并带来重大安全漏洞的机制。
本书提出了一个新的基础性论点:构建生产级、可信赖的智能体应用,其路径并不只靠提示工程。真正的路径在于,对经典数据流水线处理方法进行严格而系统的应用。过去那些稳健、以数据为中心的工程实践,正是未来可靠智能体系统不可或缺的基础。我们将掌握以数据为中心的 AI 方法,以构建可靠的智能体。
在整本书中,你将接触到数据应用在预处理、存储和管理方面所涉及的各种技术,重点是使用 deepset 的 Haystack 编排框架来构建复杂的 LLM 流水线。这段学习旅程将遵循一条清晰且合乎逻辑的主线,逐步提升复杂度与能力:
首先,我们将掌握核心框架 Haystack 2.0,理解其强大、显式且基于图的架构(第 3 章)。
接着,我们会立即把这一框架应用到当下最主流的 AI 模式中:检索增强生成(RAG),并从一个简单流水线逐步演进到高级的混合检索系统(第 4 章)。
然后,我们将从“它能跑起来”迈向“我们能证明它可靠”。我们会应用经典数据科学原则,构建自己的自定义组件,并生成一个带有真实基准答案的评测数据集(第 5 章)。
之后,我们将使用这个数据集,对流水线的可靠性、性能和成本进行量化评估,从而建立起可复现的 MLOps 实践(第 6 章)。
在证明可靠性之后,我们会让流水线具备可扩展性,把它从一个 Python 脚本,转变为一个生产级、容器化的微服务,使其可以部署到任何地方(第 7 章)。
接下来,我们会把这个可靠且可扩展的流水线,进一步升级为一个复杂智能体编排器可调用的工具,掌握“工具层 vs 编排层”的设计模式(第 8 章)。
我们还将探索 2025 年这一代协议与安全模型,理解如何让智能体在一个复杂的多智能体世界中实现安全互操作(第 9 章)。
最后,我们会从上下文工程的视角出发,拆解三种不同的智能体架构——它们都会使用第 8 章中开发的工具——并依据两个关键指标进行评估:Token 效率与系统完整性(结语)。
我们将从理解数据流水线的基础开始,并拆解它们如何嵌入当代智能体生态。到本章结束时,你将掌握数据流水线的本质,以及它们在智能体时代所扮演的全新关键角色。你将理解关键的文本处理技术,更重要的是,你会明白经典数据流水线、现代 NLP 流水线以及高级 LLM 流水线的各个组件,是如何逐步演化、彼此连接,并共同构成我们将在整本书中构建的那些可靠、可扩展系统的基础。
本章将涵盖以下主题:
- 什么是数据流水线?它们在智能体应用中的作用是什么?
- 把文本视作数据——文本处理技术概览
- 数据流水线、NLP 流水线和 LLM 流水线中的关键组件
- 2025 年的智能体流水线(MLOps / AgentOps 生命周期)
什么是数据流水线?它们在智能体应用中扮演什么角色?
广义上讲,数据流水线是一组将数据从一个系统提取并移动到另一个系统的处理过程,而且通常会在这一过程中对数据进行转换。数据流水线的关键阶段包括数据采集、数据处理、数据存储、数据分析、数据建模,以及结果交付。它提供了一种系统化的方法来自动化数据流转,其最终目标是将原始信息转化为适合提取洞察的形式。处理后的数据可以通过多种形式对外提供,例如仪表盘、报告、预测分析,甚至直接以应用的形式呈现。
为了将数据流水线放到更广泛的架构背景中理解,我们可以参考 Data Mesh(数据网格) 的原则。数据网格聚焦于四个关键原则,以应对大规模数据管理的复杂性:
- 面向领域的去中心化数据所有权:由最接近数据的人来管理数据,确保那些专门化的流水线(例如我们将在第 8 章开发的 Yelp 微服务)是由领域专家构建,而不是交由一个中心化团队统一完成。
- 数据即产品:将流水线视为高质量、可发现的数据产品。在本书中,我们的“产品”就是一个容器化微服务,它向自治 AI 智能体提供可靠数据。
- 自助式数据基础设施平台:提供标准化工具,让开发者能够在不重复造底层基础设施轮子的前提下,自主构建、部署并扩展自己的 NLP 流水线。
- 联邦式计算治理:确保这些去中心化流水线在安全性与互操作性方面,仍然遵循统一的全局标准,例如我们将在第 9 章探讨的 Model Context Protocol(MCP) 。
这些原则有助于应对数据源、使用场景和用户的多样性,同时提升面对数据环境变化时的响应速度。
在数据网格的语境下,数据流水线在确保数据能够跨越去中心化领域顺畅流动方面发挥着关键作用。它支持数据产品的创建与维护,提供数据自助服务所需的基础设施,并保障治理标准得到落实。这种方法增强了整个数据管理系统的可扩展性与响应能力。若想更深入理解数据流水线如何融入整体数据架构,可参考 Martin Fowler 的文章 《Data Mesh Principles and Logical Architecture》 。
我们也可以把数据流水线类比为 冲咖啡。整颗咖啡豆就像原始数据。我们知道,咖啡要被饮用,必须先经过研磨和冲煮。同样,这一阶段对于处理数据也至关重要。正如冲煮时间和方法会显著改变咖啡的风味层次,你在数据转换过程中所使用的技术与工具,也会影响最终洞察的质量与准确性;不仅如此,它还会影响“谁更可能欣赏这杯咖啡”,而在数据场景里,就是“谁更可能从最终产品中受益”。
在下一节中,我们将进一步了解:当开发数据驱动型产品时,为什么流水线设计如此重要。
奉上完美的一杯——新的数据消费者
作为顾客,你会对自己喜欢的咖啡类型有所偏好。要让咖啡师为你端上一杯完美的咖啡,他就必须理解你的口味偏好,并据此调整咖啡制作过程。在数据处理的语境中,数据消费者所扮演的角色,与购买咖啡的顾客非常相似。
然而,到了 2025 年及以后,这个数据消费者越来越不再是那个盯着仪表盘看的人类,而是一个自治型 AI 智能体。这种新的消费者,比人类消费者提出了高得多的要求。人类可以容忍一杯做得不够完美的咖啡——也就是略有瑕疵的数据、加载较慢的仪表盘、表达含糊的图表——并且仍然能够凭借直觉提取价值。但 AI 智能体做不到。
对于一个自治智能体来说,数据不是“洞察”,而是“指令”。有缺陷、未经验证或含糊不清的数据,不会只是导致一份稍微不准确的报告;它会引发关键性故障。这些故障可能包括:级联式幻觉,即一条错误数据触发一连串错误推理;在失败任务上浪费大量算力资源;或者带来严重的安全漏洞,例如过度代理(excessive agency) ——智能体在被操纵输入的驱动下,执行了具有破坏性、且并非预期的操作(Lasso Security,2025)。
因此,在智能体时代,数据流水线的角色已经发生了根本性变化。它的目的不再只是把原始数据转换为适合提取洞察的形式。它新的、关乎成败的使命,是把原始数据转换为一种适合可靠智能体推理的形式。
将流水线打造为生产级产品
为了将数据流水线放到更广泛的架构背景中理解,我们可以借用数据网格中的两个原则来服务于自身目标:数据即产品 与 自助式数据基础设施。本书将教你如何把自己的数据流水线真正构建成一个服务于智能体的数据产品。
这并不仅仅是一个比喻。在第 7 章中,我们会将流水线工程化为一个可扩展、可部署的产品:通过序列化,并借助 Hayhooks 以带有 REST API 的自助式微服务形式对外暴露。接着在第 8 章中,我们将构建一个基于 LangGraph 等编排框架的 AI 智能体,让它通过调用这个 API 端点,把该产品当作工具来消费。到了第 9 章,我们会通过 MCP 对这种模式进行标准化(Google,2024)。而在结语部分,我们将学习如何系统性地提升智能体的能力,同时把数据流水线视为彼此独立、经过优化的资产,从而使我们能够把注意力集中在 LLM 工作流本身,以实现其目标。
这种架构使数据流水线成为整个智能体系统的基础可靠性层。流水线就像那位咖啡师,在顾客(智能体)消费咖啡(数据)之前,先保证它的质量。那么,这种保证是如何实现的?答案是通过严格的量化评估(例如我们将在第 6 章中看到的 RAGAS 等框架)以及持续的可观测性(例如第 6 章同样会讲到的 Weights & Biases 之类的工具),而这些也将成为我们要掌握的核心能力。
这种把数据流水线置于可扩展、可响应的数据管理体系中心的方法,不仅增强了整体架构,也维护了治理标准,确保数据能够顺畅且可靠地流向它新的智能体消费者。
现代智能体最具决定性的特征,在于它们能够超越表格型数据集,直接在自然语言环境中运作。在本书中,我们将自然语言文本视为一种一等数据公民,并应用与经典数据科学相同的严格流水线原则,确保喂给智能体推理层的信息,能够像结构化数据库中的数据一样可靠、可验证。
接下来就让我们进一步展开这一点。
文本即数据——文本处理技术概览
文本是最丰富、也最常见的数据来源之一。我们可以从各种来源获得文本形式的数据,例如社交媒体帖子、在线评论、研究论文、企业文档、新闻文章以及网页浏览结果。然而,与能够装入表格和模式中的结构化数据不同,文本数据天然是非结构化的。要从文本中提取洞察,我们必须先将其转换成 LLM 能够处理的形式,例如将其分块(也称为分词 / tokenization),并使用嵌入模型将其向量化。文本经过转换之后,我们就可以将其用于翻译、情感分析、主题建模、信息检索(例如问答系统)以及文本分类等应用。
文本处理技术概览
在将文本存入数据库,或将其与机器学习算法或 LLM 结合使用之前,我们首先必须对其进行预处理。预处理是一个准备阶段,在这一阶段中,我们会对自然语言进行清洗、归一化和结构化。文本预处理的方法有很多。表 1.1 概述了经典 NLP 流水线中使用的一些关键技术:
| 技术名称 | 关键特征 | 示例 | 应用 |
|---|---|---|---|
| 分词(Tokenization) | 将文本拆分成更小的片段。 | Hello, my name is → Hell-o my-na-me is | 词频统计。 |
| 停用词去除(Stop word removal) | 去掉那些通常不承载重要含义的词。去除时不应改变上下文。 | “the”, “is” | 提升文本分析效率。 |
| 词干提取与词形还原(Stemming and lemmatization) | 将词语还原为其基础形式或词根形式。 | Running → run | 文本标准化。 |
| 词性标注(Part-of-speech tagging) | 识别每个词的语法成分。 | 名词、动词、形容词 | 理解词语和句子的上下文与含义。 |
| 命名实体识别(Named-entity recognition) | 识别并将命名实体分类到不同类别中。 | 类别包括人名、组织名、地点名 | 便于从海量文本中提取信息。 |
| 文本归一化(Text normalization) | 将文本转换为标准格式。 | 全部转小写、全部转大写、将空格替换为 _ | 确保一致性。 |
| 词频—逆文档频率(TF-IDF, Term frequency-inverse document frequency) | TF-IDF 是一种统计度量,用于评估某个词在一个文档语料库中的重要程度。 | 如果单词 cat 在一个包含 1,000 个词项的语料库中出现了 20 次,并且该语料库共有 10 篇文档,其中有 2 篇包含 cat,那么它的 TF-IDF 可按相应公式计算。 | 信息检索与文本挖掘。 |
| 文本嵌入(Text embeddings) | 将词语、句子或文档转换为数字向量,从而捕捉词语之间的语义关系。 | 例如词嵌入、序列嵌入、上下文嵌入等技术 | 使模型能够理解词语的上下文和语义。 |
表 1.1——文本处理技术概览
这些都是 NLP 流水线在数据清洗与预处理阶段通常会应用的关键技术。其中一些技术,例如分词和文本嵌入,对于确保带有神经网络这类模型的 NLP 流水线能够正常工作至关重要。这是因为,它们在自然语言与机器逻辑之间架起了桥梁:分词会将连续文本拆解成模型能够追踪的离散单元,而文本嵌入则会把这些单元转换为数值向量,从而捕捉词语真实的语义含义及其相互关系。没有这些步骤,LLM 就无法“看见”语言中的模式,也无法执行我们所要求的推理任务。在第 2 章中,我们将进一步深入探讨这些技术如何使我们能够与 LLM 进行交互。通过在这里对数据进行标准化和向量化,我们为后续在本书中要解决的智能体可靠性危机,奠定了所需的确定性基础。
现代重释:将经典 NLP 视为可靠的智能体工具
到了 2025 年,一个常见的误解是:既然 LLM 已经如此强大,经典 NLP 技术就已经过时了。事实恰恰相反。虽然强大的 LLM 也能执行诸如命名实体识别(NER)或情感分析之类的任务,但它往往并不是完成这些任务时最可靠、最具成本效益、也最易治理的方式。LLM 是一个概率性的、非确定性的系统;而一个经过微调的分类器,或者一个基于规则的 NER 模型,则是可预测、快速且低成本的。
概率性推理模型与经典 NLP 方法的确定性执行之间的区别,正是我们需要明确划分架构关注点的原因。我们可以设计并开发使用经典 NLP 技术的确定性流水线,再把这些流水线作为工具提供给由 LLM 驱动的智能体来调用。这种方式能够兼得两方面的优势:一方面是经过验证的方法所具备的可靠性,另一方面是 LLM 所具有的细腻理解能力与动态处理能力。
这就引出了本书将重点掌握的一个核心架构模式:工具层(tool)与编排层(orchestration)模型。一个现代的智能体系统——正如我们将在第 8 章中构建的那样——由两个彼此不同的层次组成:
- 编排层(The orchestration layer) :充当“大脑”或推理引擎(例如 LangGraph 状态机),负责管理高层逻辑并决定“要做什么”。
- 工具层(The tool layer) :由一组专用的高性能工具构成,供编排器调用,以执行特定任务。
经典 NLP 流水线正是在这里获得了新生。它们不再是上一个时代的独立遗留产物,而是重新成为这些稳健智能体工具的核心构件。例如,在第 8 章中,我们将把经典的 NER 和情感分析流水线构建成微服务工具。届时,不再是让一个单一的 LLM 同时完成地点识别和情感分析,而是把 LLM 视为一个编排器,由它把任务委派给这些微服务工具去完成。与让一个单体式的大模型包办一切相比,这种方式要稳健得多、可调试得多,也更易治理。掌握经典数据科学技能——也就是构建用于预处理、分词和嵌入的流水线——正是构建高级、可靠智能体的前提。
数据、NLP 与 LLM 流水线中的关键组成部分
数据流水线充当结构化通路,引导原始数据经过多个转换阶段,最终目标是产出可执行的洞察。数据流水线可以根据特定目标进行定制,同时确保数据能够被高效地处理、分析,并整理成适合展示的形式。本节将展示这些流水线的演化路径:从经典数据处理,一直到本书所关注的现代智能体系统。
经典数据流水线与 NLP 流水线(基础层)
从宏观上看,一个通用的数据流水线通常会从 API、IoT 设备或文件等来源摄取数据,对其进行处理,并将其存储到数据库或数据仓库中。随后,这些数据被用于分析、报告和可视化。这一流程如图 1.1 所示。
图 1.1——通用数据流水线的各阶段
随后,会对处理后的数据应用各种工具与算法,以提取洞察、构建模型或生成报告。这些洞察通常会通过图表和仪表盘进行可视化,从而便于终端用户理解。在分析和可视化阶段,通常还会存在一个迭代过程,因为这些阶段往往会揭示:为了达到预期结果,当前所使用的数据或算法是否还不够充分或不够合适。它也使得尝试不同变量成为可能。
当分析与可视化阶段达到令人满意的状态后,数据便会通过报告、Web 应用或商业智能软件等方式交付给用户。在这一阶段,数据消费者还可能进一步提供反馈,指出哪些方面值得继续扩展或改进。
构建经典 NLP 流水线与此相似,但由于文本本身是非结构化的,因此也存在一些关键差异。这类流水线通常遵循以下关键步骤:
- 文本采集(Text acquisition) :从社交媒体、在线评论、企业文档或 Web 检索结果等多种来源收集原始文本。
- 清洗(Cleaning) :对原始输入进行整理,以确保数据质量高、噪声少。
- 分词(Tokenization) :这是基础步骤,即把连续文本拆分为离散单元,例如词、字符或子词。
- 特征提取(Feature extraction) :将文本转换为数值表示形式,例如 TF-IDF 分数或嵌入向量,以捕捉语义含义。
- 模型训练与推理(Model training and inference) :利用这些提取出的特征,去训练或使用特定的、确定性的模型,以完成分类、情感分析等具体任务。
关键决策包括存储方案(例如 Elasticsearch)、处理模式(实时还是批处理),以及版本控制的重要性(代码使用 Git,数据使用 DVC),以确保系统具备可复现性与可扩展性。这些经典的、确定性的流水线,构成了我们后续构建工作的可靠且可复现的基础。
为了打通原始文本与机器推理之间的鸿沟,我们首先必须掌握那些能够把非结构化语言转换成数值数据的技术。在下一节中,我们将探讨分词与嵌入:这两个关键过程使我们能够把人类语言中的细微差别表示为数学向量,为经典 NLP 工具和现代 LLM 都提供必要的输入。
文本分词与嵌入
分词是将连续文本拆分为离散单元(例如词、字符、子词和短语)的过程。它是 NLP 中的基础步骤,对于传统方法(例如 Scikit-learn 的 CountVectorizer 类)以及当今许多最先进语言模型背后的基础架构(例如 Transformer)都至关重要。
文本完成分词后,每一个 token 都会被映射为一个唯一的整数或 ID。这个过程被称为编码(encoding) 。在更高级的任务中,token 会进一步被表示为向量。我们使用词向量化方法,把词语或短语从词表映射到相应的数字向量。这些向量能够捕捉语义含义以及词与词之间的关系。
假设我们有一个非常小的词表,只包含 “king”、“queen”、“man” 和 “woman” 这几个词。使用词嵌入时,我们可以把这些词表示为多维空间中的向量。下面是一个简单的三维示例:
"king" = [0.8, 0.6, 0.1]
"queen" = [0.8, 0.6, -0.1]
"man" = [0.4, 0.2, 0.1]
"woman" = [0.4, 0.2, -0.1]
这里有几个关键点需要注意:
- 语义相似性(Semantic similarity) :含义相近的词,在向量空间中彼此距离也更近。例如,“king” 和 “queen” 的向量就很相似。
- 关系(Relationships) :向量之间的差异可以表达关系。例如,“king” 和 “queen” 之间的差值
[0, 0, 0.2],与 “man” 和 “woman” 之间的差值[0, 0, 0.2]是类似的。
表 1.2 展示了不同类型的分词方式,以及它们的特征与缺点:
| 类型 | 特征 | 缺点 |
|---|---|---|
| 词级分词(Word tokenization) | 根据空格或分隔符切分文本,也就是以词为单位进行分词。 | 难以处理词表中不存在的词(OOV,out-of-vocabulary)。 |
| 字符级分词(Character tokenization) | 将文本拆分为单个字符。 | 虽然可以处理 OOV 词,但输入和输出句子的长度会迅速增加,导致字符之间关系的学习变得困难。 |
| 子词分词(Sub-word tokenization) | 将文本拆分为更小但有意义的单元(n-gram 字符)。 | 效果会因具体采用的技术不同而有所差异。 |
| 字节对编码(Byte Pair Encoding, BPE) | 一种子词分词方式,通过反复合并高频字符对或字符序列来完成分词。 | 有时会导致对输入数据以及某些特定词语或短语的分词效果不够理想。 |
| SentencePiece | 一种数据驱动、无监督的文本分词与反分词器,常用于基于神经网络的文本生成任务。 | 有时会以损失语义的方式切分词语;特殊字符也会被当作独立 token。 |
表 1.2——文本分词的类型
这个简单的 “king/queen” 示例,揭示了一个复杂的工程现实:选择哪一种嵌入模型来把文本块转换成数值表示,是现代 AI 流水线中最关键的数据科学决策之一,它会对可靠性、性能和成本产生深远影响。
要说明这一点,最合适的视角就是 RAG。我们将在第 4 章系统掌握这一模式,它利用嵌入将 LLM 的回答锚定在事实数据之上。要构建一个可用的 RAG 系统,必须遵守一条不可妥协的架构规则:在流水线的索引阶段与查询阶段,必须使用完全相同的嵌入模型。
一个 RAG 流水线(第 4 章)有两个阶段:索引阶段,在这一阶段中,文档会被处理并存储进向量数据库;查询阶段,在这一阶段中,用户的问题会被实时处理。正如我们将在第 6 章详细探讨的那样,一个嵌入模型会创建一个独特的高维向量空间。若使用一个模型来创建“地图”(索引),却使用另一个模型来创建“指南针”(查询),正如一项分析所说,这“就等同于拿着巴黎的地图去东京街头导航”。这种向量空间的不匹配会导致流水线发生灾难性失败。这条“经典”的数据科学规则,是现代 RAG 不可妥协的基础。
第二个问题是:我们怎么知道,所选择的嵌入模型对于我们的特定领域数据是否真的有效?“嵌入能够捕捉语义关系”这一简单说法,本身是一个需要被证明的假设。这时,严格的、数据驱动的评估实践就变得至关重要。在第 5 章中,我们将构建自己的自定义组件:一个知识图谱生成器和一个合成测试集生成器。我们会利用这些组件,创建一个与我们的文档相匹配的 ground-truth 测试数据集。然后在第 6 章中,我们将使用 RAGAS 等评估框架,对流水线在 faithfulnes、context recall 等指标上的表现进行量化评分,从而证明我们所选的嵌入模型确实有效。
最后,这一选择本身也是一个核心的商业与 MLOps / FinOps 权衡问题。正如我们将在第 6 章中分析的那样,较大的嵌入模型,例如 OpenAI 的 text-embedding-3-large,相较于 text-embedding-3-small 可能只带来边际性能提升,但其成本却高出 6.5 倍。这样的权衡值不值得?为了回答这个问题,我们将使用 Weights & Biases 之类的可观测性工具(第 6 章),不仅跟踪性能得分,还跟踪流水线每次查询的美元成本,从而支持数据驱动的业务决策。文本分词与嵌入构成了将文本转换为数值格式的基础。本书中我们会反复用到的一种关键方法是信息检索。在第 4 章中,我们将重点讨论如何利用嵌入执行语义检索,并进一步探索如何利用稀疏检索与稠密检索——也就是将基于关键词的搜索与嵌入能力结合起来的方法。随后,这类检索会与 LLM 结合,以生成基于文档语料的回答。接下来我们更仔细地看一下这一点。
大语言模型(LLMs)
LLM 指的是一类用于处理和生成人类语言文本的深度学习模型。LLM 的特点是拥有极其庞大的参数规模(从数亿到数百亿不等)。正是这种规模,使它们能够捕捉语言中的模式,并且无需特定任务的数据,就可以执行广泛的 NLP 任务。
大多数 LLM 都建立在 Transformer 架构之上(Vaswani et al., 2021)。它们通常先在大规模文本语料上进行预训练,以学习语言结构和语义。在完成这一预训练阶段后,再针对特定任务进行微调,例如翻译、问答、情感分析或分类。
知名的 LLM 包括 OpenAI 的 GPT(generative pre-trained transformer)和 Google 的 BERT(bidirectional encoder representations from transformers)。LLM 的一个优势,在于它们能够将从一个任务中获得的知识迁移到另一个任务上,这一过程被称为迁移学习(transfer learning) 。
另一方面,它们庞大的规模通常要求在训练、微调和托管 LLM 时使用大量计算资源,例如 GPU 和内存。在第 2 章中,我们将回顾若干已被证明可以降低与非私有 LLM 交互成本的技术。
另一个挑战是,它们有时会生成错误的、有偏见的或毫无意义的输出,也就是所谓的幻觉(hallucinations) 。诸如 RAG(Lewis et al., 2022)之类的技术,可以让 LLM 在保留生成能力的同时,从数据库中提取事实正确的信息。我们也会在第 2 章中更深入地探讨这一点,并在第 4 章中通过流水线来实现 RAG。
现代 LLM 流水线(架构跃迁)
LLM 流水线不仅仅是一个新组件;它代表的是一种新架构。从本质上看,LLM 流水线是一系列结构化的数据处理步骤,在这个过程中,LLM 只是众多专用组件中的一个。与简单的聊天界面不同,流水线能够自动化信息流。它会处理从数据检索、数据清洗,到提示构造,再到最终响应生成的整个过程,从而确保模型的输出是建立在特定且经过验证的数据基础上的。
为了构建这些现代系统,我们将使用本书的核心框架 Haystack 2.0。正如我们将在第 3 章中探讨的那样,Haystack 是一个原生 Python 的显式框架,构建在有向图(DG)架构之上。这样的 DG 结构使现代 AI 所需的高级非线性流水线成为可能,让我们能够以透明和可控的方式构建并行处理分支、条件路由以及复杂的数据流。
借助 Haystack,我们将构建第 4 章引入的 RAG 模式:
- Naive RAG:基础流水线,使用单一的语义检索器(基于嵌入)来查找文档,再由生成器生成答案。
- Hybrid RAG:更高级、面向生产的模式。该流水线会并行运行两种检索方法:稀疏 / 词法检索(例如 BM25)与稠密 / 语义检索。然后它会融合两者结果,并使用 reranker 在生成前选出最匹配的文档。这就是我们将要构建和评估的可靠流水线。
表 1.3 展示了这种从静态数据处理到动态编排的演进,为我们将要掌握的复杂度与能力提升,提供了一张可视化地图:
| 流水线类型 | 核心原则 | 关键组件 | 主要用途 | 对应章节 |
|---|---|---|---|---|
| 经典 NLP | 确定性转换 | Cleaner、splitter、TF-IDF、classifier、NER extractor | 特征提取、文本分类 | 1、8、结语 |
| Naive RAG | 语义检索与生成 | Document embedder、query embedder、retriever、prompt builder、LLM generator | 面向文档的简单问答 | 4、6、7 |
| Hybrid RAG | 稠密 + 稀疏检索,并配合 reranking | BM25 retriever、embedding retriever、document joiner、ranker、LLM generator | 高精度、可靠问答 | 4、6、7 |
| Agentic system | 编排 + 工具使用 | Agent(orchestrator)、component tool(如 hybrid RAG、NER、情感分析) | 动态、多步问题求解 | 8、结语 |
表 1.3——流水线架构的演化
在现代智能体工作流中,LLM 并不是单一组件。相反,它在不同的架构层中扮演两个彼此不同、但同样重要的角色:工具层 和 编排层。理解这种关注点分离,是构建可靠、可扩展智能体系统的关键。
作为工具层专家的 LLM
首先,LLM 可以作为数据流水线内部一个高度专用、受约束的引擎存在。最典型的例子,就是我们将要构建的 RAG 流水线中的 Generator 组件。
在这个角色里,LLM 不被允许自由发挥推理能力。它的职责被严格限定为:
- 接收一个已经被检索出的、经过验证的上下文所“增强”的提示词(即来自我们经典数据流水线的“数据”)。
- 只允许基于这些给定上下文综合生成答案,从而有效防止它产生幻觉,或调用它自身的通用知识。
这正是我们所强调的“经典数据流水线处理”。通过这种约束,我们把 LLM 从一个不可预测的创造性引擎,转变成一个可靠、确定性的“工具”。正如我们将在第 7 章中探讨的那样,随后我们会把整个这样的可靠流水线(例如我们的 hybrid RAG 系统)打包起来,并借助 Docker 与 Hayhooks 将其部署为可扩展的容器化微服务,之后还能进一步标准化为一个 MCP Server。
在这一层中,LLM 不是“脑子”;它只是一个可靠机器中的高性能专用部件。
作为编排层通才的 LLM
其次,另一个 LLM 会充当整个智能体系统的大脑,也就是编排器。这正是我们将在第 8 章中引入 LangGraph 等编排框架时要探讨的角色。这个 LLM 的职责不是知道事实,也不是综合数据;它的职责是推理、规划与委派。
这个编排型 LLM 会获得以下输入:
- 来自用户的高层目标,例如:“帮我找到评分最高的餐厅并预订一个座位”
- 一套可用工具组成的“工具带”
- 一个结构良好的提示词,也就是指导 LLM 如何响应和行动的指令
这些工具并不仅仅是简单函数。它们实际上是我们在工具层中构建出来的那些稳健、可靠的微服务,例如我们已经部署好的 RAG 流水线微服务,或者一个 MCP Server。
随后,这个编排型 LLM 会动态生成一个计划:
- Thought:“用户想找一家餐厅。我应该先用搜索工具找到几个选项。”
- Action:调用所选工具。
- Observation:收到一组餐厅列表。
- Thought:“现在我需要预订其中一家。我先用信息工具获取地址,然后调用预订 API 工具。”
- Action:按顺序调用下一个工具。
这里存在多种模式与架构,例如:一个 LLM 配多个专用工具;多个 LLM,各自配备专用工具;以及 supervisor 架构,即一个 LLM 将任务委派给拥有各自工具和提示词的其他 LLM。
当我们把 LLM 与一组特定工具、这些工具的详细描述,以及能够使其进行规划、推理和迭代的提示词结合起来时,我们就得到了 AI agent 的定义。
表 1.3 中的 agentic system 代表了 AI 架构中的一个关键分叉。到了 2025 年,业界通常会区分两类智能体:浅层智能体(shallow agents) 与 深层智能体(deep agents) 。理解这一区分,对于理解本书所教授的稳健流水线工程为何重要,至关重要。
浅层智能体 是最常见的模式:它本质上是在 LLM 外层套了一层简单循环。它按照“接收—推理—响应”的循环工作,往往只依赖上下文窗口来充当状态。我们将在第 8 章的动手迷你项目中看到这一模式。它对于简单、事务性的任务确实有效,但一旦面对复杂、多步骤或长时运行的问题,这种架构就会失效。由于它依赖的是短暂的上下文窗口,因此很容易出现上下文溢出、目标丢失,以及出错后无法恢复等问题,这使它难以胜任企业级任务。
深层智能体 则是一种专门为可靠性与复杂性设计的演进式架构。深层智能体并不是一个单体式存在,而是一个建立在若干支柱之上的层级化系统,而这些支柱正是本书的核心关注点:
- 层级式委派(Hierarchical delegation) :深层智能体不会亲自“做完一切”;它会把任务委派给专用且可靠的子智能体或工具。这正是我们将要掌握的“工具 vs 编排”模式。我们在第 4 到第 7 章中构建、评估并部署的那些稳健 Haystack 流水线,正是这里所说的“工具”。
- 显式规划(Explicit planning) :与浅层智能体依赖“思维链”不同,深层智能体会使用编排器(例如 LangGraph)来创建并维护显式、结构化的计划。
- 持久记忆(Persistent memory) :深层智能体通过使用外部记忆,克服上下文窗口的限制,例如我们为 RAG 流水线构建和管理的向量数据库。
本书的核心论点是:没有可靠的工具层,就不可能构建出可靠的深层智能体。 深层智能体的推理能力,完全取决于它所委派的工具是否可靠。因此,经典数据科学中的流水线工程、量化评估与可扩展部署实践,并没有被智能体取代;相反,它们已经变成了智能体不可或缺的基础。
这种双层系统,也就是工具层 vs 编排层模式,定义了现代、可靠的智能体 AI。位于编排层的 LLM(也就是智能体“大脑”)提供流畅、动态的推理能力;但它的规划,是建立在工具层那些同样由 LLM 驱动、却受到经典数据科学原则约束、因此具备可靠性、可验证性和可扩展性的坚实基础之上的。正是这种分离,让我们得以从简单的 AI 实验,迈向可以真正被信任的生产级系统。
2025 年的智能体流水线——MLOps / AgentOps 生命周期
过去的生成式 AI 项目生命周期,通常是一个线性的过程:从问题范围界定,一直到最终部署。而到了 2025 年及以后,这种模式已经被一个持续循环的 MLOps / LLMOps / AgentOps 闭环所取代,在这一闭环中,生产系统会被不断评估、持续改进,并反复重新部署。
本书的结构安排,正是为了向你展示如何走出“它在我机器上能跑”这一开发阶段,转而从企业级角度去解决可靠性、可扩展性和安全性问题:
- 可靠性与反馈:在第 5 章和第 6 章中,我们将介绍一种系统化的方法,用于评估和衡量 RAG 流水线。在第 9 章中,我们将探讨如何通过上下文工程来改进智能体系统,以及如何借助 LangGraph 和 LangSmith 为智能体建立可观测性。
- 可扩展性与部署:在第 7 章中,我们将学习如何把流水线序列化为一个完全集装箱化的(Docker)微服务,并通过一个专门框架(Hayhooks)对外提供服务,该框架会自动将我们的流水线暴露为一个面向生产环境的 API;这一框架还将使我们能够借助 Kubernetes 等服务进行序列化与扩展。
- 互操作性与安全性:这是 2025 年最关键的更新。一旦我们的流水线成为可扩展的微服务,其他系统和智能体要如何使用它?在第 9 章中,我们将通过两个关键协议来介绍工具层与编排层的标准化:MCP(Google,2024)和 agent-to-agent(A2A)协议(Google,2025)。
- 面向 AI 的 SRE 方法:在本书的结语中,我们将说明,可靠性并不是模型智能本身的属性,而是其外围架构的属性。
- 可量化的成功:在第 5 章和结语中,我们将跟踪应用成本,并通过 A/B 测试和实验,给出如何针对 token 使用量优化 LLM 应用的实际案例。第 5 章将提供一个衡量 RAG 应用 token 使用情况的实践指南,而结语则会比较不同智能体架构选择如何影响一个智能体在解决问题时所消耗的 token 总量。
表 1.4 为整本书提供了一张高层路线图。它将你将要掌握的整个过程概念化,把现实世界中的每一个核心挑战映射到相应解决它的章节:
| 生命周期支柱 | 核心挑战 | 关键技术 / 技术手段 | 对应章节 |
|---|---|---|---|
| 编排(Orchestration) | 我如何构建并连接流水线组件? | Haystack 2.0、有向图(DGs)、LangGraph 1.0 | 3、8、9 |
| 核心应用(Core application) | 我如何构建一个现代化、高性能的 RAG? | Naive RAG、Hybrid RAG(稀疏 + 稠密)、重排(reranking) | 4 |
| 可靠性(Reliability) | 我如何创建“ground-truth”数据来测试我的流水线? | 自定义组件、知识图谱生成器、合成测试生成器 | 5 |
| 可靠性(Reliability) | 我如何定量证明我的 RAG 既可靠又具有成本效益? | RAGAS(faithfulness、recall)、可观测性(W&B)、FinOps | 6 |
| 可扩展性(Scalability) | 我如何将流水线部署到可承载生产级流量的环境? | Docker(容器化)、Hayhooks(API 服务)、CI/CD、LangSmith、LangGraph | 7、8、9 |
| 智能体模式(Agentic pattern) | 我如何从一个流水线“毕业”为一个智能体? | 工具层 vs 编排层模式、Haystack(作为工具)、LangGraph(作为编排器) | 4、8、结语 |
| 互操作性(Interoperability) | 我的智能体与工具如何以标准化方式连接? | MCP、A2A 协议 | 9 |
| 自我改进(Self-improvement) | 我的智能体如何从失败与反馈中学习? | Weights & Biases、上下文工程、LangSmith | 6、9、结语 |
表 1.4——本书路线图:从数据流水线到可靠智能体
这种从静态、线性项目演化为持续性的 MLOps / AgentOps 闭环,正是 2025 年及以后最核心的挑战与机遇。正如本书将要展示的,我们的关注点已经不再是仅仅构建一个单独的流水线,而是要设计一个端到端、企业级的系统。这段旅程始于对可靠性的掌握:借助第 5 章、第 6 章和第 9 章中详细介绍的严格评估与反馈机制,对系统进行定量测量和持续改进。接着,我们实现可扩展性:把经过验证的流水线序列化并容器化为面向生产的微服务,为企业级部署做好准备——这一点我们将在第 7 章中付诸实践。最后,我们会处理互操作性与安全性这一关键前沿问题,利用第 9 章中介绍的新兴标准(例如 MCP 和 A2A 协议),确保我们那些可靠、可扩展的组件,能够安全而高效地参与到新的、互联的智能体生态之中。
重要说明
已经创建了一个完整的代码仓库,用于在各章中提供动手实践体验,确保你拥有一个可以按自身需求调整的模板:
https://github.com/PacktPublishing/Building-Natural-Language-and-LLM-Pipelines
该仓库按章节组织,包含 Jupyter Notebook、脚本、示例 Docker 文件,以及一个最终的综合项目,以帮助你应用本书中将学到的概念。
小结
数据流水线由一系列系统化步骤组成,用于将数据从原始格式处理成可被各种用户使用和消费的格式。在现代语境下,这些流水线正从面向人类可读分析的简单线性流程,演化为复杂 AI 智能体的基础可靠性层。
我们梳理了这些系统的演进路径:从通用数据流水线和经典 NLP 流水线,到现代由 LLM 增强的流水线。在所有这些场景中,一个共同点都是:都需要严格的数据源识别、清洗和预处理。对于 NLP 和 LLM 流水线来说,关键步骤还包括分词(拆解词语)和嵌入(构建数值表示)。
当我们迈入 2026 年,这些流水线的设计正在转向解决新的复杂挑战。我们现在必须在一个可互操作、自治智能体的世界中,同时考虑可靠性、可扩展性、成本效益与安全性。
本书将带领你走完一段完整旅程。我们会先掌握那些“经典”的数据科学技能,然后用它们构建一个最先进的 RAG 流水线,并以定量方式证明其可靠性。接着,我们会把这个流水线扩展为一个生产级微服务,最后再将它升级为一个复杂智能体生态中值得信赖、具备互操作性的工具。
延伸阅读
- Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, L., and Polosukhin, I. (2023). Attention Is All You Need.
- Lewis, P., Perez, E., Piktus, A., Petroni, F., Karpukhin, V., Goyal, N., Küttler, H., Lewis, M., Yih, W., Rocktäschel, T., Riedel, S., and Kiela, D. (2021). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks.
- Sennrich, R., Haddow, B., and Birch, A. (2016). Neural machine translation of rare words with subword units.
- Fowler, M. (2019). Data mesh principles and logical architecture.
- OWASP GenAI (2025). LLM06:2025 Excessive Agency.
- Lasso Security (2025). The top agentic AI security threats you need to know in 2025.
- Jabloun, M. (2025). Don’t Break Your RAG: This is why You Must Use the Same Embedding Model for Retrieval and Indexing.
- Google (2024). What is the MCP and how does it work?
- Google (2025). Announcing the Agent2Agent Protocol (A2A).