简介:本教程面向开发者与技术负责人,先厘清 Agent 与传统生成式对话模型在感知、规划、记忆与行动上的本质差异,再给出一套可落地的实现路径:从任务边界界定、工具能力封装、状态与记忆分层、推理—行动循环搭建,到权限安全管控、结果验证、常见故障排查与成本性能优化,帮助你把"只会生成文本"的模型改造成"能动手完成复杂任务"的智能体。
学完本教程,你应当能够独立完成以下三件事:
本教程属于”怎么做”导向的实践型文章,重点在可执行步骤,概念部分只作为落地时的判断依据。
适用读者
典型适用场景
不适用场景(避免技术选型跑偏):一次性文本生成、摘要、翻译、风格改写等单步任务,直接调用生成式模型即可,引入 Agent 只会增加延迟、成本与故障面。
Agent(智能体)可以定义为:能够自主感知环境状态、进行推理与规划、并采取行动以达成特定目标的计算系统。它的核心不是模型本身,而是”模型 + 工具 + 状态 + 控制循环”这一整体。
传统生成式对话模型的典型工作方式是:接收上下文 → 单次前向推理 → 输出文本 → 结束。知识来自预训练与当次上下文,无法直接读取外部系统的实时数据,也无法产生真实副作用。
| 对比维度 | 传统生成式对话模型 | Agent(智能体) |
|---|---|---|
| 交互形态 | 单轮或固定多轮问答 | 多步循环,可自我追问、自我修正 |
| 信息来源 | 预训练知识 + 用户提供的上下文 | 额外可实时调用工具获取外部数据 |
| 环境感知 | 无(仅文本输入) | 有(工具返回值、系统状态即环境反馈) |
| 状态维持 | 依赖调用方每次重传历史 | 内部维护任务状态与中间结果 |
| 行动能力 | 只产出内容,无副作用 | 可触发真实操作(查询、写入、调用服务) |
| 失败处理 | 输出错误答案 | 可观察错误、重试、换路径或上报人工 |
| 典型风险 | 幻觉、知识过期 | 幻觉 + 越权操作、死循环、成本失控 |
需要强调的是:Agent 并不会让模型”更博学”。它解决的是知识时效性与行动能力问题。原文提到的”调用搜索获取最新信息”正是这一点的体现——模型参数在训练完成后即冻结,而工具调用把外部世界的状态引入了决策回路。
关于”自主性”也应做客观理解:自主性来自控制循环与工具集的设计,而不是模型获得了人类式的思考能力。工程上要把它当成一个受控的自动化编排系统来对待。
基础环境
账号与权限
基础知识
云端依赖(通用类目)
部署时可使用主流云平台的基础能力,例如在百度智能云等平台上常见的容器平台(承载 Agent 服务)、对象存储(存放大文件与中间产物)、消息队列(异步解耦长任务)、日志服务与监控告警(可观测性)、身份认证与访问管理(凭证与权限控制)。这些均属通用云产品类别,具体开通方式以所在平台文档为准。
做什么:用一句话写清”Agent 要达成的最终状态”,并列出它可执行的动作清单与明确禁止的动作清单。
为什么:Agent 的行为空间由工具集决定,工具集则由任务边界决定。边界不清会直接导致两种典型失败——工具开太多,模型选错;工具开太少,任务无法闭环。
注意:把”可为”和”不可为”都写下来,例如”可查询订单状态、可创建补发工单;不可修改价格、不可退款超过约定金额”。
做什么:为每个动作实现一个独立函数,并提供机器可读的描述。
每个工具至少包含四部分:名称、用途说明、参数结构(含类型与是否必填)、返回结构。用途说明是模型选型的唯一依据,必须写清”什么时候该用我”。
为什么:模型不读你的源码,只读工具描述。描述含糊是工具选择错误最常见的根因。
注意:
{"ok": false, "code": "NOT_FOUND", "message": "..."},让模型能据此调整策略。
{"name": "query_order_status","description": "按订单号查询订单当前状态与物流节点。当用户询问订单进度、是否发货时使用。不适用于退款、改单等操作。","parameters": {"order_id": {"type": "string", "required": true, "desc": "订单号,形如 12 位数字"}},"returns": {"status": "string", "nodes": "array", "updated_at": "string"}}
做什么:把”记忆”拆成三层分别管理。
为什么:全部塞进上下文会导致成本与延迟随轮次线性上涨,并且长上下文中的关键信息容易被稀释。把状态结构化后,每轮只注入”完成任务所必需的最小上下文”。
注意:任务状态必须是可序列化的显式数据结构,不要指望模型从对话历史里”记住”进度;同理,长期记忆写入前需做隐私与敏感字段过滤。
做什么:实现标准的循环骨架:观察 → 思考 → 决定动作 → 执行 → 把结果作为新观察回填 → 判断是否结束。
为什么:这是 Agent 与传统对话模型在工程结构上最本质的分界。单轮调用无法根据执行结果改变后续行为,循环才能。
通用伪代码:
def run_agent(goal, max_steps=8):state = State(goal=goal, scratchpad=[], slots={})for step in range(max_steps):# 1. 组装最小必要上下文prompt = build_prompt(goal, state, tools=TOOLS,memory=recall_long_term(goal))# 2. 模型给出结构化决策:思考、动作、参数或"完成"decision = model.generate(prompt, output_schema=Decision)if decision.type == "FINISH":return finalize(state, decision.answer)# 3. 参数校验(schema 层 + 业务层)args = validate(decision.tool, decision.arguments, state)if args is None:state.append({"error": "invalid_arguments", "detail": ...})continue # 把错误回填,让模型自我修正# 4. 高风险动作走人工确认if TOOLS[decision.tool].risk == "HIGH" and not state.approved:return request_human_approval(state, decision)# 5. 执行并回填观察observation = execute(decision.tool, args, timeout=10, retries=2)state.append({"tool": decision.tool, "args": args,"observation": truncate(observation)})return escalate("MAX_STEPS_EXCEEDED", state) # 兜底,不静默失败
注意:必须设置最大步数上限和兜底出口。没有上限的循环是生产环境中最常见的失控来源。
做什么:根据任务复杂度选择规划方式。
为什么:预先规划能显著减少来回轮次,但代价是规划错误会被后续步骤放大。经验做法是:步骤可预测时用先规划,环境不确定时用逐步反应。
做什么:在提示中固定四件事:角色与目标、可用工具及使用时机、输出必须遵循的结构化格式、停止条件。
为什么:结构化输出让下游代码可稳定解析,避免用正则去”猜”模型的自然语言。
注意:不要用自然语言约束去弥补代码缺失的校验。所有模型输出在进入执行层之前都要经过模式校验与业务规则校验,校验失败就把错误信息作为观察回填。
做什么:建立多层防护。
做什么:把 Agent 服务按常规应用方式部署。
为什么:Agent 的调用链比单体应用长得多(一次任务可能包含十几次模型调用与工具调用),缺少集中日志与指标就无法定位问题。
以下为常见可调项及其取值逻辑(命名为通用示例,实际以所用框架为准):
分三层验证,逐层收敛:
判定通过的标准示例:任务成功率达标且稳定;所有失败用例都能给出明确失败原因而非静默返回;越权用例 100% 被拦截;成本与延迟在可接受区间。
上线后:持续观察真实分布,重点看失败样本聚类。多数问题会集中在少数几类,针对性补工具或改描述即可。
| 现象 | 常见原因 | 排查与处理 |
|---|---|---|
| 反复调用同一工具 | 缺少重复检测;错误信息不可操作 | 记录已执行动作签名,重复时强制换策略;把错误改为可操作的提示 |
| 参数幻觉(编造 ID) | 缺少必填槽位校验;工具描述未说明参数来源 | 增加槽位校验与追问;需要查询类前置步骤时不允许直接执行写操作 |
| 上下文膨胀、成本骤升 | 未裁剪工具返回;全量注入历史 | 分层配额 + 结果摘要化 + 长期记忆改为按需召回 |
| 工具偶发失败但任务”成功” | 异常被吞掉,未回填为观察 | 统一错误契约,所有异常必须进入观察列表 |
| 输出无法解析 | 未约束结构化输出 | 启用结构化输出模式,并加一层解析失败重试 |
| 并发下数据错乱 | 会话状态共享或写入非幂等 | 状态按会话隔离;写操作带幂等键 |
| 执行外部内容后出现越权动作 | 外部文本中的指令被当作指令执行 | 明确标注数据来源与信任级别;敏感动作走白名单与人工确认 |
| 模型选型升级后行为变化 | 提示依赖旧模型的隐含习惯 | 为提示与决策建立回归测试集,升级前跑全量用例 |
Agent 与传统生成式对话模型的分界,不在于模型能力更强,而在于系统结构上多出了一个由工具、状态与控制循环构成的执行闭环:前者输出内容,后者改变外部世界。
本教程的关键步骤可以压缩为一条主线:先界定任务边界与禁止清单,再把业务能力封装为描述清晰、可校验、幂等的工具,接着分离短期上下文、任务状态与长期记忆三层,随后实现带最大步数与兜底出口的推理—行动循环,最后用分层防护守住安全边界,并以分层测试和持续观测保证质量。
后续可继续深入的方向包括:多智能体协作与角色分工、面向长任务的规划与恢复机制、检索质量对决策准确率的量化影响、以及该类系统的评测体系建设。建议在真实业务中先选择低风险只读场景试点,验证稳定性后再逐步开放写操作权限。