Skill Learning

to-questionnaire

1. Bilingual SKILL.md

左右滑动可直接切换英文版与中文版;两种语言按段落自动对齐。英文中的蓝色虚线词语可点击查看解释。共标记 15 处。

入口 skill:to-questionnaire左右滑动切换语言 · 段落位置自动对齐
Turn something the user can't answer alone into a **questionnaire**: a Markdown document they hand to one person to , or fill out together over a meeting. The recipient holds knowledge the user lacks; the questionnaire .
**.** Interview the user only about the _send_, which they can always answer: who it goes to, and what they need back. The questions in the document then between what the recipient knows and what the user needs.
1. **Who is it going to?** Ask, , the recipient's role, expertise, and relationship to the user. This fixes the questionnaire's tone and how much context it must carry. Done when you know who the recipient is and what they know that the user doesn't.
2. **What do you need back?** Ask, , the specific decisions or facts the user can't resolve alone and needs from this person. Done when you have a concrete list of what the user must .
3. **Write the questionnaire.** Draft questions aimed at the gap from steps 1–2, following the Document structure below. Write it to `to-questionnaire-<slug>.md` in the current directory (slug from the topic) and report the path. Done when the file exists and every item the user named in step 2 is covered by a question.
## Document structure
Frame the document as a ****: the user lacks context, the recipient holds it. Order questions , since async means you may , and group them under `##` headings by theme once there are . Write it using the template below.
<questionnaire-template>
# <Questionnaire title>
**Purpose:** why this questionnaire exists and .
**From:** <the user>, **To:** <the recipient>, **How your answers will be used:** <where they go>
## Context
One paragraph orienting a recipient who wasn't in the user's head. Enough to answer well, not a page.
## How to answer
Deadline and rough effort. Partial answers and "I don't know" are useful: flag anything you're unsure of rather than skipping it.
## <Theme heading>
One `##` section per theme. Under each, its questions, . Every question is one idea, never compound, with an answer stub directly beneath, and a one-line _why this matters_ only where the question could be misread or .
<question-example> ### What load is the system expected to handle at launch?
_Why this matters: it decides whether we provision for burst traffic now or defer it._
> </question-example>
## Anything else?
: anything we didn't ask that we should know?
</questionnaire-template>
把用户无法独自回答的事情转化成一份**问卷(questionnaire)**:一份 Markdown 文档,可以异步交给某一个人填写,也可以在会议中一起完成。接收者掌握用户缺少的知识;问卷负责把这些知识提取出来。
**追问发送方式,而不是主题本身。** 只围绕用户一定能回答的_发送事项_访谈用户:问卷要给谁,以及用户需要收回什么。文档中的问题随后瞄准接收者所知与用户所需之间的**缺口**。
1. **要发给谁?** 在一次交流中询问接收者的角色、专业能力及其与用户的关系。这决定问卷的语气,以及它必须携带多少背景信息。当你知道接收者是谁,以及他们掌握哪些用户不掌握的知识时,此步骤完成。
2. **你需要收回什么?** 在一次交流中询问用户无法独自解决、必须从此人处获得的具体决策或事实。当你得到一份明确清单,知道用户在结束后必须能够采取哪些行动或作出哪些决定时,此步骤完成。
3. **编写问卷。** 按照下方的文档结构,针对步骤 1–2 得出的缺口起草问题。将文件写入当前目录中的 `to-questionnaire-<slug>.md`(slug 取自主题),并报告路径。当文件已经存在,而且用户在步骤 2 指出的每一项都由一个问题覆盖时,此步骤完成。
## 文档结构
把文档定义为一份**调研问卷(discovery questionnaire)**:用户缺少背景信息,而接收者掌握这些信息。由于异步沟通可能只有一次作答机会,问题应按重要性从高到低排序;问题超过少量几个时,再按主题归入 `##` 标题。使用下面的模板编写。
<questionnaire-template>
# <问卷标题>
**目的:** 这份问卷为何存在,以及哪个决策取决于它。
**来自:** <用户>,**发给:** <接收者>,**你的回答将如何使用:** <回答的去向>
## 背景
用一个段落帮助并不了解用户想法的接收者进入情境。信息应足以支持高质量回答,但不要写成整整一页。
## 如何回答
写明截止时间和大致所需精力。部分回答和“我不知道”也有价值:与其跳过,不如标记任何你不确定的内容。
## <主题标题>
每个主题使用一个 `##` 小节。每节下面列出对应问题,并按重要性从高到低排序。每个问题只表达一个意思,绝不组合多个问题;其正下方放置回答占位符。只有当问题可能被误解或引出敷衍回答时,才添加一行_为什么这很重要_。
<question-example> ### 系统上线时预计需要承受多大负载?
_为什么这很重要:它决定我们现在就为突发流量预配资源,还是把这件事推迟。_
> </question-example>
## 还有其他事项吗?
最后用一个兜底问题收尾:有没有我们没有问到、但本应知道的事情?
</questionnaire-template>

Entry SHA-256: b5eb929842ee0e93d867c5e906d183d350f2f2d149eaeaa86967d94d8eda1d3b

2. Why This Skill Is Clever

一句话核心机制

只向用户追问他们一定知道的“发送接口”——接收者是谁、需要收回什么——再把两者之间的知识缺口编译成一份可独立填写、按决策价值排序的 Markdown 问卷。

触发与调用边界

直接来源: frontmatter 的 disable-model-invocation: true 把 to-questionnaire 设为用户显式调用的工具。正文把适用场景限定为:用户无法独自回答,但某一个接收者掌握缺失知识;产物是交给这个人异步填写或在会议中共同填写的问卷。

