写 Agent 本身不难,难的是让它「可靠地」替你做事。一个只会聊天的模型一旦被接上写文件、跑命令、调内网接口的权限,就从一个纯文本生成器变成了一个能制造真实副作用的系统。这时候再用「它说得好有道理」来评价就不行了——你得问的是:它改的文件能不能回滚?它调的接口有没有越权?它跑飞了怎么复盘?

本文把一组 Agent 开发笔记串成一条可落地的阅读线:先讲怎么把模糊的大目标变成可验收的计划(任务规划与拆分)→ 再讲怎么给执行套上安全壳(沙箱)→ 然后用 Hook、规则引擎和 Goal 模式把行为关进框里(控制与约束)→ 接着谈怎么让 Agent 自我检查、把工作委派出去并多人协作(反思与协作)→ 再用日志把整条链路变成可回放的证据(可观测)→ 最后落到 AgentScope 框架与一个智能裁判系统的真实案例(框架与案例)。

读完这篇你不会学到某个新 API,但能拿到一套别人踩过坑后沉淀下来的判断:每个机制该在什么时候上、又——同样重要的——什么时候根本不该用它。


一、先规划:把大目标拆成可验收的子任务

任务规划与任务拆分是动手前最该做、却最容易被跳过的两步。它们解决的是同一个问题:怎么把一个说不清的大目标,变成一串能判断「做没做对」的小步骤。

任务规划是在动手前先产出一份步骤清单:依赖、并行点、验收和回退。Plan-and-Execute 把「规划」与「执行」分开,执行一旦偏离预期就触发重规划。规划不能太细到「敲哪一行」,也不能只写一句「把功能做完」——好的计划能被程序检查,每步都有输入输出类型。规划模型可以用更强的模型,执行用便宜模型,计划要版本化,便于出问题时回溯是「计划错了」还是「执行错了」。

复杂任务拆分则是把大目标切成可执行、可验证、可并行的子任务。粒度太粗,模型一步走偏就全盘推翻;太细又会在调度上浪费上下文。拆分前要做依赖分析:哪些步骤必须串行,哪些可以扇出。每个子任务要有明确的完成标准,比如「测试通过」或「产出符合 schema 的 JSON」。拆完还要有汇总步骤,把局部结果合成最终交付,而不是把一堆半成品丢给用户。

几个容易踩的坑

  • 计划步骤必须带验收。没有验收的步骤等于无法判断是否该进入下一步,只是把失败推迟。
  • 观测与预期不一致就重规划,不要硬走完过时的清单。同样,子任务必须可验收,没有检查点的拆分只是把失败推迟。
  • 能并行的先并行,有数据依赖的才串行。盲目并行会在共享文件上打架;拆分时保留回退:某一步失败只重跑该步及其下游,不要清空已成功的产物。
  • 限制规划长度和重规划次数,防止「计划本身」变成无限生成。

什么时候用:跨文件改代码、多源调研、需要多工具配合、有外部依赖或需要人工确认里程碑的任务才先规划并拆分;单次问答、单工具查询直接 ReAct,不要为了形式拆三步。规划模型与执行模型可以分开,上线前用一张依赖图画清楚,避免运行时再让模型临时发明步骤。评估时分别统计「计划质量」和「执行符合计划的程度」。


二、在沙箱里跑:把副作用关进可观测可撤销的环境

Agent 沙箱机制的目标,是把模型可以触发的副作用关进一个可观测、可撤销、可审计的运行环境里。一旦 Agent 能写文件、跑命令、访问内网或调用第三方 API,就不能再把它当成纯聊天。沙箱不等于禁止一切工具,而是给每类能力设权限与资源额度:文件系统只能看指定目录、网络只能出站到白名单域名、进程只能跑有限时间与内存。出现异常时要能杀死容器、回滚临时文件并保留调用链路。

三个容易踩的坑

  • 默认拒绝:没有明确授权的系统调用、外网请求和环境变量读取都应被拦截,工具描述里不能写「可以执行任何 shell」。
  • 执行与观察分离:模型只能通过绑定接口提交任务,真正跑命令的是沙箱进程;stdout、退出码和文件 diff 再回传给模型。
  • 资源与时间盒:CPU、内存、磁盘与单次会话时长都要有硬上限,超时必须可强制中断并记入日志。

