Agent 的灵活性来自循环,但循环也是最容易失控的地方。模型可能重复搜索同一内容、在工具失败后不断改写参数,或完成目标后仍继续扩展。运行器必须比模型更清楚什么时候允许继续。
使用足够小的计划
复杂任务可以先生成高层计划,例如“明确比较标准、收集候选资料、核对关键事实、形成结论”。计划不必预言每一次工具调用,它的作用是保持方向并提供完成检查。
每次获得新信息后,可以更新剩余步骤,但应保留原始目标和用户约束。若计划发生重大变化,例如从只读研究变成发送外部消息,应重新请求用户授权。
为循环设置硬边界
限制最大迭代次数、总耗时、模型 token、工具调用数和费用。达到限制时,Agent 应返回已经完成的部分、仍缺少的信息和停止原因,而不是生成一个假装完整的答案。
还可以检测重复动作:同一工具使用相同参数连续调用,或多个结果没有带来新信息时,提前停止并请求澄清。
错误分类比盲目重试更重要
临时网络错误可以有限重试;参数校验失败应修正参数;权限不足必须停止;资源不存在可以换查询;外部服务明确拒绝时不应继续绕过。工具返回结构化错误码,Agent 才能采取合适策略。
写操作发生超时时,不能简单重试,因为第一次可能已经成功。使用幂等键或先查询结果,再决定是否补偿。多步骤事务失败时,明确哪些动作已经生效、哪些可以回滚、哪些需要人工处理。
安排人工检查点
以下情况适合暂停:目标仍有歧义,多个方案取舍影响较大,下一步会花费显著资源,或将执行发送、购买、删除、发布等外部动作。向用户展示当前证据、拟执行动作和关键参数,让确认真正有信息量。
输出不完整也要诚实
Agent 无法完成任务时,最有价值的结果可能是一份进度报告:尝试了什么、取得了哪些可靠事实、哪里受阻、需要什么权限或输入。失败可见,系统才能恢复;掩盖失败只会把问题推给下游。
可靠 Agent 的核心不是永不失败,而是失败时不会扩大影响,并能把任务交回给人或下一次运行继续处理。