Community写作与编辑github.com

需求撰写

使用EARS-12模式、INCOSE C1-C9质量属性和规范交叉引用语法,起草用户需求、产品需求和软件需求。输出为Markdown格式。

需求撰写 是什么?

此技能(`aor-req`)是Agents-On-Rails(AOR)工具包的一部分,旨在帮助开发者和AI代理以结构化方式撰写系统需求。它遵循INCOSE C1-C9质量属性,并利用EARS-12模式确保需求清晰、可测试。该技能支持探索性模式(用于快速起草单个需求,无需文件写入)和文档模式(用于生成完整的规范文档,自动写入文件)。工作流分为多个步骤:首先确定范围并分类需求层次(用户需求、产品需求或软件需求),然后逐步撰写每个层次,并强制执行诸如对抗性错误分解、引用完整性检查和回显门控(Echo Gate)等质量检查,以确保每个需求都是可测试的。支持从Excel等来源批量输入,并自动处理大型数据集。此技能专为Claude、GitHub Copilot等AI代理设计。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add Agents-On-Rails/skills

Installed? Explore more 写作与编辑 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

/aor-req — 需求撰写

根据EARS-12模式、INCOSE C1-C9质量属性以及规范交叉引用语法,起草UN、PR和SR。输出为Markdown格式。

关于技能与代理的说明。 AOR工具包中包含.claude/skills/aor-*/SKILL.md下的技能(可直接调用,例如本技能)和.claude/agents/aor-sme-*.md下的专家代理(仅由aor-review / aor-review-adhoc调用的子代理系统提示词)。切勿将代理作为技能调用——否则将失败并显示“未找到技能”。

操作纪律

全程应用。在启动时向用户声明每一项。

  • 模式(启动时声明): 询问本次是探索性会话(单个需求,对话式,无文件)还是文档会话(完整规范编写,写入文件)。如果作用域以内联文本形式提供且不包含文件路径,则默认为探索性模式;否则默认为文档模式。该模式控制步骤5–7是否写入磁盘。
  • 调用确认: 技能的首次回复应声明“以aor-req身份在<模式>模式下运行。除非您另行指定,否则文件将写入<输出路径>”。消除“技能是否实际运行?”的歧义。
  • 问答纪律: 一次只问一个澄清性问题。等待用户回答后再问下一个。不要堆叠问题。一个AskUserQuestion调用中呈现一个包含多个选项的决策(例如多选菜单)算作一个问题;但在一次调用中呈现两个不相关的决策则属于堆叠。
  • 失败披露: 如果任何规定步骤无法完成(文件写入受阻、子代理调用失败、参考文件不可用、部分完成、超时、权限被拒绝),请在聊天中说明。在披露之后,暂停并询问是重试、回退到披露的手动模拟,还是中止——不要静默继续。对于明显可恢复的临时故障(例如网络超时),在强制披露前允许重试一次。

工作流

步骤1:确定范围

如果用户传递了作用域文本或文件路径,则使用它。否则,通过AskUserQuestion询问:“应指定哪些功能或变更?”

区分作用域文本与文件路径(REQ-B):如果输入满足以下任一条件,则视为路径:(a)包含/或\,(b)以.md / .txt / .xlsx / .csv / .docx结尾,或(c)通过Read()解析为磁盘上存在的文件。否则视为作用域文本——包括多词描述,如“患者预约挂号系统”。

决胜规则: 如果只有规则(c)匹配(没有/或\,没有识别的扩展名,但Read()解析成功)且输入是单个单词,请在视为路径之前向用户确认:“我找到了一个名为<输入>的文件。您是指那个文件,还是这是一个范围描述?”

对于来自Excel的输入,期望主机LLM在此技能运行之前已将行转录到Markdown工作缓冲区中(工具包不直接解析Excel)。

步骤1a:分类级别

如果是探索性模式,请询问:

“这是用户需求(UN)、产品需求(PR)还是软件需求(SR)?”

一旦知道级别,跳过未使用的步骤:UN审查需要步骤2;PR审查需要步骤3 + 回显门控;SR审查需要步骤4–6。

探索性模式下的多级输入: 如果用户提供的是UN+PR+SR集合(或任意多个级别的组合),而不是选择一个,则作为多级审查处理——按顺序对所提供的级别执行步骤2–4,但保持探索性文件写入纪律(不自动写入磁盘;以内联方式呈现发现)。

如果是文档模式,除非用户另有指定,否则默认对所有三个级别(UN → PR → SR)执行步骤2–4。

步骤2:编写用户需求(UN-NNN)

为每个不同的利益相关者需求编写一个UN。规则:

  • 技术无关,以利益相关者视角表述
  • 纯叙述性语言(非EARS语法)
  • 包含问题陈述(2-3句)+ 需求陈述
  • 通过traces_to::UN->Persona [<persona-id>]标记人物角色
  • 优先级:Critical | High | Medium | Low

格式见templates.md。