什么时候用:只要 Agent 能改代码、装依赖、调内网接口或操作用户文件,就应该上沙箱,而不要等到安全测评再补。本地开发可用轻量容器或进程隔离;面向终端用户的代码执行、浏览器操作和文件上传处理,必须用独立运行时加网络策略。纯文本生成、不触发工具的对话可以不做完整沙箱。


三、上锁:用 Hook、规则引擎和 Goal 模式把行为关进框里

控制与约束是 Agent 从「玩具」走向「生产系统」的分水岭。这一节的三块机制各管一层:Hook 管横切能力(鉴权、限流、脱敏、度量),规则引擎管不可违反的业务红线,Goal 模式管任务的驱动方式。

3.1 Hook:在生命周期固定位置插入横切逻辑

Agent hook 是在生命周期固定位置插入的回调:启动前、工具调用前后、模型请求前后、结束时。它用来做权限校验、参数改写、审计、注入租户上下文,而不把这些逻辑写进提示词。好的 hook 应该短、可组合、失败要能阻断——例如 before_tool 检查路径是否在沙箱内,after_model 把输出打进日志。hook 里不要再调一遍大模型,否则延迟和循环难以预期。

  • 明确钩子顺序和能否短路。权限拒绝应直接失败,不要等工具执行完再后悔。
  • hook 只处理横切能力:鉴权、限流、脱敏、度量。业务策略放规则引擎。
  • 要可测试。用夹具模拟一次工具调用,断言 hook 改了什么、拦了什么。

适用边界:多租户、要审计、要对工具参数做强制约束时,用 hook 比改每个工具实现更干净;一次性脚本不必上钩子框架。注意 hook 抛错会中断整次运行,要区分可重试错误和策略拒绝。

3.2 规则引擎:把业务红线抽成确定性拦截

规则引擎约束是把不可违反的业务红线从提示词里抽出来,用确定性强的规则拦截 Agent 行为。例如禁止转账超过限额、禁止删除生产表、禁止对未成年人推荐某些内容。规则在工具调用前评估,命中则拒绝并返回原因。提示词可以建议怎么做,但最终否决权在规则。规则要可测试、可热更新、有版本——不要用大模型解释规则是否适用,那会把硬约束变软。

  • 规则用结构化条件:主体、动作、资源、阈值。命中即拒绝,附上规则 ID。
  • 规则评估发生在工具执行前。事后审计补不回已经发出的请求。
  • 冲突要有优先级。两条规则打架时要有明确胜者,不能让模型选。

适用边界:涉及资金、隐私、生产变更和合规承诺时必须上规则引擎;内部 Demo 可以用简单 if。规则变更要走审核,和生产配置发布一样。把拦截次数做成指标,过高说明产品设计或提示词在鼓励违规。

3.3 Goal 模式:用目标而非步骤驱动

Goal 模式把 Agent 的驱动从「下一步做什么」改成「目标是否达成」。运行时维护一个目标描述和可检验的完成条件,每一步行动都对着目标做差距评估。它适合目标清晰但路径不确定的任务,比如「让测试套件全绿」而不是「依次打开这些文件」。实现上要防止目标漂移:模型不能在中途把目标改成更容易的事。完成条件尽量可程序判定,例如测试退出码、schema 校验,而不是「看起来差不多」。

  • 目标与验收标准分开写。验收要用脚本或断言,避免只靠模型自评。
  • 每步记录对目标的进展。没有进展超过 N 步就停止或重规划。
  • 禁止静默改目标。若用户意图变化,必须显式确认后再替换 Goal。

适用边界:修复缺陷、完成清单、达到指标这类有终点的任务用 Goal 模式;开放式闲聊不要硬套。和 Workflow 相比,Goal 更强调探索,路径固定时用工作流更省钱。上线前用故意达不到的目标测它会不会谎称完成。


四、反思与协作:自我检查、委派子代理、组队 Agent team

