多数人写 Agent 卡在同一处:Demo 能跑,一接真实任务就乱调工具、丢记忆、循环烧 token,最后不知道该改提示词、换模型还是改架构。这篇不讲概念,而是按「先定边界、再搭骨架、后做评测」的顺序,给出每一步的判断标准和动作清单,并说明哪些做法在简单任务上属于过度设计。
很多人写 Agent 卡在同一个地方:Demo 跑得挺顺,一接真实任务就开始乱调工具、丢记忆、在一个循环里反复烧 token,最后压根不知道该改提示词、换模型还是重写架构。这篇不绕概念,按「先定边界、再搭骨架、后做评测」的顺序讲,每一步给判断标准和动作清单,顺带说清哪些做法在简单任务上纯属过度设计。
一个前提你得先认:Agent 不是万能升级包,它只是把「多轮决策 + 外部动作」这套流程交给模型去编排。任务本身够简单的时候,硬上 Agent 只会让延迟变高、失败面变大。所以第一件事不是选框架,而是判断这事到底值不值得做成 Agent。
先划边界:什么任务值得做成 Agent
判断标准就三条:需要多轮决策、依赖外部数据或动作、步骤没法提前写死。三条同时满足才考虑 Agent。反过来,结果可枚举、单步就能干完的活,比如摘要、分类、翻译,直接调接口更省事,做成 Agent 只是给自己加故障点。
| 任务特征 | 适合 Agent 吗 | 理由 |
|---|---|---|
| 多轮决策 + 外部工具 + 步骤不固定 | 适合 | 模型需要边看结果边决定下一步 |
| 单轮问答、固定格式转换 | 不适合 | 一次调用能解决,加循环只增加延迟 |
| 结果可枚举的分类或抽取 | 不适合 | 规则或普通接口就能覆盖 |
| 跨系统、需要中途确认的动作 | 适合但要加护栏 | 决策有价值,但必须人工兜底 |
- 把目标写成一句可验证的话比如「根据用户描述在工单系统里建一条记录并回填编号」。写不出一句能验证的话,说明任务边界还没想清。
- 列清允许的动作范围明确它能调哪些工具、能不能写数据、能不能对外发消息。范围没列清就先别进开发。
- 定义什么算完成是拿到某个返回值,还是人工确认通过?完成条件含糊,评测阶段你连成功都判断不了。
- 再看要不要上框架到 /stacks/frameworks 对一下现有框架和 SDK 覆盖了什么,别自己重造编排层。
骨架:决策循环与工具层怎么搭
骨架就一层循环:模型输出结构化动作 → 执行 → 结果回灌 → 再决策。听起来简单,坑全在细节里。最大步数和超时必须设,否则模型很容易卡在反复调用同一个工具上。工具返回值也要截断到必要长度,不然几轮下来上下文就被垃圾撑满了。
- 每个工具只做一件事,别设计成「万能工具箱」,模型分不清什么时候该用哪个
- 参数用强类型描述,能枚举就别用自由文本
- 返回值截断,长结果只回摘要加一个可回查的引用
- 工具描述写得含糊,是调用出错的第一大来源,比模型能力影响更大
- 写操作类工具默认加二次确认,别让它自己决定要不要落库
错误处理也有讲究:把工具报错的原文回灌给模型,允许它重试一次;连续失败就升级成人工确认,别让它自己瞎猜参数硬撞。排查的时候按固定顺序走,别一上来就怀疑模型不行。
- 先看动作是否被正确解析模型输出的结构化动作有没有被你的解析层正确接住,格式错了后面全白搭。
- 再看参数是否合法参数类型、必填项、取值范围对不对。这一步能拦掉相当一部分失败。
- 最后才怀疑模型能力前两步都过了还是错,再考虑换模型或改提示词。多数问题其实出在前两步。
上下文与记忆:别把整段历史往死里塞
上下文要分层处理:系统指令常驻,近期对话保留原文,久远内容压缩成摘要,工具原始返回只留摘要加引用。压缩别做太勤,历史接近上下文上限的某个比例时再触发就行,每轮都压会把关键约束压没。
- 系统指令
- 常驻不压缩,放角色、边界、输出格式
- 近期对话
- 保留原文,保证连贯性
- 久远内容
- 压成摘要,只留结论和未完成的约束
- 工具返回
- 留摘要加引用,需要细节时再回查
- 外部记忆
- 跨会话要记的落到向量库或结构化存储
需要跨会话记住的东西,落进向量库或结构化存储。选哪个到 /stacks/vector-dbs 看,但别按说明书选,按检索命中率验证。要注意的是:单轮任务、状态本来就短的场景,加记忆层只是多个故障点,不适用。
评测与上线:怎么知道它真的能用
建一个小测集是分水岭。拿几十条真实任务当回归集,每次改提示词或换模型都跑一遍,记录成功率、平均步数、单次成本三项。数字到 /price-watch 这类站内页面核对当时的实际值,别凭记忆。
| 失败类型 | 典型表现 | 先改哪一层 |
|---|---|---|
| 理解错 | 答非所问、选错工具 | 提示词和系统指令 |
| 工具错 | 调了不该调的工具 | 工具描述和拆分粒度 |
| 参数错 | 参数类型或取值不对 | 参数定义和校验层 |
| 停不下来 | 反复循环、超步数 | 循环上限和终止条件 |
把失败按这四类拆开,按比例决定改哪一层,别凭感觉调。上线之前配好护栏:预算上限、单任务步数上限、敏感动作二次确认。先影子运行观察一段时间,再逐步放开权限。
下一步想继续往下搭的,可以去站内工具目录和框架页面对比现有方案的覆盖范围,再决定自研还是套用;顺手用站内的检测页核一下手头接口的当前状态,避免在评测阶段被外部因素干扰判断。→常见问题
做 Agent 一定要用框架吗?
不一定。任务步骤少、工具只有两三个的时候,自己写一个带步数上限的循环更可控,也更好排查。框架的价值在编排、状态管理和多工具调度,当你的流程开始出现分支、并行或需要重启续跑,再引入比较划算。
Agent 老是重复调用同一个工具怎么办?
先看工具返回是不是没给出有效信息,模型只能反复试;再看动作解析有没有把参数吃掉。处理办法是限制同一工具连续调用次数,把上次的返回摘要塞进指令里,并在超过阈值时直接终止,把问题暴露出来而不是让它自转。
怎么判断该换模型还是改提示词?
看失败类型。如果动作格式经常解析不了、参数漏字段,多半是提示词和工具描述的问题;如果能正确调工具但选错工具、推理走偏,才考虑换更强的模型。换之前先在小测集上跑一遍旧配置做基线,不然换完说不清是变好还是变差。