Skip to content

计划表示与依赖执行 ​

计划不是模型输出的一段待办文字,而是带 ID、前置条件、输入、验收标准和风险的可执行数据。执行器根据已验证事实选择就绪任务;任务完成前不能把它写进 done。计划可以增删步骤,但每次修改都应记录原因,防止模型悄悄改变目标。

第一个可运行实验:只调度已就绪任务 ​

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

python
def ready(plan, done):
    return [task for task in plan
            if task['id'] not in done and set(task['needs']) <= done]

def accept(task, observation):
    return observation.get('task_id') == task['id'] and observation.get('verified') is True

plan = [
    {'id': 'search', 'needs': []},
    {'id': 'check', 'needs': ['search']},
    {'id': 'write', 'needs': ['check']},
]
done = set()
assert [x['id'] for x in ready(plan, done)] == ['search']
assert accept(plan[0], {'task_id': 'search', 'verified': True})
done.add('search')
assert [x['id'] for x in ready(plan, done)] == ['check']
print('plan dependencies passed')

verified=True 应来自工具、测试或人工确认,而不是模型自报。任务验收失败时,保留失败观察并选择重试、替代步骤或人工接管;不要直接把任务标成完成。动态计划要限制最大步骤、总成本和允许工具集合。

变体实验 ​

给 check 添加不存在的前置任务,要求计划在加载阶段报 missing_dependency。再让 search 验收失败,确认 check 不会进入就绪队列。

练习 ​

  1. 为任务增加验收 schema 和风险等级。
  2. 设计计划版本号,拒绝旧 worker 提交新计划的结果。
  3. 比较固定 pipeline、动态计划和人工审批三种适用场景。

用心记录每一步成长