能跑通的 Agent 大多是单线程的;当任务变长、上下文变杂、需要独立视角时,就要把「反思」和「协作」加上去。这一节的三块分别解决:怎么避免局部走偏(反思机制)、怎么隔离失败与噪声(子代理)、怎么多人分工交付(Agent team)。

4.1 反思机制:在行动之后停下来检查

Agent 反思机制是在行动之后停下来检查:结果是否达到目标、工具输出是否异常、下一步是否该改计划。它不是把思考过程写得更长,而是加一个可执行的评审节点。常见实现是单独的 critic 提示、对工具返回做规则校验、或把失败原因写入记忆供下次避免。没有停止条件的反思会空转烧 token。 反思要有证据:日志、测试结果、diff,而不是模型自我感觉良好。

  • 反思输入要包含目标、动作、观测。缺观测的反思等于臆测。
  • 失败要分类:工具超时、权限拒绝、结果不符合 schema。分类后才能决定重试还是换策略。
  • 把稳定的教训写成短记忆,而不是把整段对话再塞回上下文。

适用边界:写代码、改文档、多步检索这类容易局部走偏的任务,加反思收益明显;单步分类或格式转换不必反思。限制反思轮次和总 token,避免死循环。上线前用故意失败的工具返回测它会不会瞎改计划。

4.2 子代理:把隔离的工作委派出去

子代理是主 Agent 把一块隔离的工作委派给另一个运行实例:独立上下文、有限工具、完成后只把摘要交回。这样主上下文不会被检索噪声或大段文件撑爆。子代理要有清晰的任务说明书和返回 schema,否则交回一堆无法使用的闲聊。权限应比主 Agent 更窄,例如只能读某个目录。超时和失败要冒泡,主 Agent 决定重试或换策略,而不是假装子任务成功。

  • 委派时写清目标、输入路径、禁止事项和返回格式。
  • 子代理工具集最小化。能读不能写,或只能写临时目录。
  • 只把摘要和产物路径交回主上下文,不要把完整对话拼接回去。

适用边界:探索未知代码库、并行调研多个来源、需要隔离失败影响时,用子代理;一两步就能做完的事不要嵌套。注意嵌套过深会让取消和预算难以汇总,主 Agent 必须能列出当前所有子任务状态。

4.3 Agent team:把专职 Agent 排进一个可调度小组

Agent team 是把多个专职 Agent 放进一个可调度的小组:有人负责检索,有人负责执行,有人负责评审。和临时 Multi-Agent 对话不同,team 通常有固定编制、共享黑板和明确的交接协议。调度者按任务类型把工作派出去,并负责汇总冲突。失败时要知道是哪个成员的产出不合格。team 的成本高于单 Agent,只有当上下文或专业度确实装不进一个角色时才值得。

  • 编制固定、接口固定。成员之间传结构化结果,不要互贴长对话。
  • 共享状态要有锁或版本。两人同时改同一文件必须排队。
  • 评审员有否决权。执行员不能跳过检查直接交付。

适用边界:跨代码、文档、测试的交付,或需要独立评审的合规场景,用 team;单一步骤的问答用单 Agent。先定义交接 schema 再写提示词。评估看端到端成功率和成员间返工次数。


五、把运行轨迹串起来:Agent 日志系统

Agent 日志系统要能把一次任务从用户输入到工具调用再到最终停止原因,串成可回放的轨迹。普通应用日志按接口打点不够:你需要 run_id、step、所选工具、参数、观测、模型耗时和费用。没有这些,线上「它突然乱改文件」无法复盘。日志还要分级:提示词全文可能含隐私,默认脱敏,出问题时再按权限解开。追踪应与 OpenTelemetry 的 trace 对齐,便于和网关、向量库日志对上。

三个容易踩的坑

  • 每次运行生成 run_id,每一步记 tool、args、result 摘要、token 与延迟。
  • 停止原因必须落盘:成功、超时、用户取消、预算耗尽、策略拒绝。
  • 敏感字段脱敏。提示词和文件内容默认哈希或截断,审计人员可申请明文。

什么时候用:只要 Agent 能调工具或改数据,就必须上结构化日志。本地试用可以打到文件;生产要进可检索的存储并设保留期。不要只把模型回复打到控制台。回放演练要用真实失败案例,确认能从日志复原步骤。


