第19章-Agent

第 19 章:Agent

把模型推理、工具、Memory 和受控执行循环组合起来,使系统能够围绕目标进行多步决策。

前言

普通 Chat 一次请求生成一次回答;Agent 面对的是目标,可能需要观察状态、选择工具、读取结果并继续下一步,直到完成或触发停止条件。

一、Agent 是什么

Agent 是围绕目标运行的受控执行系统,常包含:

  • LLM:理解与决策;
  • State:保存当前任务状态;
  • Planning:决定下一步;
  • Tools:执行确定性动作;
  • Memory:提供必要历史;
  • Loop:根据结果继续或停止;
  • Guardrails:权限、预算和人工确认。

二、LLM 与 Agent 的区别

text 复制代码
LLM:输入 → 生成
Agent:目标 → 决策 → 行动 → 观察 → 再决策

Agent 使用 LLM,但 Agent 不是模型本身。执行循环、工具管理和状态控制属于应用框架。

三、Planning

Planning 把目标拆成步骤,可能是显式计划,也可能每轮只决定下一动作。

计划不是事实保证。应用应限制最大步骤数、总耗时、Token 预算和工具范围,防止循环失控。

四、Tool Use

Agent 的行动通常通过工具完成:查询订单、搜索知识、读取文件或调用内部 API。

模型只提出工具调用,应用负责权限校验和执行。写操作、外部消息和资金相关操作应增加人工确认。

五、Memory 与 State

Memory 保存可复用的对话或经验;State 保存当前任务的阶段、变量和工具结果。二者不能简单混为一个聊天记录列表。

text 复制代码
Memory:以前发生了什么
State:当前任务进行到哪里

六、Execution Loop

text 复制代码
读取目标与状态
    ↓
模型选择下一动作
    ↓
执行工具
    ↓
保存结果并更新状态
    ↓
完成?继续:停止

每一轮都必须检查停止条件。

七、停止条件

  • 目标已经完成;
  • 达到最大迭代次数;
  • 超过时间或费用预算;
  • 工具连续失败;
  • 需要用户补充信息;
  • 命中高风险操作,等待人工确认;
  • 状态无法继续推进。

没有停止条件的 Agent 不是"更自主",而是不可控。

八、一个订单助手示例

目标:回答"订单什么时候到,如果延误能否补偿?"

text 复制代码
1. queryOrder 查询状态
2. queryLogistics 查询节点与预计到达
3. queryCompensationPolicy 查询补偿规则
4. 综合工具结果生成回答

工具提供事实,模型负责决定调用顺序和组织语言。订单状态不能由模型猜测。

九、Agent 与固定工作流

场景 更合适方式
步骤稳定、合规严格 固定工作流
路径随信息动态变化 Agent
高风险写操作 工作流 + 人工确认
开放式研究与信息收集 受限 Agent

能够用普通代码清晰实现的流程,不必为了"智能"强行改造成 Agent。

十、可观测性

至少记录任务 ID、轮次、模型调用、工具选择、参数摘要、工具结果状态、Token、耗时和停止原因。敏感输入与工具结果必须脱敏。

十一、安全与成本

  • 工具白名单和最小权限;
  • 最大轮次、超时和预算;
  • 写操作幂等与确认;
  • 外部内容视为不可信;
  • 防止 Prompt Injection 诱导调用工具;
  • 对失败和重复动作设置熔断;
  • 支持人工接管和审计回放。

十二、从 API 进入源码

text 复制代码
Agent Builder
    ↓ 初始化模型、工具与状态
Agent Loop
    ↓ plan / act / observe
Tool Calling
    ↓ 更新 State
Stop Condition

阅读时重点关注状态结构、循环入口、工具结果如何回写、停止条件和异常恢复。

十三、常见误区

  • Agent 等于能聊天的模型:关键是多步执行循环。
  • Agent 越自主越好:自主范围必须受业务风险约束。
  • 给足工具就能自动完成:工具描述、权限和失败处理仍然关键。
  • Memory 越多越聪明:无关历史会增加成本和干扰。
  • Agent 可以替代确定性流程:稳定流程通常应优先用代码实现。

十四、本章总结

Agent 把模型、工具、状态和执行循环组合起来。生产价值来自受控地完成多步目标,而不是让模型无限自主运行。

完整源码

text 复制代码
源码地址:待补充
对应章节:chapter-19-agent

参考资料

下一章:ChatClient 为什么存在

下一章进入框架原理篇,从设计角度重新分析 ChatClient 的职责、Fluent API 和它与 ChatModel 的边界。

相关推荐
她的男孩1 小时前
打印模板草稿能保存,一点发布就报主从关系:我们把校验拆成了两档
java·spring boot·后端
溪语流沙1 小时前
【Web全栈进阶】FastAPI工程化:APIRouter拆分 + 配置 + 依赖注入
java·前端·fastapi
全栈练习生1 小时前
大模型推理全链路
python·ai
写后端的胖头鱼1 小时前
Redis 的 RDB 和 AOF
java·数据库·redis
欣欣之王来了1 小时前
2024主流国产大模型深度对比:文心一言/通义千问/智谱AI/Qwen等选型指南
人工智能·ai·大模型
cxoptics1 小时前
LBO 激光损伤阈值 LIDT 典型数值?如何避免晶体打坏?
java
逐米时代2 小时前
远程运维诊断减少到场率
java·服务器·前端
禾小西2 小时前
Redis AOF 日志:宕机了,如何避免数据丢失?
java·redis·mybatis
xuxigifxfh2 小时前
HJ11 数字颠倒
java·开发语言·华为机考