@freeCodeCamp:多智能体系统不仅需要提示词,还需要结构。在本书中,你将使用LangGraph来建模……
摘要
这篇文章介绍了一本完整的书籍,内容涵盖如何使用LangGraph、MCP、A2A和Ollama构建生产就绪的多智能体AI系统,并提供可运行的代码和实际应用案例。
查看缓存全文
缓存时间: 2026/09/12 16:57
多智能体系统不仅需要提示词,更需要结构。在本书中,你将学习如何使用LangGraph构建工作流、通过MCP访问工具与数据、以及运用A2A协议实现智能体间的协调。Sandeep将带你构建可投入生产环境、具备可扩展性的智能体流水线。https://freecodecamp.org/news/how-to-build-a-multi-agent-ai-system-with-langgraph-mcp-and-a2a-full-book/…
如何使用LangGraph、MCP与A2A构建多智能体AI系统【完整书籍】
来源:https://www.freecodecamp.org/news/how-to-build-a-multi-agent-ai-system-with-langgraph-mcp-and-a2a-full-book/
构建一个能够回答问题或执行搜索的单一AI智能体早已不是难题。只需少量教程和几小时的工作即可实现。然而大多数教程跳过了关键的工程层——正是这一层使得多智能体系统能够可靠地在生产环境中运行。如何处理进程崩溃后的状态恢复?如何为智能体提供标准化工具访问接口,而无需为每个集成编写专用适配器?如何协调基于不同框架构建的智能体?如何检测智能体输出质量的下降?这些都是基础设施层面的问题,本书将通过可运行的代码为你解答。无需云账户,无需API密钥,零持续成本。
你将接触四种在协议层面解决这些问题的技术:
- LangGraph 用于有状态的多智能体编排
- MCP(模型上下文协议) 用于标准化工具集成
- A2A(智能体间协议) 用于跨框架智能体协调
- Ollama 用于本地大语言模型推理
为使每个概念具体化,你将在全书中构建一个真实系统:学习加速器。它能规划学习路线、基于个人笔记解释主题、运行测验并根据结果动态调整。使用场景仅作为教学载体,架构设计才是真正的重点。这种架构模式(通过开放协议协调的专业化智能体)如今已在生产环境中广泛应用:销售赋能(帮助销售代表入职并适配培训路径的智能体)、合规培训(指导员工完成监管课程的智能体)、客户支持(构建知识库并跟踪问题升级的智能体)以及工程师入职(引导新员工熟悉代码库的智能体)。领域会变,基础设施模式不变。
📦获取完整代码
本书配套的完整可运行代码库已发布在GitHub:
http://github.com/sandeepmb/freecodecamp-multi-agent-ai-system
可克隆仓库跟随操作,或在阅读时作为参考实现。
目录
- 引言
- 第一章:何时使用多智能体
- 第二章:使用LangGraph进行有状态编排
- 第三章:通过MCP实现标准化工具访问
- 第四章:构建四智能体系统
- 第五章:状态持久化与人工监督
- 第六章:使用Langfuse实现可观测性
- 第七章:使用DeepEval评估智能体质量
- 第八章:通过A2A实现跨框架协调
- 第九章:完整系统与未来展望
- 结语
- 附录A:框架对比
- 附录B:模型选择指南
- 附录C:生产环境加固清单
引言
你将构建的系统
该系统包含四个由LangGraph协调的智能体、两个为智能体提供外部工具访问权限的MCP服务器、两个支持跨框架智能体委托的A2A服务、捕获完整追踪信息的Langfuse,以及执行自动化质量检查的DeepEval。以下是端到端架构示意图:
学习加速器架构展示五层结构:左侧用户层输入学习目标、审批响应和测验答案至编排层;编排层包含具有五个节点(课程规划器、人工审批、讲解器、测验生成器、进度教练)的LangGraph工作流,连接SQLite检查点存储;下方工具层包含智能体可读写的MCP文件系统服务器和MCP内存服务器;底层推理层显示所有四个智能体连接至本地运行的Ollama(端口11434,使用qwen2.5模型);右侧A2A层显示端口9001的测验生成器A2A服务和端口9002的CrewAI学习伙伴,通过JSON-RPC 2.0通信;右侧可观测层显示Langfuse通过回调追踪捕获所有LLM调用、工具调用和节点执行。
图1. 完整系统架构。LangGraph编排四个智能体,每个智能体通过MCP访问工具。进度教练通过A2A调用外部智能体(包括完全不同的CrewAI智能体)。Ollama本地执行所有推理,Langfuse捕获所有追踪信息。
你将逐层构建该系统。待系统完成后,你将不仅学会如何连接这些技术,更将理解每种技术存在的意义及其预防的生产环境故障模式。
技术栈
| 技术 | 版本 | 角色 |
|---|---|---|
| LangGraph | 1.1.0 | 有状态的多智能体图编排 |
| MCP | 1.26.0 | 标准化智能体-工具协议 |
| A2A SDK | 0.3.25 | 跨框架智能体间协议 |
| Ollama | 最新版 | 本地LLM推理(无需API密钥) |
| CrewAI | 1.13.0 | 通过A2A实现跨框架互操作 |
| Langfuse | 4.0.1 | 分布式追踪与可观测性 |
| DeepEval | 3.9.1 | 基于LLM的评判式评估 |
前置要求
你需要熟悉以下内容:
- Python 3.11或更高版本:类型提示、数据类、异步/await基础
- LLM基础概念:提示词、补全、工具调用
- 命令行操作:创建虚拟环境、运行脚本
无需具备LangGraph、MCP、A2A或任何智能体框架的先验经验。本手册将从第一性原理开始构建。
硬件要求
| 配置 | 内存 | 显存 | 模型 | 备注 |
|---|---|---|---|---|
| 最低配置 | 16 GB | 8 GB | qwen2.5:7b | 功能完整 |
| 推荐配置 | 32 GB | 24 GB | qwen2.5-coder:32b | 工具调用可靠性最佳 |
| 纯CPU配置 | 32 GB | 无 | qwen2.5:7b | 可用但速度慢5-10倍 |
💡 模型规模对智能体的重要性
智能体通过生成结构化JSON参数来调用工具。若模型产生工具名称幻觉或参数格式错误,工具调用将静默失败:调用不执行、智能体循环运行,最终在无明确错误的情况下触发迭代限制。7B以下参数模型频繁出现此类JSON格式错误。7-9B模型是生产环境中可靠工具调用的最低可行层级。
第一章:何时使用多智能体
在编写代码前,你应先解答多数多智能体教程完全跳过的问题:你的问题真的需要多智能体吗?这至关重要,因为增加智能体会产生成本。更多智能体意味着更多组件、更多潜在故障点、可能从多方向被破坏的共享状态,以及需要跨进程边界追踪的调试过程。配备优秀工具的单一智能体往往是更简单、更快速、更可靠的解决方案。
因此问题并非“我应该使用多智能体吗?“——仿佛多智能体天生优越。真正的问题是:“我的问题是否具有需要协调开销的特性?”
1.1 何时单一智能体是正确答案
当问题的主要任务可在一个上下文窗口内完成时,单一智能体通常是最佳架构。例如:
- 研究主题并总结的智能体:单一任务,单一上下文窗口,单一智能体
- 审查拉取请求并评论的智能体:单一任务
- 从知识库回答客户问题的智能体:单一任务
- 从文档提取结构化数据的智能体:单一任务
在这些情况下,添加第二个智能体不会简化问题,反而会增加协调层、共享状态协议、新的故障面和调试复杂性,却无架构收益。单一智能体就能完成全部工作,配备好工具即可运行。
单一智能体的模型非常直接:
用户输入 → 智能体(配备工具) → 响应
智能体可能循环调用工具(搜索、读取、写入、验证),但单一LLM配合正确工具访问即可处理完整任务。这是多数AI自动化工作的正确起点,通常也是终点。
1.2 多智能体的真正评判标准
当问题存在真正不同的专业化分工时,才值得采用多智能体:子任务在工具、LLM调用模式、温度要求或故障模式上差异显著,将其整合至单一智能体会产生更多问题。以下是需要协调开销的具体条件:
不同子任务需不同工具
若工作流中一部分需文件系统访问,另一部分需数据库写入,第三部分需调用外部API,这自然形成了智能体分离的边界。每个智能体仅使用所需工具,使其更易独立测试和分析。
不同LLM调用模式
某些任务需要temperature=0的单次结构化输出调用。其他任务则需要多轮工具调用循环,直至LLM判断上下文充分。将这些模式混合在单一智能体中,会导致函数承担过多不同功能,并因执行路径不同而以不同方式失败。
不同温度与模型需求
结构化规划输出需要低温保证一致性。创造性解释需要稍高温度获取多样性。评分需要低温保证分析一致性。若这三个任务共享单一温度设置的智能体,你将在每个方向做出妥协。
故障隔离需求
若某个子任务失败可不影响其他任务,你需要在其间设置边界。规划课程的智能体即使在测验评分服务临时故障时也能成功。若它们共享同一进程和故障面,评分错误会连带导致规划失败。
独立部署需求
若系统不同部分可能需要不同规模运行、独立更新,或由不同团队使用不同框架开发,智能体分离对应着部署分离。A2A协议(第八章)使这成为现实。
跨框架协作
若想针对不同任务使用CrewAI和LangGraph智能体(因不同框架有不同优势),你需要通信协议。这就是A2A的作用。
这些条件中任一单独存在不必然要求多智能体。两项组合可能已足够。全部满足则论证强烈。
1.3 你支付的代价
在采用多智能体架构前,请明确你为之付出的成本:
**共享状态复杂性:**每个智能体读写共享状态对象。若两个智能体写入同一字段,需合并策略。若一个智能体写入错误数据,后续智能体都将获得错误输入。状态定义成为所有智能体必须遵守的契约,对契约的修改需更新每个智能体。
**调试更困难:**单一智能体的故障显示在单个堆栈跟踪中。多智能体系统的故障可能源于三步前的错误输出,该输出保存在状态中传递给第二个智能体,导致当前可见的故障。因果链跨越智能体边界。
**延迟倍增:**每个智能体至少进行一次LLM调用。四智能体系统每会话最少四次LLM调用,当智能体循环使用工具时往往更多。每次Ollama调用耗时2-5秒,总耗时快速累积。
**更多基础设施:**多智能体系统受益于状态持久化、可观测性、评估和人工监督,这些都需要时间搭建。单一智能体通常无需这些。生产环境的多智能体系统则真正无法缺少它们。采用多智能体架构时应清楚认识这些成本,并能明确说明带来的具体收益。
1.4 为何本系统采用四个智能体
学习加速器使用四个智能体。以下是每个分离的真实技术理由——并非因为多智能体更好,而是因为这四个任务差异足够大,任何两个的组合都会降低整体效果。
| 智能体 | 功能 | 分离原因 |
|---|---|---|
| 课程规划器 | 接收学习目标,生成结构化学习路线图 | 单次LLM调用,temperature=0.1,format="json"。零工具。快速确定性执行,输入错误时快速失败。此处混入工具调用行为会干扰结构化输出。 |
| 讲解器 | 通过MCP读取源笔记,向学生解释主题 | 多轮工具调用循环,temperature=0.3。循环次数非确定性:由LLM判断上下文是否充分。与规划器执行模式完全不同。 |
| 测验生成器 | 生成问题(创造性),然后评分答案(分析性) | 两个独立LLM调用,不同温度参数。交互式:等待用户输入。同时作为独立A2A服务运行(第八章)。若与其他智能体捆绑则无法实现。 |
| 进度教练 | 综合结果,更新主题状态,路由至下一主题或结束 | 唯一进行跨智能体A2A调用(调用CrewAI学习伙伴)的智能体。读写MCP内存。管理决定工作流是否循环的路由决策。 |
相似文章
@KirkDBorne: 30 Agents Every AI Engineer Must Build — 构建生产就绪的智能体系统,使用经过验证的架构和模式:…
这是一条关于书籍《30 Agents Every AI Engineer Must Build》的推广推文,提供使用经过验证的架构和工具(如LangChain和LangGraph)构建可扩展和安全的AI智能体系统的指导。
跨整个组织的简单多智能体架构。让一切保持循环。
本文描述了一个大规模运行的多智能体架构,使用LangGraph、CrewAI和Harbor来处理目标智能体、任务协调以及带有追踪的安全访问。
LangGraph、CrewAI,还是原始A2A——这是我在生产环境中实际运行多智能体编排所学的经验,而非在笔记本中
作者分享了在生产环境中部署多智能体编排框架(LangGraph、CrewAI 和 A2A)的实践经验,并与简单的笔记本实验进行了对比。
学习LangGraph:智能体、黑板与瓶颈之旅
一篇关于LangGraph的教育文章,涵盖智能体架构、黑板模式以及构建智能体系统时的常见瓶颈。
@LangChain:如今,一切都感觉“代理化”,但构建一个代理究竟意味着什么?在这个免费的LangChain…
LangChain 宣布推出一门免费的学院课程,教授使用Python构建AI代理,涵盖react循环、MCP服务器和人在环中等基础概念。