Skip to content

规划、反思与工作流的停止证据:练习答案 ​

参考实现 ​

保留正文 schedule,追加:

python
def schedule(deps):
    done, order = set(), []
    while len(done) < len(deps):
        ready = sorted(k for k, parents in deps.items() if k not in done and set(parents) <= done)
        if not ready:
            raise ValueError("cycle or missing dependency")
        for task in ready:
            done.add(task)
            order.append(task)
    return order

def checked_schedule(deps):
    missing = {p for parents in deps.values() for p in parents} - set(deps)
    if missing:
        raise ValueError("missing:" + ",".join(sorted(missing)))
    try:
        return schedule(deps)
    except ValueError:
        raise ValueError("cycle") from None
for data, expected in [({"write": ["read"]}, "missing:read"),
                       ({"a": ["b"], "b": ["a"]}, "cycle")]:
    try: checked_schedule(data)
    except ValueError as e: assert str(e) == expected
    else: raise AssertionError("accepted invalid graph")
print("dependency errors distinguished")

缺失依赖可以补任务,循环需要修改依赖;合并成一个模糊错误会掩盖不同修复方向。

返回正文

深化页面练习解答 ​

计划表示 ​

计划加载时应先检查所有依赖存在;任务验收需要 schema、风险和版本。固定 pipeline 适合步骤稳定且可预测的任务,动态计划适合信息不完整但必须设置预算,人工审批适合高风险副作用。

反思证据 ​

反思记录至少包含失败证据、修正动作、预期变化、验证方式和版本。权限拒绝和预算耗尽直接停止或升级;重复同一 schema 错误而没有新观察时不能继续生成新计划。

工作流停止 ​

handoff 最小交接包包含目标、已验证事实、来源、未解决问题、权限、预算和取消状态。子任务缺失、权限拒绝或预算耗尽都不能汇总为成功;固定 pipeline 在步骤确定、验收稳定的场景更可靠。

用心记录每一步成长