六、框架与案例:AgentScope 与智能裁判 Agent

机制讲完,落到工程实现。AgentScope 是一个开发框架,智能裁判 Agent 是一个完整的系统设计样例,两者分别代表「把多 Agent 服务化」和「把规则+模型串成裁决链」两种典型落地形态。

6.1 AgentScope:把 Agent 当服务来部署

AgentScope 是面向多 Agent 应用的开发框架,强调消息传递、分布式运行和把 Agent 当服务来部署。和只在单进程里排角色的库相比,它更关心生产化:并发、状态、与外部系统集成。使用时仍要自己设计角色边界和工具权限,框架不会自动保证安全。适合已经确认要多 Agent、并且可能跨进程调度的项目。学习曲线在消息协议和运行时模型上,而不是在提示词模板上。

  • 把通信协议定清楚:谁能给谁发什么类型的消息,避免全广播。
  • 状态外置。进程重启后任务要能恢复,不能只存在内存对话里。
  • 工具和模型调用走统一网关,便于限流和审计。不要每个 Agent 自己塞密钥。

适用边界:需要把 Agent 服务化、多实例协作时考虑 AgentScope;课程作业或单机 Demo 用更轻的库即可。选型时对比 LangGraph 的图控制和 CrewAI 的角色抽象,看团队更熟哪一种心智模型。上线前压测消息堆积和失败重试。

6.2 AI 智能裁判 Agent:规则优先、模型辅助的裁决链

AI 智能裁判 Agent 把规则引擎、视觉或文本证据和大模型判断串成一条可审计的裁决链路。它不是让模型直接喊比分,而是采集事件、检索规则、给出结论和依据,再由人工复核关键场次。系统设计要拆感知、理解、规则匹配、裁决和申诉。体育、内容审核和竞赛判罚都能套这套结构。难点是延迟、误判成本和证据留存,而不是把 Prompt 写得很长。

  • 证据与结论分离:模型输出必须绑定时间戳、画面片段或日志,无法引用证据的裁决不能自动生效。
  • 规则优先、模型辅助:明确规则用确定性代码,模糊情况才交给 LLM,避免每次都随机发挥。
  • 人工闭环是产品:高风险判罚进复核队列,申诉能回溯同一条证据链。

适用边界:需要规模化判罚又不能全靠人眼时做裁判 Agent;娱乐互动或没有规则文本的场景不必上。立项时先定义误判代价和延迟预算,再选多模态模型和部署位置。


附:Agent 核心机制速查表

机制 / 模式 解决什么 什么时候用 什么时候不该用
任务规划与拆分 把大目标变成可验收、可并行的步骤 跨文件改动、多源调研、有外部依赖、要人工确认里程碑 单工具查询、单次问答(直接 ReAct)
沙箱 把副作用关进可观测可撤销的环境 Agent 能改代码、装依赖、调内网或操作用户文件 纯文本生成、不触发工具的对话
Hook 鉴权、限流、脱敏、审计等横切能力 多租户、要审计、要强制约束工具参数 一次性脚本(不必上钩子框架)
规则引擎 不可违反的业务红线(资金/隐私/生产变更) 涉及合规承诺、生产变更、资金与隐私 内部 Demo(简单 if 即可)
Goal 模式 目标清晰但路径不确定的探索式任务 修复缺陷、完成清单、达到指标 开放式闲聊、路径固定的流程(用工作流)
反思机制 行动后检查是否走偏 写代码、改文档、多步检索 单步分类、格式转换
子代理 隔离上下文、隔离失败影响 探索未知代码库、并行调研多来源 一两步就能做完的事(不要嵌套)
Agent team 多专职角色分工并独立评审 跨代码/文档/测试交付、合规场景 单一步骤问答(用单 Agent)
日志系统 把运行串成可回放轨迹 只要 Agent 能调工具或改数据 —(几乎是必选)
AgentScope 多 Agent 服务化、跨进程调度 已确认要多 Agent 且可能跨进程协作 课程作业、单机 Demo(用更轻的库)