/ Skills
[Skills-02] 先把问题问对:Grilling 与 Domain Modeling
提炼 grilling、grill-me、grill-with-docs 与 domain-modeling:如何区分事实和决策,逐步消除需求歧义,并留下可复用的领域语言。
Agent 写错代码,很多时候并不是不会写,而是双方以为自己已经达成一致。这个主题的四个 skill 构成一组分层设计:grilling 是可复用原语,grill-me 是无项目场景入口,grill-with-docs 是有代码库时的持久化入口,domain-modeling 则在底层维护精确语言。
1. grilling:事实由 Agent 查,决策由用户做#
Grilling 不是“多问几个问题”,而是沿决策树逐个关闭分支。
它有四条约束:
- 一次只问一个问题,等待回答后再继续;
- 每个问题都给出推荐答案,避免把全部分析负担推回用户;
- 能从文件、代码或工具中查到的事实,Agent 自己查;
- 价值判断和产品取舍必须由用户确认,不能替用户回答。
可以把问题分成两类:
“现在登录态存在哪里?” -> 可验证事实,查代码
“退出登录后要不要保留草稿?” -> 产品决策,问用户流程结束条件也不是“问满 N 个问题”,而是双方确认已经形成 shared understanding。在此之前不实施,避免边问边写导致早期假设沉淀成代码。
2. grill-me:给非代码问题的最小入口#
grill-me 的 body 几乎只有一句:运行 grilling。它存在的价值不是新能力,而是提供一个清楚的、仅用户触发的入口。
适合:
- 讨论学习计划、职业选择或写作方向;
- 项目还没有代码库;
- 不需要在本地留下 glossary 或 ADR。
这个小 skill 展示了组合优于复制:访谈规则只有 grilling 一份,入口只负责表达场景。
3. grill-with-docs:让对话产生长期记忆#
当讨论发生在代码库里,仅靠聊天历史不够。grill-with-docs 同时运行 grilling 和 domain modeling,把已经落定的信息写入两个持久工件:
CONTEXT.md:项目领域词汇、关系、常见场景;- ADR:少数难以逆转、反直觉且包含真实取舍的决定。
它的核心不是“访谈完再写总结”,而是决策一落地就更新文档。即时更新有两个好处:后续问题可以使用刚刚固定的术语;如果对话中途结束,已确认的信息也不会丢失。
并非所有回答都值得 ADR。适合记录的决定通常同时接近三条标准:
- 日后改变成本高;
- 缺少背景时会显得奇怪;
- 确实比较过其他方案。
“今天先不做”通常只是临时范围判断,不应污染长期架构记录。
4. domain-modeling:对模糊词立即追问#
Domain modeling 在整个讨论期间持续工作,不是最后生成一份名词表。它执行五种动作。
4.1 对照 glossary 挑战用词#
如果 CONTEXT.md 已定义 Cancellation 是“整单取消”,用户却开始讨论“取消一个商品”,Agent 应立即指出冲突,而不是默默复用同一个词。
4.2 拆开过载概念#
account 可能同时指客户主体、登录身份和财务账户。好的 glossary 会为三个概念选择不同 canonical term,并列出要避免的 alias。
4.3 用具体场景压测关系#
抽象描述容易制造虚假共识。应询问边缘案例:一个 Order 能否拆成多个 Shipment?部分 Shipment 失败时 Invoice 如何变化?具体对象、基数和状态转换会迫使边界变清楚。
4.4 用代码校验口头模型#
用户说“支持部分取消”,代码却只有 cancelOrder(),这不是简单的实现落后,也可能是双方对模型理解不同。skill 要把矛盾交给用户裁决。
4.5 当场更新事实来源#
术语、关系、example dialogue 和 ambiguities 都进入 CONTEXT.md。后续 Agent 先读它,就可以直接使用项目语言,而不是每次重新考古。
5. 一次完整的对齐循环#
读取 CONTEXT.md / ADR / 相关代码
-> 找出当前决策树的第一个未决节点
-> 能查的事实先查
-> 提一个问题 + 推荐答案
-> 用户裁决
-> 更新 glossary;必要时写 ADR
-> 用边缘场景验证
-> 进入下一个节点
-> 双方确认 shared understanding这套循环的迁移价值很高:不要把 Agent 当成一次性代码生成器,而要让它维护“决策状态”和“领域语言”。上下文变长时,代码库里的工件比模型记忆更可靠。
6. 四个 skill 的边界#
| Skill | 触发方式 | 是否依赖代码库 | 是否写文档 |
|---|---|---|---|
grilling | 可由模型或其他 skill 调用 | 否 | 否 |
grill-me | 用户显式调用 | 否 | 否 |
grill-with-docs | 用户显式调用 | 是 | 是 |
domain-modeling | 模型或其他 skill 调用 | 通常是 | 是 |
不要把它们合成一个超大 skill。访谈原语、场景入口和领域语言纪律各自只有一个变化原因,组合时又能共享同一套行为。