步骤3:编写产品需求(PR-NNN)

为每个UN推导PR:

  • 技术无关,可测量,客观
  • EARS语法(参见ears-guide.md了解12种模式)
  • 每个PR向后追溯:derived_from::PR->UN [UN-NNN]
  • 每个PR向前追溯:traces_to::PR->SR [SR-NNN]
  • 每个主路径PR必须至少有一个If/Then(非期望行为)PR作为伴侣
  • 相同If/Then伴侣规则适用于步骤4中的SR级别——每个主路径SR必须有一个指定实现级恢复机制的If/Then SR伴侣
  • 每个EARS-N(否定/“不得”)PR必须至少有一个正向伴侣PR(普遍型、事件驱动型或状态驱动型),用于指定预期的正确行为;相同规则适用于SR级别

“主路径”定义(REQ-E):如果PR使用以下正向EARS模式之一,则视为主路径——Ubiquitous、Event-Driven、State-Driven、Optional、Complex、EARS-E、EARS-T、EARS-P。排除项:Unwanted Behaviour、EARS-N(否定/“不得”)、EARS-F(故障模式声明式)。

为每个UN执行对抗性错误分解:

  1. 它如何静默失败?
  2. 它如何噪音失败?
  3. 它如何在高负载下失败?
  4. 它如何在恶意攻击下失败?
  5. 它如何随时间推移失败?

每种故障模式要么成为EARS If/Then PR(在标题中标记[ADV];标识符保持规范,例如PR-007 [ADV]),要么作为单独风险登记册的备注。

工作示例。 UN:“保留所有上传的文件”。故障模式:“磁盘空间耗尽时静默失败”。生成的PR:

### PR-007 [ADV]: 磁盘压力高时拒绝上传
如果磁盘剩余空间低于5%,则系统应拒绝新上传,返回HTTP 507 Insufficient Storage并包含Retry-After标头。
derived_from::PR->UN [UN-001]
traces_to::PR->SR [SR-014]

注意故障模式是具体且量化的(5%、HTTP 507、Retry-After)——这正是使PR可验证的原因(C7)。

步骤4:编写软件需求(SR-NNN)

为每个PR推导SR:

  • 实现特定:命名服务、API、数据库、错误代码
  • 使用具体组件名称的EARS语法
  • 每个SR向后追溯:derived_from::SR->PR [PR-NNN]
  • 每个SR向前追溯:traces_to::SR->TC [TC-NNN]
  • 使用子句级粒度(SR-NNN.c1、.c2)将相关行为整合到单个SR ID下
  • 每个主路径SR必须至少有一个If/Then(非期望行为)SR伴侣(参见步骤3中的“主路径”定义)
  • 每个EARS-N SR必须至少有一个正向伴侣SR

步骤5:字段规格表

对于具有数据输入/显示的功能,在SR部分添加字段规格表:

Field IDNameLabelTypeMinMaxUnitDefaultRequiredUI ExposureValidation RuleError MsgParent SR

UI Exposure值:editable | display-only | hidden。

步骤6:回显门控

为每个SR子句编写一行可测试的断言:

VERIFY: [SR-NNN.cl] — [将需求重述为可测试的断言]

如果无法编写断言,则需求不可测试——请重写它。

步骤7:完整性检查

在宣布撰写完成之前,运行completeness.md中的检查清单。

大型输入处理

当输入超过大约200个源项时(例如大型Excel粘贴):

  1. 将输入拆分为每批50行。
  2. 对于每个批次: a. 读取该批次。 b. 按照上述步骤转录为Markdown UN/PR/SR。 c. 追加到工作文件(不要覆盖)。 d. 报告进度:“批次 / 完成;已起草个需求。”
  3. 所有批次完成后,对完整文件运行完整性检查。

如果某个批次包含模糊输入,请在继续之前暂停并请求澄清——不要静默跳过行。

输出路径

默认:合并的UN/PR/SR输出到./requirements/SPECIFICATION.md。用户可以覆盖。

更新现有文件时,保留现有ID——使用下一个顺序编号追加新ID。

交叉引用语法(速查表)

relation_type::SOURCE->TARGET [ID-list]
类型方向用途
traces_to向前UN→PR, PR→SR, SR→TC, UN→Persona
derived_from向后PR→UN, SR→PR, TC→SR
validates验证TC→SR
mitigates风险控制SR→RISK
conflicts_with矛盾任意→任意

标识符格式

正则表达式:^(UN|PR|SR|TC)-\d{3}(\.[A-Z])?$

  • 基本ID:UN-001, PR-001, SR-001
  • 子ID(EARS-P表格):PR-010.A, PR-010.B
  • 子句表示法:SR-001.c1, SR-001.c2

参考文件

  • ears-guide.md — 12种EARS模式
  • templates.md — UN/PR/SR部分的Markdown模板
  • completeness.md — 退出检查清单(UN→PR→SR覆盖)

相关技能