自然语言编程的问题不是"模型能不能写代码",而是"自然语言里的判断、边界和抽象会在哪一层失控"。
Failure Stack 把这些失控点拆成五层。每一层都有自己的错误信号、护栏问题和适合沉淀的 skill。
问题:不该做的东西被快速做出来。
典型信号:
- "竞品有,我们也要有。"
- "先做个 demo 看看。"
- "老板觉得这个方向重要。"
- 说不清真实用户、触发场景和旧体验。
护栏问题:
- 谁在什么时刻遇到了什么问题?
- 没有新方案时,他们如何解决?
- 用户价值是否大于旧体验和替换成本?
- 当前证据等级是否配得上资源投入?
对应 skill:
问题:自然语言描述听起来合理,但没有形成可执行契约。
典型信号:
- "做一个智能助手"但没有角色、输入、输出和边界。
- 只有正例,没有反例。
- 没有验收标准。
- 同一句需求,产品、工程、Agent 理解成三件事。
护栏问题:
- 输入和输出是什么?
- 必须做什么?明确不做什么?
- 哪些 case 算通过?哪些 case 必须拒绝?
- 谁来验收?用什么证据验收?
未来 skill 方向:
- spec-contract
- acceptance-gate
- boundary-review
问题:系统性问题被当成单点 bug 或 prompt 问题处理。
典型信号:
- 同类 badcase 反复出现。
- prompt 越修越长。
- if/else、关键词、正则规则扩散。
- "上次也改过这里。"
- 修一个 case 破坏另一个 case。
护栏问题:
- 这是单点 case,还是一类失败?
- 逻辑分散在几个地方?
- 应该修 prompt、router、validator、schema、memory,还是模块边界?
- 有没有 eval 能证明修复有效?
对应 skill:
问题:Agent 执行流程失控,工具、权限、上下文和状态不稳定。
典型信号:
- 工具选择靠表层词。
- 需要多步执行,但没有检查点。
- 上下文过载后开始遗忘约束。
- 权限、文件、命令、网络行为没有清晰边界。
护栏问题:
- 哪些动作必须先读证据?
- 哪些动作需要用户确认?
- 哪些状态必须持久化?
- 哪些失败要停止,而不是继续补救?
未来 skill 方向:
- execution-plan
- tool-routing-review
- permission-boundary
问题:无法证明系统真的变好。
典型信号:
- "感觉好多了。"
- 没有 badcase 集。
- 没有回放路径。
- 没有正例、反例、边界例。
- 修复后不跑回归。
护栏问题:
- 什么行为算好?
- 什么行为算坏?
- 如何回放?
- 如何防止旧 case 回归?
未来 skill 方向:
- eval-loop
- replay-audit
- regression-gate
五层说明问题发生在哪里,失败模式说明问题如何表现。
| Failure Mode | 主要层级 | 说明 |
|---|---|---|
| Bad Demand Loop | Demand | 先实现,再为需求找理由 |
| Ambiguous Specification | Specification | 需求没有形成可执行契约 |
| Patch Spiral | Architecture | 用补丁处理重复系统问题 |
| Wrong-Layer Fix | Architecture | 在错误抽象层修复 |
| Context Collapse | Execution | 单点正常,多轮/跨上下文失败 |
| Eval Blindspot | Evaluation | 无法客观证明修复有效 |
一个 skill 可以辐射多层,但必须声明一个主要层级。否则它会变成泛泛建议,而不是可复用 guardrail。