← 返回文章列表

从“调用大模型”到“构建智能体系统”:一名后端研发的 Agent 学习总结

从后端研发视角复盘 Hello-Agents:理解 Agent 行动闭环、Workflow、记忆与 RAG、上下文工程、工具安全、多智能体协作及评估实践。

复核日期:2026-09-30
学习资料:Datawhale Hello-Agents《从零开始构建智能体》
说明:本文从后端研发视角总结课程内容,其中架构映射、工程建议和公式属于个人学习后的抽象,不代表课程或行业的统一定义。

一、学习背景

作为一名后端研发,我最初对 Agent 的理解比较简单:给大模型配置一段系统提示词,再接入几个 API,就可以让模型帮助用户完成任务。

学习 Hello-Agents 之后,我逐渐认识到,真正的 Agent 开发不是简单调用一次大模型,而是在构建一个由模型参与决策、能够感知环境、使用工具、管理状态并根据反馈持续行动的软件系统。

Hello-Agents 的课程内容从智能体与大语言模型基础开始,覆盖经典 Agent 范式、低代码平台、主流开发框架、自研 Agent 框架、记忆与 RAG、上下文工程、通信协议、Agentic RL、性能评估以及多个综合项目。这条学习路线的核心价值,是帮助开发者从大模型的“使用者”逐步转变为智能体系统的“构建者”。

二、重新理解 Agent:模型只是系统的一部分

普通的大模型应用通常是一次请求—响应:

用户输入 → 构造上下文 → 调用模型 → 返回结果

这里所说的“普通大模型”特指没有接入工具、状态和外部环境的单次模型推理。模型本身可以理解和生成文本,但不会独立完成外部操作。

Agent 则更强调持续的“感知—决策—行动—反馈”闭环:

获取任务
  ↓
理解目标和当前状态
  ↓
决定下一步行动
  ↓
调用工具或操作环境
  ↓
观察执行结果
  ↓
继续决策,直到完成、失败或触发终止条件

从个人的工程视角,我将 Agent 抽象为:

Agent
= LLM
+ Context
+ Planning
+ Tools
+ Memory
+ Control Loop
+ Environment Feedback
+ Guardrails

这不是行业标准公式,而是一种帮助理解系统组成的工程模型:

  • LLM 提供语言理解、推理和决策能力;
  • Context 决定模型在当前步骤能够看到什么;
  • Planning 负责目标分解和执行规划;
  • Tools 负责访问真实世界;
  • Memory 保存跨步骤、跨会话或长期信息;
  • Control Loop 负责驱动执行过程;
  • Environment Feedback 为下一轮决策提供观察结果;
  • Guardrails 约束权限、成本、步骤和安全边界。

从后端开发角度看,Agent 可以被理解为一个由非确定性决策组件驱动的、有状态的任务执行系统。

三、Workflow 与 Agent:不是二选一

1. Workflow:路径主要由开发者定义

传统 Workflow 通常具有明确、固定的执行路径:

参数校验
→ 查询数据库
→ 调用第三方接口
→ 执行业务规则
→ 返回结果

它的优势是稳定、可控、可测试、可审计,适合规则明确且风险较高的业务。

2. Agent:模型可以动态选择下一步行动

Agent 通常由开发者定义目标、工具和约束,具体步骤由模型结合当前上下文动态决定:

目标
→ 判断缺少哪些信息
→ 选择工具
→ 分析工具结果
→ 调整计划
→ 完成任务

这种方式更加灵活,但会引入执行路径不稳定、结果难以完全复现、调用次数难以预测以及成本波动等问题。

3. 更合理的工程方式是混合编排

Workflow 和 Agent 并不是互斥关系。实际项目中更合适的方式通常是:

  • 用 Workflow 固化确定性的主流程;
  • 在需要理解、规划和动态选择的节点中调用 Agent;
  • 对转账、退款、删除数据等高风险操作保留人工确认;
  • 使用代码规则校验 Agent 的输入和输出。

可以概括为:

确定性逻辑交给代码,不确定性决策交给模型;模型负责提出行动,系统负责校验并执行行动。

四、经典 Agent 范式:行动、规划与改进

Hello-Agents 重点实践了 ReAct、Plan-and-Solve 和 Reflection 三种经典范式。

1. ReAct:在行动和观察之间循环

ReAct 可以从概念上表示为:

Reasoning / Decision → Action → Observation → Next Decision

