KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA
12. 完成一次可恢复的配置变更 — keel 龙骨
结课项目把同一个业务意图拆成两步:更新 payment-service/staging 的连接池,再发送值班通知。目标不是让一次演示顺利跑完,而是让每一种中断都有明确状态和恢复动作。
结课项目把同一个业务意图拆成两步:更新 payment-service/staging 的连接池,再发送值班通知。目标不是让一次演示顺利跑完,而是让每一种中断都有明确状态和恢复动作。
运行完整示例
python courses/advanced/real-world-execution/course/project/examples/07_change_run.py
再运行全部测试:
python -m unittest discover -s courses/advanced/real-world-execution/course/project/tests -v
你要能指出每层责任
flowchart TD
G[用户目标] --> O[Ollama ActionProposal]
O --> H[Harness 固定 ActionCommand]
H --> S[Safety Controls 发放绑定许可]
S --> X[Execution Gateway]
X --> I[Idempotency Store]
I --> A[Config / Notification Adapter]
A --> R[Receipt / Operation / Unknown]
R --> C[Reconcile / Compensate]
C --> E[Event History]
- 模型不能生成可信身份、effect、幂等键和审批;
- Harness 不能把“计划生成成功”写成“现实执行成功”;
- Gateway 不负责自由推理,只执行注册动作;
- Adapter 不决定全局权限,只使用最小凭据调用外部系统;
- Reconciler 读取事实,不重新执行;
- Saga 对部分成功作出业务选择;
- Event History 支撑恢复和审计。
必做故障实验
- 同一命令提交两次:外部配置只改变一次;
- 同一幂等键换参数:得到
idempotency_conflict; - 提交后丢失响应:先
unknown,对账后成功; - 资源版本变化:提交点返回
precondition_failed; - 通知失败:按策略得到
partially_succeeded或补偿配置; - 旧审批用于新参数:执行前拒绝;
- Run 在 attempt 后中断:恢复逻辑先查状态,不盲目重试。
完成标准
不要以“脚本打印了 success”作为完成。你应能提交以下证据:
- 一张从 Proposal 到 Receipt 的对象关系图;
- 对每个 ID 的来源和用途说明;
- 一张错误类别到恢复动作的映射表;
- 通过的确定性测试;
- 一次 Ollama 提议输出及其被程序补全/拒绝的字段;
- 对生产替换项的说明:持久化、队列/工作流、租约、凭据、审计和人工操作台。
完成这一步后,继续进入安全控制:让 Agent 的能力停在该停的地方。下一门课会在同一执行链上加入身份、策略、提示注入防护、隔离和安全评估。