Archived
docs: 确定性步骤落地 —— 规范 §4.6、ADR-014 转已实现、两笔欠账
ADR-014 §8 的两条禁令(不 submit、不发决策卡)撤掉并写明理由: 那是假设还有 agent 在场时的保守话,全程无 agent 的活动没有别人来干这两件事。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
This commit is contained in:
@@ -316,6 +316,50 @@ W05 的两张数据工单(人填的值已入库、必填不缺、逐颗对账)
|
||||
|
||||
---
|
||||
|
||||
## 4.6 确定性步骤:这一步系统自己做(2026-08-29)
|
||||
|
||||
一步要么确定,要么不是。**不做「一半 auto」** —— 判断点先从那一步里切出去。
|
||||
|
||||
`PlanStep.auto` 是一份**声明式配方**,五个动词按序执行:
|
||||
|
||||
| 动词 | 做什么 |
|
||||
|---|---|
|
||||
| `project` | 从某个来源的每一行投影出台账行,落草稿层。带 `prune` 时,这一笔投影出来的行**就是这张表在本单草稿里的全部** |
|
||||
| `analyze` | **一次结构化 AI 调用**:系统组装入参、声明出参 schema、系统把结果落表。不给工具、不给记忆、不多轮 |
|
||||
| `card` | 发一张卡(执行工单 / 数据工单 / 决策卡)。**至多一张**,发过就不再发 |
|
||||
| `submit` | 提交放行(只许出现在声明了人工验收清单的那一步) |
|
||||
| `say` | 一句给人看的交代 |
|
||||
|
||||
地址只有四种:`域.对象`(任务视图 = 正式 + 本单草稿叠加,**默认该用的那一种**)· `mine:域.对象` ·
|
||||
`in:入参数组` · `result:xxx`(本拍 analyze 的出参)。
|
||||
|
||||
**guide 可以留空,但只有声明了 auto 才行**:`planStepSchema` 原来要求 `guide` 非空
|
||||
(`.min(1)`)—— 那是防「作者忘了写做法」的老规矩,可它顺手把「这一步一次都不问模型」堵死了。
|
||||
现在改成 `superRefine`:没声明 `auto` 的步照旧非空;声明了 `auto` 的步允许 `guide` 写空串
|
||||
(`guide.trim() === ''`)——引擎正是按这个空串分「全 auto(一次都不问模型)」与
|
||||
「半 auto(确定的先做完,剩下的判断仍问模型)」。**全 auto 的步就把 `guide` 写成空串**,
|
||||
别为了过 schema 塞一句废话。
|
||||
|
||||
**半 auto 的步,人答完卡之后那一截判断仍然是模型的活**:配方发过一张卡、`worldTouched`
|
||||
为真、这一拍没有未答的卡、配方这一拍也没再发新卡 —— 这几个条件都成立时,引擎本可以
|
||||
「卡答过了就收步」抄近道直接收掉这一项。但**这条近道只走没有 `guide` 的步**(全 auto);
|
||||
只要 `guide` 非空(半 auto),就算前面几个条件都成立,也仍然要往下问模型 ——
|
||||
半 auto 存在的意义就是「确定的先做完,剩下的判断仍问模型」:人答完卡之后那份判断
|
||||
(读人写的自由文本、落到具体的行上)恰恰是模型该干的活,收在它前面等于把半 auto 的
|
||||
后半截整个删掉。写半 auto 的步时记住这条:`guide` 不空,这一步答完卡不会被引擎抢先收掉。
|
||||
|
||||
**四条纪律**(每一条都是踩出来的):
|
||||
|
||||
1. **行由确定的那一侧决定,不由 AI 决定。** 明细表要按类型字典 `each` 出来,AI 的出参只是拿主键
|
||||
`lookup` 的一张查表 —— 它漏一条,那一格就是空,`required` 立刻变成 `_missing > 0`,闸与放行门当场拦住。
|
||||
写成 `from each(AI 出参)` 的话,它少给两条就少两行,而每一行看着都合规。
|
||||
2. **判据不许编一个数不出来的数。** 「本类型有几个字段」不是基座数得出来的数(`_rows` 数的是**本单写下的**行);
|
||||
行数对账交给 `prune` 的结构保证,别写进 `doneWhen`。
|
||||
3. **每一笔之前刷读数。** 后一笔常要数前一笔刚写下的行。
|
||||
4. **出错交人,不重试、不退回模型。** 配方抛错是包的 bug;退回模型就是让它去凑。
|
||||
|
||||
---
|
||||
|
||||
## 5. 活动包怎么写
|
||||
|
||||
### 5.1 包结构
|
||||
|
||||
Reference in New Issue
Block a user