支持背景: agents/openai.yaml 的 allow_implicit_invocation: false 再次确认禁止模型自行触发。配套 docs 将入口写成 /to-questionnaire,并明确它不是多接收者路由、分支问卷或自动发送工具。这些信息帮助解释调用边界,不属于本页展示的原始 SKILL.md。

信息架构与执行顺序

  1. 先确认唯一接收者的角色、专业能力和与用户的关系,用它校准语气与背景信息量。
  2. 再确认用户必须从此人处获得的具体事实或决策,建立完整性清单。
  3. 用前两步计算“接收者所知”与“用户所需”之间的 gap,而不是继续审问用户不掌握的主题。
  4. 把 gap 转成一题一意的问题,按 most-important-first 排序;问题较多时再按主题分组。
  5. 为接收者补齐 Purpose、From/To、Context、How to answer、截止时间与投入预期。
  6. 给每题直接放置回答占位符,仅在可能误解或敷衍时解释 why this matters。
  7. 以 Anything else? 兜底,并把文件写成当前目录中的 to-questionnaire-<slug>.md。
  8. 用明确停止条件验收:文件存在,而且用户在第二步列出的每一项都能追踪到一个问题。

最巧妙的设计点

1. 用“可回答性”重新划定访谈边界

“Grill the send, not the subject.”

直接来源: 用户之所以需要外部接收者,正是因为他们不知道主题答案。skill 不让 agent 在错误的人身上继续消耗访谈轮次,而只询问用户一定能回答的发送对象与预期结果。

解释: 这是一个信息所有权路由器。它先判断知识在哪个人脑中,再决定向谁提什么问题;因此避免把“用户不知道”误诊为“还没追问够”。

2. 把模糊求助编译成可验收的 gap

“target the gap between what the recipient knows and what the user needs”

直接来源: 问题不以主题百科为中心,而以接收者能力与用户决策需求的差集为中心。第二步的 concrete list 同时成为输出覆盖率清单。

解释: 需求收集和验收共用同一份事实集合,减少“问卷写得很专业,但没有回答真正阻塞项”的失败。

3. 每个访谈阶段都有局部完成定义

“Done when you know who the recipient is”

“Done when you have a concrete list”

“Done when the file exists”

直接来源: 三步都以可观察结果结束,而不是依赖 agent 主观判断“聊得差不多”。前两步还被约束为 in one exchange,抑制无限澄清。

解释: 这些 stopping conditions 把生成式对话变成有限状态机:识别接收者 → 固化回收目标 → 写文件并做覆盖检查。

4. 用异步最坏情况决定排序,而不是追求文档叙事感

“since async means you may only get one pass”

直接来源: 问题必须 most-important-first。即使接收者中途停止填写,最有决策价值的答案仍最可能先被收回。

解释: 这是面向部分失败的内容排序,相当于让文档具备 graceful degradation。主题分组只是辅助导航,不能取代全局重要性。

5. 同时降低回答成本与错误自信

“Partial answers and \"I don't know\" are useful”

直接来源: 文档要求写明 deadline 与 rough effort,并明确允许部分回答和“不知道”;不确定内容应被标记,而不是跳过。

解释: 这把“完成率”从每题必填改成不确定性也可被结构化回收。缺失值被显式标注,优于让接收者用猜测填满表格。

6. 通过一题一意和选择性解释提升答案可用性

“Every question is one idea, never compound”

直接来源: 每题只有一个意思并紧邻回答占位符;只有容易误解或引出 throwaway answer 时才加入 why this matters。

解释: 原子问题让缺答、歧义和后续追踪都能定位到单一变量;选择性解释则避免问卷被冗长理由淹没。

防失败机制与明确不变量

Trade-offs、可移植风险与 harness 假设

直接来源: skill 假设 harness 能理解 disable-model-invocation,能在当前目录写 Markdown 文件,并能向用户报告实际路径。<questionnaire-template> 和 <question-example> 是供 agent 解析的结构标记,不是通用 Markdown 标准。

支持背景: docs 明确静态问卷不做分支逻辑、不拆分多个接收者、也不自动发送;它还依赖同一会话上下文承接先前 grilling 的背景。agents/openai.yaml 中的调用策略是特定 harness 元数据。

解释:

可迁移原则

  1. 先定位信息所有者,再设计问题。 不要向没有答案的人持续增加追问强度。
  2. 把“我需要知道什么”同时用作生成输入和验收清单。
  3. 为每个阶段写可观察的完成条件,让对话型流程也能有限停止。
  4. 按部分失败设计内容顺序。 最重要信息先出现,保证只完成一部分时仍有价值。
  5. 一题只采集一个变量,并把回答空间放在问题旁边。
  6. 把不确定性当作有效数据。 允许“不知道”,并要求标记信心边界。
  7. 模板应服务于陌生接收者。 产物必须脱离原会话仍能说明目的、背景、截止时间和使用方式。

今日实践题

假设你的上线计划被“客户真实峰值流量”阻塞,而客户技术负责人掌握答案:你会如何分别写出 Who is it going to? 与 What do you need back? 的完成条件,并把最关键的问题放在问卷第一位?

Evidence note

Source & provenance
Repository path
skills/productivity/to-questionnaire/SKILL.md
Generated
2026-08-28 10:15 Asia/Shanghai
Upstream commit
6654f6b60cd9d5be8b54c6fafe44346dabeb3b76
Source
View on GitHub