Back to writing

/ Skills

[Skills-02] Ask the Right Questions: Grilling and Domain Modeling

Distilling grilling, grill-me, grill-with-docs, and domain-modeling into a disciplined alignment workflow.

1 minSkill · Requirements · Domain Modeling · DDD

Agent 写错代码,很多时候并不是不会写,而是双方以为自己已经达成一致。这个主题的四个 skill 构成一组分层设计:grilling 是可复用原语,grill-me 是无项目场景入口,grill-with-docs 是有代码库时的持久化入口,domain-modeling 则在底层维护精确语言。

1. grilling:事实由 Agent 查,决策由用户做#

Grilling 不是“多问几个问题”,而是沿决策树逐个关闭分支。

它有四条约束:

  1. 一次只问一个问题,等待回答后再继续;
  2. 每个问题都给出推荐答案,避免把全部分析负担推回用户;
  3. 能从文件、代码或工具中查到的事实,Agent 自己查;
  4. 价值判断和产品取舍必须由用户确认,不能替用户回答。

可以把问题分成两类:

“现在登录态存在哪里?”       -> 可验证事实,查代码
“退出登录后要不要保留草稿?” -> 产品决策,问用户

流程结束条件也不是“问满 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。适合记录的决定通常同时接近三条标准:

  1. 日后改变成本高;
  2. 缺少背景时会显得奇怪;
  3. 确实比较过其他方案。

“今天先不做”通常只是临时范围判断,不应污染长期架构记录。

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。访谈原语、场景入口和领域语言纪律各自只有一个变化原因,组合时又能共享同一套行为。

参考#