例如,旅行助手收到“制定上海两日游计划”的任务后,可以先查询天气,再搜索景点、路线和交通信息,最后根据工具返回的数据生成行程。

需要注意的是,这里的 Reasoning 或 Thought 是对决策过程的概念描述。生产系统应重点保存结构化的决策结果、工具调用和环境观察,而不是要求模型暴露完整内部思维链。

ReAct 的主要风险包括:

  • 重复调用同一个工具;
  • 选择错误的工具;
  • 参数生成错误;
  • 工具异常后无法恢复;
  • 缺少终止条件导致循环失控。

因此,实现 ReAct 时应设置最大步骤数、超时时间、调用预算和明确的终止状态。

2. Plan-and-Solve:先拆解,再执行

Plan-and-Solve 先将复杂目标拆分成多个子任务,再根据计划逐步执行:

复杂目标
→ 生成计划
→ 执行子任务
→ 更新状态
→ 汇总结果

它更适合深度研究、报告生成、代码迁移和复杂数据分析等长链路任务。

从后端角度看,Planner 类似工作流编排器,子任务类似 Job,Executor 负责调度执行,状态存储负责记录任务进度和中间结果。

3. Reflection:对结果进行检查和修正

Reflection 让 Agent 对已有结果进行评估,识别错误、遗漏和可改进点,再决定是否生成修订结果。

它能够提高复杂任务质量,但也会增加模型调用、响应时间和成本,而且反思结果本身仍可能出错。因此,它适合高价值、允许多轮处理的任务,不应默认应用于所有在线请求。

实际系统可以组合多种范式:

Plan:拆解任务
  ↓
ReAct:执行子任务
  ↓
Reflection:检查和修订结果

五、从后端架构理解 Agent 框架

HelloAgents 框架通过 Message、Config、Agent 抽象基类、多种 Agent 实现和工具注册系统,展示了一个轻量 Agent 框架的核心组成。

使用后端研发熟悉的概念进行映射,可以得到:

Agent 组件后端系统中的近似概念
LLM非确定性决策引擎
Agent应用服务或任务执行器
Tool外部服务适配器
Tool Registry依赖注册与能力目录
Memory数据库、缓存和历史状态
RAG面向知识的检索服务
ContextBuilder运行时上下文聚合层
Planning工作流编排与任务分解
Agent Loop状态机或任务调度循环
Guardrail参数、权限和安全校验
Evaluation测试、质量基线和回归体系

这里的映射只是为了辅助理解,并不表示两者完全等价。

一个可维护的 Agent 系统可以按下面的方式分层:

Application
├── API / Web / CLI
├── Agent Orchestrator
├── Agent
│   ├── Planner
│   ├── Executor
│   └── Reflector
├── Context
│   ├── Prompt
│   ├── Conversation
│   ├── Memory
│   └── Retrieved Knowledge
├── Tool Registry
│   ├── Search Tool
│   ├── Database Tool
│   ├── File Tool
│   └── Business API Tool
├── Model Gateway
└── Observability & Evaluation

成熟框架的重点不是把模型调用包装成一个类,而是建立清晰的扩展边界:

  • 更换模型时,尽量不影响 Agent 层;
  • 新增工具时,不修改核心执行循环;
  • 更换记忆存储时,不侵入业务逻辑;
  • 切换 Agent 范式时,复用消息、模型和工具体系;
  • 评估、监控和审计作为横切能力统一接入。

六、Memory、RAG 和 Context Engineering 的区别

1. Memory:保存 Agent 经历过什么

记忆主要服务于连续交互、经验积累和个性化,例如用户偏好、历史任务、中间结论和失败经验。

HelloAgents 借鉴认知科学,将记忆设计为工作记忆、情景记忆、语义记忆和感知记忆:

  • 工作记忆:当前任务所需的短期信息;
  • 情景记忆:具体事件和交互经历;
  • 语义记忆:抽象知识、概念、规则和长期偏好;
  • 感知记忆:图像、音频等多模态信息。

这四种类型是 HelloAgents 的框架设计,不是所有 Agent 系统都必须采用的统一行业标准。实际项目应根据业务需要选择数据模型和存储方式。

2. RAG:检索 Agent 当前需要的外部知识

RAG 主要解决外部知识访问问题:

文档加载
→ 内容解析与分块
→ 向量化和索引
→ 查询检索
→ 必要时重排
→ 注入上下文
→ 生成答案

