Skip to content

Agent 状态与停止条件 ​

Agent 状态不应只写成“模型还在思考”。至少区分 running、waiting_tool、completed、failed、cancelled 和 budget_exhausted。停止条件同时保护质量和资源:任务验收通过可以结束,预算、deadline、最大步数、重复调用、权限拒绝和用户取消也必须结束。模型说“完成”只能作为候选信号,不能替代业务验收。

第一个可运行实验:可解释的停止原因 ​

保存为 stop.py,用 Python 3.12 运行。

python
def should_stop(state):
    if state['cancelled']:
        return 'cancelled'
    if state['now'] >= state['deadline']:
        return 'deadline'
    if state['steps'] >= state['max_steps']:
        return 'step_budget'
    if state['permission_denied']:
        return 'permission_denied'
    if state['goal_verified']:
        return 'completed'
    return None

base = {'cancelled': False, 'now': 3, 'deadline': 10,
        'steps': 1, 'max_steps': 4, 'permission_denied': False,
        'goal_verified': False}
assert should_stop(base) is None
assert should_stop({**base, 'goal_verified': True}) == 'completed'
assert should_stop({**base, 'steps': 4}) == 'step_budget'
assert should_stop({**base, 'permission_denied': True}) == 'permission_denied'
print('stop reasons passed')

停止原因要写入运行记录,用户才能知道是完成、超时还是权限拒绝。重规划只能处理可恢复的资料失败;越权、预算耗尽和用户取消不应通过再问一次模型绕过。停止后迟到的模型或工具事件必须按 run_id 丢弃或单独审计。

变体实验 ​

同时满足 goal_verified 和 permission_denied 时,按安全顺序让拒绝优先。再让 deadline 已过但模型声称完成,要求系统返回 deadline,而不是 completed。

练习 ​

  1. 增加总成本和最大成本两个字段,并说明哪个停止原因优先。
  2. 设计重复相同工具参数且没有新证据时的停止条件。
  3. 区分“工具执行未知”和“工具明确失败”对重规划的影响。

用心记录每一步成长