其工程重点包括数据质量、分块策略、召回率、相关性、时效性、权限和来源追踪。

3. Context Engineering:决定本次调用让模型看到什么

上下文工程需要在每次模型调用前动态组织:

  • 系统指令;
  • 当前目标;
  • 对话历史;
  • 可用工具描述;
  • 工具执行结果;
  • 相关记忆;
  • RAG 检索内容;
  • 当前计划和任务状态;
  • 输出格式与安全约束。

HelloAgents 的 ContextBuilder 使用 GSSC 流水线:

Gather → Select → Structure → Compress
收集      筛选       结构化       压缩

它将上下文视为一种有限资源,而不是简单地把所有历史信息都塞入模型。对于长时程任务,结构化笔记、上下文压缩和按需检索通常比无限扩展对话历史更加有效。

七、工具系统:核心不是能调用,而是可靠调用

Agent 要参与真实业务,就需要访问搜索服务、数据库、文件系统和内部 API。工具一旦具有副作用,工程风险也会同步增加。

1. 输入输出契约

工具参数应该结构化并经过严格校验:

class CreateOrderRequest(BaseModel):
    product_id: str
    quantity: int
    address_id: str

模型生成的参数应被视为不可信输入,不能绕过后端原有的业务校验。

2. 超时、重试和熔断

外部调用应具备:

  • 超时控制;
  • 有限重试;
  • 指数退避;
  • 熔断降级;
  • 并发限制;
  • 错误分类。

3. 幂等性

下单、转账、发邮件等有副作用的工具必须支持幂等键和重复请求检测,避免 Agent 重试或误判造成重复操作。

4. 权限控制

不应该将所有工具无差别暴露给 Agent。工具集合应根据用户身份、Agent 角色和任务动态生成:

查询订单:允许自动执行
取消订单:要求二次确认
退款操作:要求业务审批
删除数据:默认禁止或进入隔离环境

5. 可观测与审计

每次模型和工具调用应尽可能记录:

  • 任务 ID 与 Trace ID;
  • Agent 和模型版本;
  • 工具名称及参数摘要;
  • 执行结果与错误类型;
  • 调用耗时;
  • Token 和费用;
  • 是否经过人工确认;
  • 最终终止原因。

记录时还要对密钥、个人信息和业务敏感数据进行脱敏。

八、通信协议:从点对点集成走向标准化

Hello-Agents 介绍了 MCP、A2A 和 ANP 三类协议:

  • MCP:面向 Agent 与工具、资源的标准化通信;
  • A2A:面向 Agent 之间的点对点通信与协作;
  • ANP:面向大规模智能体网络的身份、发现和连接。

从后端视角可以近似理解为:

MCP ≈ 工具和资源访问协议
A2A ≈ 智能体之间的任务通信协议
ANP ≈ 智能体网络中的身份与服务发现基础设施

需要注意两点:

第一,MCP 定义了统一协议,但模型不会因此天然获得所有工具。宿主应用仍需实现或集成 MCP Client/Host,连接对应服务器,并将能力暴露给 Agent。

第二,Hello-Agents 课程中的 ANP 为轻量、概念性实现,主要用于帮助学习服务注册、发现和网络管理,不应直接等同于成熟的生产级基础设施。

九、多智能体不是默认答案

多智能体会引入新的复杂度:

  • 模型调用次数和成本增加;
  • Agent 之间可能传播错误信息;
  • 上下文在传递过程中可能损失;
  • 决策责任边界变得模糊;
  • 调试链路更长;
  • 并发和状态一致性更难处理。

只有当任务具备以下特点时,才值得考虑多智能体:

  1. 可以拆成职责明显不同的子任务;
  2. 子任务可以并行或相对独立执行;
  3. 不同角色需要不同工具、权限或上下文;
  4. 中间结果能够结构化传递;
  5. 协作收益明显高于通信成本。

例如,深度研究任务可以拆为:

Planner Agent
    ↓
Research Agent × N
    ↓
Reviewer Agent
    ↓
Writer Agent

简单查询、固定流程和低延迟请求则更适合普通代码、Workflow 或单 Agent。

十、评估是 Agent 工程化的分水岭

Hello-Agents 的评估章节覆盖了:

  • BFCL:工具选择和函数调用能力;
  • GAIA:真实世界综合任务能力;
  • LLM Judge:开放式内容质量评估;
  • Win Rate:方案或输出之间的相对比较;
  • 人工验证:对自动评估结果进行补充和校准。

结合后端实践,可以从以下维度建立评估体系。

1. 任务效果

  • 任务成功率;
  • 答案正确率;
  • 约束遵守率;
  • 引用可靠性;
  • 人工接管率。

2. 工具能力

  • 工具选择准确率;
  • 参数生成正确率;
  • 工具调用成功率;
  • 无效调用和重复调用次数;
  • 有副作用操作的误执行率。

3. 系统性能

  • 首次响应时间;
  • 任务总耗时;
  • 模型调用次数;
  • Token 消耗;
  • 单任务成本。

4. 稳定性和安全性

  • 超时率;
  • 最大步骤数触发率;
  • 敏感操作拦截率;
  • 提示注入防护效果;
  • 模型或 Prompt 版本变更后的结果波动。

LLM Judge 适合评价开放式输出,但它可能受到模型偏好、答案长度、展示顺序和自我偏好的影响。因此,不能仅依靠单个 LLM Judge 下结论。更稳妥的方案是组合使用规则检查、公开基准、自定义数据集、多评委模型和人工抽检。

十一、我的 Agent 实践路线

第一阶段:实现最小闭环

实现一个基础 ReAct Agent:

用户任务
→ 模型决策
→ 工具调用
→ 结果回传
→ 最终回答

重点解决结构化输出、工具注册、参数校验、最大步骤数和异常处理。

第二阶段:加入状态和记忆

增加会话历史、任务状态、执行记录、用户偏好以及记忆检索和淘汰策略。

第三阶段:加入上下文工程

控制上下文来源、相关性、优先级、长度和压缩方式,避免无差别堆叠历史内容。

第四阶段:完善工程治理

补充 Trace、日志、指标、超时重试、权限控制、人工确认、成本统计和敏感信息脱敏。

第五阶段:建立评估集

为工具调用、最终答案、任务耗时、调用成本和安全边界建立固定回归样本,并在修改模型、Prompt、工具描述或检索策略后自动运行。

第六阶段:按需引入多智能体

只有当单 Agent 出现职责过载、上下文膨胀、权限混杂或任务可并行化问题时,再引入多个角色协作。

十二、总结

通过 Hello-Agents 的学习,我形成了以下认识:

  1. LLM 是 Agent 的重要决策组件,但不是完整系统;
  2. Agent 的核心是模型、上下文、工具、状态与环境反馈形成的行动闭环;
  3. Workflow 与 Agent 可以组合,而不是必须二选一;
  4. Prompt 只是上下文的一部分,上下文工程决定模型在当前步骤真正看到什么;
  5. Memory、RAG 和 Context 分别解决经验保存、知识检索和运行时信息组织问题;
  6. 工具调用必须遵循后端系统既有的可靠性、安全性和审计规范;
  7. 多智能体是一种需要成本收益分析的架构选择,而不是复杂项目的默认答案;
  8. 没有评估、监控、权限和人工兜底的 Agent,更接近演示系统,而不是生产系统。

对于后端研发而言,学习 Agent 并不意味着抛弃已有的软件工程经验。接口设计、领域建模、状态机、任务调度、分布式治理、可观测性、安全控制和自动化测试,在 Agent 系统中依然重要。

Agent 带来的主要变化,是系统中出现了一个能够理解自然语言、动态规划并选择工具的非确定性组件。开发者的工作不是将所有业务逻辑都交给模型,而是为模型建立清晰的能力边界、可靠的执行环境、可验证的反馈闭环和必要的安全约束。

模型决定 Agent 能有多聪明,工程决定 Agent 能否稳定、安全地落地。

参考资料

  • Datawhale Hello-Agents 在线教程:https://datawhalechina.github.io/hello-agents/
  • Datawhale Hello-Agents 官方仓库:https://github.com/datawhalechina/hello-agents
  • 第一章:docs/chapter1/第一章 初识智能体.md
  • 第四章:docs/chapter4/第四章 智能体经典范式构建.md
  • 第七章:docs/chapter7/第七章 构建你的Agent框架.md
  • 第八章:docs/chapter8/第八章 记忆与检索.md
  • 第九章:docs/chapter9/第九章 上下文工程.md
  • 第十章:docs/chapter10/第十章 智能体通信协议.md
  • 第十二章:docs/chapter12/第十二章 智能体性能评估.md
— 本文完 —