@templmf/temp-solf-lmf 0.0.70 → 0.0.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
package/guanwang.zip ADDED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@templmf/temp-solf-lmf",
3
- "version": "0.0.70",
3
+ "version": "0.0.73",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -1,361 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="zh-CN">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>别让 AI 猜需求:从“自然语言”到“机器可执行指令”</title>
7
- <link rel="preconnect" href="https://fonts.googleapis.com">
8
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700;900&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet">
10
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
11
- <style>
12
- /* 核心设计理念:瑞士平面设计、绝对直角、极简、高对比度 */
13
- * { box-sizing: border-box; margin: 0; padding: 0; }
14
-
15
- body {
16
- background-color: #F0F2F5;
17
- display: flex;
18
- flex-direction: column;
19
- align-items: center;
20
- gap: 60px;
21
- padding: 60px 0;
22
- font-family: 'Inter', sans-serif;
23
- color: #1A1A1A;
24
- }
25
-
26
- .slide-container {
27
- width: 1280px;
28
- height: 720px;
29
- background: #FFFFFF;
30
- overflow: hidden;
31
- position: relative;
32
- display: flex;
33
- flex-direction: column;
34
- border-radius: 0;
35
- box-shadow: 0 20px 50px rgba(0,0,0,0.1);
36
- }
37
-
38
- /* 装饰元素 */
39
- .slide-container::after {
40
- content: "";
41
- position: absolute;
42
- bottom: 40px; left: 40px;
43
- width: 80px; height: 6px;
44
- background: #E63946;
45
- z-index: 1;
46
- }
47
-
48
- .content-area {
49
- flex-grow: 1;
50
- padding: 40px 80px 60px 80px;
51
- z-index: 2;
52
- display: flex;
53
- flex-direction: column;
54
- justify-content: flex-start;
55
- }
56
-
57
- /* 文字排版 */
58
- h1 { font-size: 82px; font-weight: 900; line-height: 1.1; letter-spacing: -2px; margin-bottom: 20px; }
59
- .slide-title { font-size: 42px; font-weight: 700; margin-left:20px;margin-top:25px; color: #1D3557; margin-bottom: 30px; text-transform: uppercase; border-left: 15px solid #E63946; padding-left: 25px; }
60
- h3 { font-size: 24px; font-weight: 700; margin-bottom: 12px; color: #1D3557; display: flex; align-items: center; gap: 10px; }
61
- p, li { font-size: 18px; line-height: 1.5; color: #333; }
62
- .subtitle { font-size: 28px; color: #666; margin-top: 10px; }
63
- code { font-family: 'JetBrains Mono', monospace; background: #F0F0F0; padding: 2px 6px; color: #D63384; font-size: 0.9em; }
64
-
65
- /* 布局组件 */
66
- .two-column { display: grid; grid-template-columns: 1fr 1fr; gap: 30px; width: 100%; }
67
-
68
- .case-box { padding: 25px; border: 1px solid #EEE; height: 100%; position: relative; }
69
- .case-box.bad { background: #FFF5F5; border-top: 8px solid #E63946; }
70
- .case-box.good { background: #F5FFF9; border-top: 8px solid #2A9D8F; }
71
-
72
- .label { display: inline-block; padding: 4px 12px; font-weight: 900; font-size: 14px; margin-bottom: 15px; color: white; }
73
- .label-bad { background: #E63946; }
74
- .label-good { background: #2A9D8F; }
75
-
76
- .error-list { margin-top: 10px; border-top: 1px dashed #E63946; padding-top: 10px; }
77
- .error-list li { font-size: 15px; color: #C0392B; margin-bottom: 5px; list-style: none; }
78
- .error-list li i { margin-right: 8px; }
79
-
80
- .json-block { background: #1A1A1A; color: #A5D6FF; padding: 15px; font-family: 'JetBrains Mono', monospace; font-size: 13px; line-height: 1.3; }
81
-
82
- /* 标题页专用 */
83
- .title-layout { padding: 100px; height: 100%; display: flex; flex-direction: column; justify-content: center; }
84
-
85
- /* 词典风格专用 */
86
- .dict-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; width: 100%; }
87
- .dict-item { background: #F8F9FA; border: 1px solid #DDD; padding: 20px; display: flex; flex-direction: column; gap: 15px; }
88
- .dict-title { font-size: 22px; font-weight: 900; color: #E63946; border-bottom: 2px solid #E63946; padding-bottom: 10px; }
89
- .chaos-zone { background: #1A1A1A; color: #FF4D4D; padding: 15px; font-size: 14px; border-left: 5px solid #FF4D4D; }
90
- .refine-zone { background: #E6FFFA; color: #234E52; padding: 15px; font-size: 14px; border-left: 5px solid #38B2AC; }
91
-
92
- .red-highlight { color: #E63946; font-weight: 900; }
93
-
94
- /* 脑补示意图容器 */
95
- .diagram-container {
96
- background: #f8f9fa;
97
- height: 500px;
98
- display: flex;
99
- flex-direction: column;
100
- align-items: center;
101
- justify-content: center;
102
- padding: 40px;
103
- position: relative;
104
- }
105
- </style>
106
- </head>
107
- <body>
108
-
109
- <!-- SLIDE 1: 封面 -->
110
- <div class="slide-container">
111
- <div class="title-layout">
112
- <p style="font-weight: 900; color: #E63946; letter-spacing: 4px; margin-bottom: 10px;">PROMPT ENGINEERING FOR PD</p>
113
- <h1>别让 AI 猜需求</h1>
114
- <p class="subtitle" style="font-weight: 700; border-top: 6px solid #1D3557; padding-top: 20px; width: fit-content;">从“自然语言”到“机器可执行指令”</p>
115
- </div>
116
- </div>
117
-
118
- <!-- SLIDE 2: 核心痛点 -->
119
- <div class="slide-container">
120
- <h2 class="slide-title">灵魂拷问:你是在写文档,还是在让 AI 盲人摸象?</h2>
121
- <div class="content-area">
122
- <div class="two-column">
123
- <div>
124
- <h3><i class="fa-solid fa-triangle-exclamation"></i> 现状:货不对板</h3>
125
- <p>很多人抱怨 AI 写的代码不能用。但真相是:AI 没有写错语法,它只是忠实地<strong>“脑补”</strong>了你文档中的模糊地带。</p>
126
- <div style="margin-top: 30px; padding: 25px; background: #F8F9FA; border-left: 8px solid #1D3557;">
127
- <strong>认知重塑:</strong>小参数模型(如 Qwen3、DeepSeek)不会主动追问。遇到歧义,它会根据概率分布随机选择一种实现方案——通常不是你要的那种。
128
- </div>
129
- </div>
130
- <div class="diagram-container">
131
- <svg width="400" height="300" viewBox="0 0 400 300" fill="none" xmlns="http://www.w3.org/2000/svg">
132
- <!-- 输入端:破碎的需求 -->
133
- <rect x="20" y="130" width="80" height="40" stroke="#666" stroke-dasharray="4 4" />
134
- <text x="35" y="155" fill="#666" font-family="Inter" font-size="12" font-weight="700">模糊需求</text>
135
-
136
- <!-- 漏斗/AI层 -->
137
- <path d="M120 100L180 150L120 200V100Z" fill="#E63946" />
138
- <text x="135" y="155" fill="white" font-family="Inter" font-size="14" font-weight="900">AI</text>
139
-
140
- <!-- 脑补路径:发散的色块 -->
141
- <path d="M200 150L350 50L370 70L220 170" fill="#E63946" fill-opacity="0.2" />
142
- <path d="M200 150L380 140L380 160L200 150" fill="#E63946" fill-opacity="0.4" />
143
- <path d="M200 150L350 250L370 230L220 130" fill="#E63946" fill-opacity="0.6" />
144
-
145
- <!-- 错误点 -->
146
- <circle cx="360" cy="60" r="8" fill="#E63946" />
147
- <circle cx="380" cy="150" r="8" fill="#E63946" />
148
- <circle cx="360" cy="240" r="8" fill="#E63946" />
149
-
150
- <text x="230" y="80" fill="#E63946" font-family="Inter" font-size="14" font-weight="900">逻辑 A (脑补)</text>
151
- <text x="230" y="140" fill="#E63946" font-family="Inter" font-size="14" font-weight="900">逻辑 B (随机)</text>
152
- <text x="230" y="220" fill="#E63946" font-family="Inter" font-size="14" font-weight="900">逻辑 C (偏离)</text>
153
- </svg>
154
- <p style="color: #666; font-size: 14px; margin-top: 20px; font-family: 'JetBrains Mono';">HALUCINATION: 概率分布产生的非预期解</p>
155
- </div>
156
- </div>
157
- </div>
158
- </div>
159
-
160
- <!-- SLIDE 3: 标准对齐 -->
161
- <div class="slide-container">
162
- <h2 class="slide-title">“人能看懂” vs “机器可执行”</h2>
163
- <div class="content-area">
164
- <div class="two-column">
165
- <div class="case-box bad">
166
- <span class="label label-bad">传统模糊写法 (❌)</span>
167
- <h3>以“人”为阅读对象</h3>
168
- <p>“只要研发同事能看懂就行。”</p>
169
- <p style="margin-top: 15px; color: #666; font-size: 18px;">前提假设:人类有“业务常识”、能理解“顺理成章”的逻辑、会自动补全异常情况。</p>
170
- </div>
171
- <div class="case-box good">
172
- <span class="label label-good">机器可执行写法 (🟢)</span>
173
- <h3>以“AI”为执行对象</h3>
174
- <p><strong>0 脑补空间。</strong></p>
175
- <p style="margin-top: 15px; color: #666; font-size: 18px;">前提假设:AI 是一个没有常识、只会照本宣科的初级程序员。你没写的逻辑,它绝对不会写。</p>
176
- </div>
177
- </div>
178
- </div>
179
- </div>
180
-
181
- <!-- SLIDE 4: 功能行为案例 -->
182
- <div class="slide-container">
183
- <h2 class="slide-title">【重灾区 1】功能行为:别说“处理一下”</h2>
184
- <div class="content-area">
185
- <div class="two-column">
186
- <div class="case-box bad">
187
- <span class="label label-bad">反面教材</span>
188
- <p>“用户填写完云资源申请表单后,点击‘提交’按钮。系统处理并保存数据,成功后跳转列表页,失败则提示用户。”</p>
189
- <ul class="error-list">
190
- <li><i class="fa-solid fa-bomb"></i> <strong>无防抖:</strong>AI 没写按钮禁用,用户连击生成 5 条重复订单。</li>
191
- <li><i class="fa-solid fa-bomb"></i> <strong>无状态:</strong>响应慢时没 Loading,用户以为网页挂了。</li>
192
- <li><i class="fa-solid fa-bomb"></i> <strong>异常缺失:</strong>接口 500 时直接白屏,没写错误拦截。</li>
193
- </ul>
194
- </div>
195
- <div class="case-box good">
196
- <span class="label label-good">机器可执行</span>
197
- <p><strong>1. 触发:</strong>用户点击 <code>id: btn-submit</code>。<br>
198
- <strong>2. 动作:</strong>按钮即刻 <code>loading=true</code> 且 <code>disabled=true</code>。调用 <code>POST /api/apply</code>。<br>
199
- <strong>3. 成功:</strong>清除草稿,Toast 提示“提交成功”,1.5s 后跳转 <code>/list</code>。<br>
200
- <strong>4. 失败:</strong>按钮恢复可点击,Modal 弹窗拦截并展示 <code>error_message</code>。</p>
201
- </div>
202
- </div>
203
- </div>
204
- </div>
205
-
206
- <!-- SLIDE 5: 数据结构案例 -->
207
- <div class="slide-container">
208
- <h2 class="slide-title">【重灾区 2】数据结构:消灭“等”字</h2>
209
- <div class="content-area">
210
- <div class="two-column">
211
- <div class="case-box bad">
212
- <span class="label label-bad">反面教材</span>
213
- <p>“应用管理列表包含‘状态’字段,主要有:待审批、运行中、已驳回<strong>等</strong>。前端需支持按状态筛选。”</p>
214
- <ul class="error-list">
215
- <li><i class="fa-solid fa-bomb"></i> <strong>AI 瞎猜:</strong>AI 发明了 <code>status: 'waiting'</code>。</li>
216
- <li><i class="fa-solid fa-bomb"></i> <strong>后端崩溃:</strong>数据库存的是 <code>0, 1, 2</code>。</li>
217
- <li><i class="fa-solid fa-bomb"></i> <strong>逻辑断层:</strong>前端传字符串,后端由于类型不匹配返回 400。</li>
218
- </ul>
219
- </div>
220
- <div class="case-box good">
221
- <span class="label label-good">机器可执行</span>
222
- <p><strong>字段定义:</strong><code>appStatus (Number, Enum)</code></p>
223
- <p style="font-size: 16px; margin-top:10px;">
224
- - 0: PENDING(待审批) - 灰色<br>
225
- - 1: RUNNING(运行中) - 绿色<br>
226
- - 2: REJECTED(已驳回) - 红色<br>
227
- - 3: TERMINATED(已终止) - 深灰
228
- </p>
229
- <p style="margin-top:10px; font-weight:700;">注:严禁扩展,必须严格绑定数字枚举。</p>
230
- </div>
231
- </div>
232
- </div>
233
- </div>
234
-
235
- <!-- SLIDE 6: 接口规格案例 -->
236
- <div class="slide-container">
237
- <h2 class="slide-title">【重灾区 3】接口规格:拒绝“看图说话”</h2>
238
- <div class="content-area">
239
- <div class="two-column">
240
- <div class="case-box bad">
241
- <span class="label label-bad">反面教材</span>
242
- <p>“开发者门户 - 获取我的应用列表:前端调用接口,获取当前登录用户的应用。展示:应用 ID、名称、创建时间。参考右侧 UI 稿开发。”</p>
243
- <ul class="error-list">
244
- <li><i class="fa-solid fa-bomb"></i> <strong>命名平行宇宙:</strong>AI 默认生成 <code>appId</code> (驼峰),而后端接口实际返回的是 <code>app_id</code> (下划线),导致页面数据全空。</li>
245
- <li><i class="fa-solid fa-bomb"></i> <strong>时间戳精度陷阱:</strong>后端吐出 10 位秒级戳 (1711936000),AI 默认按 13 位毫秒级解析,页面渲染出“1970-01-01”。</li>
246
- <li><i class="fa-solid fa-bomb"></i> <strong>缺失根路径:</strong>AI 脑补了 <code>/getApps</code> 路径,而真实 API 为 <code>/api/v1/my-apps</code>,联调第一步即报错。</li>
247
- </ul>
248
- </div>
249
- <div class="case-box good">
250
- <span class="label label-good">机器可执行</span>
251
- <p style="font-size: 16px; margin-bottom: 8px;"><strong>API:</strong> <code>GET /api/v1/portal/my-apps</code></p>
252
- <div class="json-block">
253
- {
254
- "code": 0,
255
- "data": [{
256
- "app_id": "string (必填, 唯一标识)",
257
- "app_name": "string (必填, 名称)",
258
- "created_at": 1711936000 // 10位秒级时间戳
259
- }],
260
- "message": "success"
261
- }
262
- </div>
263
- </div>
264
- </div>
265
- </div>
266
- </div>
267
-
268
- <!-- SLIDE 7: 违禁词典 -->
269
- <div class="slide-container" style="background: #EEE;">
270
- <h2 class="slide-title">【红线警示】诱发 AI “放飞自我”的 3 大违禁词</h2>
271
- <div class="content-area">
272
- <div class="dict-grid">
273
- <!-- 禁词 1 -->
274
- <div class="dict-item">
275
- <div class="dict-title">🛑 按需展示</div>
276
- <p style="font-size: 13px;"><strong>错误需求:</strong>“用户点击查看详情,系统按需展示该模块的扩展信息。”</p>
277
- <div class="chaos-zone">
278
- <strong>翻车现场:</strong><br>
279
- AI 找不到“需”的定义。场景 A:直接不写渲染逻辑,页面空白;场景 B:乱写 <code>v-if="Math.random() > 0.5"</code>。
280
- </div>
281
- <div class="refine-zone">
282
- <strong>机器可执行:</strong><br>
283
- “当 <code>ext_info</code> 字段不为空且长度 > 0 时展示;否则隐藏该区块。”
284
- </div>
285
- </div>
286
- <!-- 禁词 2 -->
287
- <div class="dict-item">
288
- <div class="dict-title">🛑 参考竞品</div>
289
- <p style="font-size: 13px;"><strong>错误需求:</strong>“登录页面的交互和安全验证逻辑,参考腾讯云的实现即可。”</p>
290
- <div class="chaos-zone">
291
- <strong>翻车现场:</strong><br>
292
- AI 无法联网。它会凭着训练集里的“记忆”胡编乱造出一个滑动验证码 UI,但完全没有任何后端接口支撑。
293
- </div>
294
- <div class="refine-zone">
295
- <strong>机器可执行:</strong><br>
296
- “账号+密码+图形验证码。验证码由 <code>GET /captcha</code> 获取,点击图片刷新。”
297
- </div>
298
- </div>
299
- <!-- 禁词 3 -->
300
- <div class="dict-item">
301
- <div class="dict-title">🛑 缺失单位</div>
302
- <p style="font-size: 13px;"><strong>错误需求:</strong>“接口返回 <code>amount</code> (金额) 和 <code>time</code> (时间),前端直接展示。”</p>
303
- <div class="chaos-zone">
304
- <strong>翻车现场:</strong><br>
305
- 金额翻车:后端存的是“分”,AI 默认为“元”。1 元的东西显示成 100 元。<br>
306
- 时间翻车:10 位戳被当成 13 位,显示 1970 年。
307
- </div>
308
- <div class="refine-zone">
309
- <strong>机器可执行:</strong><br>
310
- “amount 单位为分,展示需 /100 并保留两位小数;time 为 10 位秒级戳。”
311
- </div>
312
- </div>
313
- </div>
314
- </div>
315
- </div>
316
-
317
- <!-- SLIDE 8: 行动指南 -->
318
- <div class="slide-container">
319
- <h2 class="slide-title">行动指南:三问自查法</h2>
320
- <div class="content-area">
321
- <div style="display: flex; flex-direction: column; gap: 30px;">
322
- <div style="display: flex; gap: 40px; align-items: center;">
323
- <div style="font-size: 80px; font-weight: 900; color: #E63946; min-width: 80px;">01</div>
324
- <div>
325
- <h3>异常路径自查</h3>
326
- <p>“如果接口挂了、超时了、返回数据空了,UI 要展示什么?”</p>
327
- </div>
328
- </div>
329
- <div style="display: flex; gap: 40px; align-items: center;">
330
- <div style="font-size: 80px; font-weight: 900; color: #E63946; min-width: 80px;">02</div>
331
- <div>
332
- <h3>边界闭环自查</h3>
333
- <p>“我用了‘等’这个词吗?所有的枚举值是不是都已经定义死,没有脑补空间了?”</p>
334
- </div>
335
- </div>
336
- <div style="display: flex; gap: 40px; align-items: center;">
337
- <div style="font-size: 80px; font-weight: 900; color: #E63946; min-width: 80px;">03</div>
338
- <div>
339
- <h3>契约对齐自查</h3>
340
- <p>“我给出的字段名和示例数据,是不是和后端实际吐出来的完全一致?”</p>
341
- </div>
342
- </div>
343
- </div>
344
- </div>
345
- </div>
346
-
347
- <!-- SLIDE 9: 结束语 -->
348
- <div class="slide-container" style="background: #1D3557; color: white;">
349
- <div class="content-area" style="justify-content: center; align-items: center; text-align: center;">
350
- <p style="font-size: 40px; font-weight: 900; line-height: 1.5;color:white">
351
- 你对需求的<span class="red-highlight">留下的空白</span>,<br>
352
- AI 会用它的<span class="red-highlight">"想象力"</span>为你填满。
353
- </p>
354
- <p style="margin-top: 40px; font-size: 24px; color: #6AB0FF;">
355
- 写好需求指令,就是写好最顶层的“伪代码”。
356
- </p>
357
- </div>
358
- </div>
359
-
360
- </body>
361
- </html>
@@ -1,224 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="zh-CN">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <title>需求文档完善度审查 Skill</title>
6
- <style>
7
- body {
8
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto;
9
- line-height: 1.6;
10
- padding: 24px;
11
- background: #f7f7f7;
12
- color: #333;
13
- }
14
- h1, h2, h3 {
15
- margin-top: 24px;
16
- }
17
- .card {
18
- background: #fff;
19
- padding: 20px;
20
- border-radius: 10px;
21
- margin-bottom: 20px;
22
- box-shadow: 0 2px 8px rgba(0,0,0,0.05);
23
- }
24
- .step {
25
- border-left: 4px solid #4CAF50;
26
- padding-left: 16px;
27
- margin-top: 20px;
28
- }
29
- .tag {
30
- display: inline-block;
31
- padding: 2px 8px;
32
- border-radius: 6px;
33
- font-size: 12px;
34
- margin-right: 6px;
35
- }
36
- .ok { background: #e8f5e9; color: #2e7d32; }
37
- .warn { background: #fff8e1; color: #f57c00; }
38
- .bad { background: #ffebee; color: #c62828; }
39
-
40
- table {
41
- width: 100%;
42
- border-collapse: collapse;
43
- margin-top: 10px;
44
- }
45
- th, td {
46
- border: 1px solid #ddd;
47
- padding: 8px;
48
- }
49
- th {
50
- background: #fafafa;
51
- text-align: left;
52
- }
53
- code {
54
- background: #eee;
55
- padding: 2px 6px;
56
- border-radius: 4px;
57
- }
58
- pre {
59
- background: #111;
60
- color: #0f0;
61
- padding: 16px;
62
- border-radius: 8px;
63
- overflow-x: auto;
64
- }
65
- </style>
66
- </head>
67
- <body>
68
-
69
- <h1>📋 需求文档完善度审查 Skill</h1>
70
-
71
- <div class="card">
72
- <h2>📌 基本信息</h2>
73
- <p><strong>Name:</strong>requirements-checker</p>
74
- <p><strong>Description:</strong></p>
75
- <p>
76
- 需求文档完善度审查工具,用于评估面向 AI 编码(特别是小参数模型如 Qwen3、DeepSeek)的需求文档是否达到
77
- <strong>“机器可执行”标准</strong>。
78
- </p>
79
- </div>
80
-
81
- <div class="card">
82
- <h2>🎯 定位</h2>
83
- <p>
84
- 本 skill 的目标是:以<strong>小参数 AI 模型(7B-32B)</strong>为执行方,
85
- 评估需求是否达到<strong>无歧义、可直接编码</strong>。
86
- </p>
87
- <p>
88
- 评审视角:假设执行者是一个<strong>不会追问、会脑补的初级 AI</strong>
89
- </p>
90
- </div>
91
-
92
- <div class="card">
93
- <h2>🧭 审查流程</h2>
94
-
95
- <!-- Step 1 -->
96
- <div class="step">
97
- <h3>Step 1:识别文档类型与范围</h3>
98
- <ul>
99
- <li>功能需求文档(PRD / 用户故事)</li>
100
- <li>接口文档(API Spec)</li>
101
- <li>视觉/交互说明</li>
102
- <li>数据模型定义</li>
103
- <li>混合类型</li>
104
- </ul>
105
- </div>
106
-
107
- <!-- Step 2 -->
108
- <div class="step">
109
- <h3>Step 2:逐维度审查打分</h3>
110
-
111
- <h4>A. 功能行为规格</h4>
112
- <table>
113
- <tr><th>检查项</th><th>标准</th></tr>
114
- <tr><td>A1 触发条件</td><td>明确触发事件</td></tr>
115
- <tr><td>A2 执行动作</td><td>明确系统行为</td></tr>
116
- <tr><td>A3 结果状态</td><td>最终 UI/数据状态明确</td></tr>
117
- <tr><td>A4 异常路径</td><td>失败/边界场景说明</td></tr>
118
- <tr><td>A5 状态矩阵</td><td>加载/空/错误等状态完整</td></tr>
119
- <tr><td>A6 交互时序</td><td>是否防抖/节流</td></tr>
120
- <tr><td>A7 持久化说明</td><td>是否存储</td></tr>
121
- </table>
122
-
123
- <h4>B. 数据结构定义</h4>
124
- <table>
125
- <tr><th>检查项</th><th>标准</th></tr>
126
- <tr><td>B1 字段完整性</td><td>字段齐全</td></tr>
127
- <tr><td>B2 类型精确性</td><td>类型明确</td></tr>
128
- <tr><td>B3 枚举值</td><td>列出所有值</td></tr>
129
- <tr><td>B4 单位说明</td><td>时间/金额单位明确</td></tr>
130
- <tr><td>B5 必填/可选</td><td>有说明</td></tr>
131
- <tr><td>B6 长度/范围</td><td>有约束</td></tr>
132
- <tr><td>B7 命名一致</td><td>前后端统一</td></tr>
133
- </table>
134
-
135
- <h4>C. 接口规格</h4>
136
- <table>
137
- <tr><th>检查项</th><th>标准</th></tr>
138
- <tr><td>C1 Request 示例</td><td>完整</td></tr>
139
- <tr><td>C2 Response 示例</td><td>完整</td></tr>
140
- <tr><td>C3 错误码</td><td>列举清楚</td></tr>
141
- <tr><td>C4 鉴权</td><td>说明 token</td></tr>
142
- <tr><td>C5 幂等性</td><td>是否可重试</td></tr>
143
- <tr><td>C6 分页规范</td><td>字段统一</td></tr>
144
- <tr><td>C7 文件上传</td><td>格式大小说明</td></tr>
145
- </table>
146
-
147
- </div>
148
-
149
- <!-- Step 3 -->
150
- <div class="step">
151
- <h3>Step 3:输出审查报告(结构属于 Step 3)</h3>
152
-
153
- <pre>
154
- ## 需求完善度审查报告
155
-
156
- ### 总体评级
157
- [🟢 / 🟡 / 🔴]
158
-
159
- 评级依据:
160
- - 合格项:X
161
- - 需补充:X
162
- - 缺失项:X
163
-
164
- ---
165
-
166
- ### 关键风险点
167
- 1. 问题 → AI 可能行为
168
- 2. ...
169
-
170
- ---
171
-
172
- ### 逐维度详情
173
-
174
- A. 功能行为规格
175
- - ✅ A1
176
- - ⚠️ A5 → 建议
177
- - ❌ A4 → 建议
178
-
179
- ---
180
-
181
- ### 补充模板
182
- [可直接填写的模板]
183
- </pre>
184
-
185
- </div>
186
-
187
- <!-- Step 4 -->
188
- <div class="step">
189
- <h3>Step 4:互动追问</h3>
190
- <ul>
191
- <li>是否有接口文档?</li>
192
- <li>使用什么前端框架?</li>
193
- <li>是否有设计稿?</li>
194
- </ul>
195
- </div>
196
-
197
- </div>
198
-
199
- <div class="card">
200
- <h2>📊 评级标准</h2>
201
- <table>
202
- <tr><th>评级</th><th>条件</th></tr>
203
- <tr><td>🟢</td><td>无缺失,少量警告</td></tr>
204
- <tr><td>🟡</td><td>少量缺失或核心问题</td></tr>
205
- <tr><td>🔴</td><td>缺失较多</td></tr>
206
- </table>
207
- </div>
208
-
209
- <div class="card">
210
- <h2>⚠️ 高风险模式</h2>
211
- <ul>
212
- <li>"按需展示"</li>
213
- <li>"处理一下"</li>
214
- <li>字段无单位</li>
215
- <li>无失败流程</li>
216
- <li>"参考竞品"</li>
217
- <li>枚举用“等”</li>
218
- <li>接口无字段</li>
219
- <li>设计稿无标注</li>
220
- </ul>
221
- </div>
222
-
223
- </body>
224
- </html>
@@ -1,173 +0,0 @@
1
- ---
2
- name: requirements-checker
3
- description: 需求文档完善度审查工具,专门用于评估面向 AI 编码(特别是小参数模型如 Qwen3、DeepSeek 等)的需求文档是否达到"机器可执行"标准。当用户提交需求文档、PRD、功能说明、接口文档、设计稿描述,并希望评估其是否足够清晰、完整,或询问"需求写得够不够"、"AI 能不能按这个开发"、"这份文档有没有歧义"时,必须触发此 skill。即使用户只是粘贴了一段需求描述问"这样行吗",也应触发。
4
- ---
5
-
6
- # 需求文档完善度审查 Skill
7
-
8
- ## 定位
9
-
10
- 本 skill 的目标是:**以小参数 AI 模型(7B-32B,如 Qwen3、DeepSeek-Coder)为执行方**,评估输入的需求文档是否达到"无歧义、可直接编码"的标准。
11
-
12
- 评审视角:**假设执行者是一个能力有限、不会主动追问、遇到歧义会自行脑补的初级 AI**。
13
-
14
- ---
15
-
16
- ## 审查流程
17
-
18
- ### Step 1:识别文档类型与范围
19
-
20
- 首先判断用户提供的是哪类文档:
21
- - 功能需求文档(PRD / 用户故事)
22
- - 接口文档(API Spec)
23
- - 视觉/交互说明
24
- - 数据模型定义
25
- - 以上混合
26
-
27
- 根据类型选择对应的审查维度(见下方)。
28
-
29
- ---
30
-
31
- ### Step 2:逐维度审查打分
32
-
33
- 对每个适用维度评分:**✅ 合格 / ⚠️ 需补充 / ❌ 缺失**
34
-
35
- #### 维度 A:功能行为规格(针对 PRD/功能说明)
36
-
37
- | 检查项 | 标准 |
38
- |--------|------|
39
- | A1 触发条件 | 每个功能都明确了"什么操作/事件触发" |
40
- | A2 执行动作 | 明确了触发后系统做什么(而非模糊的"展示/处理") |
41
- | A3 结果状态 | 明确了操作完成后 UI/数据的最终状态 |
42
- | A4 异常路径 | 失败/边界场景有明确的处理说明 |
43
- | A5 状态矩阵 | 加载中、空数据、错误、权限不足等状态都有描述 |
44
- | A6 交互时序 | 是立即触发还是点击确认?有无防抖/节流要求? |
45
- | A7 持久化说明 | 状态是否需要持久化(URL、LocalStorage、后端)? |
46
-
47
- #### 维度 B:数据结构定义(针对数据模型/接口文档)
48
-
49
- | 检查项 | 标准 |
50
- |--------|------|
51
- | B1 字段完整性 | 所有展示/使用的字段都有定义 |
52
- | B2 类型精确性 | 每个字段有明确类型(string/number/enum/array...) |
53
- | B3 枚举值 | 所有枚举类型列出全部合法值及含义 |
54
- | B4 单位说明 | 金额(分还是元)、时间(时间戳还是字符串格式)等单位明确 |
55
- | B5 必填/可选 | 每个字段是否必填有说明 |
56
- | B6 长度/范围 | 字符串长度限制、数字范围有说明 |
57
- | B7 前后端命名一致 | 前端变量名与接口字段名是否统一定义 |
58
-
59
- #### 维度 C:接口规格(针对 API 文档)
60
-
61
- | 检查项 | 标准 |
62
- |--------|------|
63
- | C1 完整 Request 示例 | 包含 headers、body、query params |
64
- | C2 完整 Response 示例 | 成功响应有完整字段示例 |
65
- | C3 错误码枚举 | 所有错误 code 列出,并说明前端处理方式 |
66
- | C4 鉴权说明 | 哪些接口需要 token?token 放在哪? |
67
- | C5 幂等性 | 哪些接口可以重试?哪些不能? |
68
- | C6 分页规范 | 分页接口的 page/size/total 字段命名统一 |
69
- | C7 文件上传 | 如有文件上传,明确格式、大小限制、接口格式 |
70
-
71
- #### 维度 D:视觉与交互说明(针对设计稿/UI 描述)
72
-
73
- | 检查项 | 标准 |
74
- |--------|------|
75
- | D1 组件边界 | 哪些是独立组件,哪些是页面内嵌内容 |
76
- | D2 响应式断点 | 不同屏幕尺寸下的布局变化有说明 |
77
- | D3 动效说明 | hover/过渡/加载动画有描述(或明确"无动效") |
78
- | D4 间距/字号 | 有具体数值,或明确引用的设计系统(如 Ant Design) |
79
- | D5 空态设计 | 列表为空时展示什么 |
80
- | D6 禁用态 | 按钮/输入框的禁用条件和样式 |
81
-
82
- #### 维度 E:工程约定(全局)
83
-
84
- | 检查项 | 标准 |
85
- |--------|------|
86
- | E1 技术栈 | 前端框架、后端语言、数据库等明确指定 |
87
- | E2 命名规范 | 文件命名、变量命名、组件命名规则有说明 |
88
- | E3 目录结构 | 期望的项目结构有示例或说明 |
89
- | E4 错误处理全局规范 | 统一的 Toast/弹窗/跳转处理方式 |
90
- | E5 鉴权全局规范 | token 存储位置、过期处理、路由守卫 |
91
-
92
- ---
93
-
94
- ### Step 3:输出审查报告
95
-
96
- 按以下结构输出报告:
97
-
98
- ```
99
- ## 需求完善度审查报告
100
-
101
- ### 总体评级
102
- [🟢 可以开始开发 / 🟡 需补充后开发 / 🔴 缺失过多,需重写]
103
-
104
- 评级依据:
105
- - 合格项:X 项
106
- - 需补充:X 项
107
- - 缺失项:X 项
108
-
109
- ---
110
-
111
- ### 关键风险点(优先解决)
112
- > 列出 ❌ 缺失 + 最严重的 ⚠️ 问题,按影响程度排序
113
-
114
- 1. [问题描述] → [如不补充,AI 可能会...]
115
- 2. ...
116
-
117
- ---
118
-
119
- ### 逐维度详情
120
-
121
- **A. 功能行为规格**
122
- - ✅ A1 触发条件:已明确
123
- - ⚠️ A5 状态矩阵:未描述加载中和空数据状态
124
- → 补充建议:[具体应该写什么]
125
- - ❌ A4 异常路径:完全缺失
126
- → 补充建议:[具体应该写什么]
127
-
128
- (其他维度同上格式)
129
-
130
- ---
131
-
132
- ### 补充模板
133
-
134
- 针对缺失项,提供可直接填写的模板片段:
135
-
136
- [输出对应的文档片段模板,用户填入具体内容即可]
137
- ```
138
-
139
- ---
140
-
141
- ### Step 4:互动追问(可选)
142
-
143
- 如果用户的文档描述某个模块,但信息太少无法完整审查,主动询问:
144
- - "这个模块有对应的接口文档吗?"
145
- - "用的是哪个前端框架?"
146
- - "有设计稿还是只有文字描述?"
147
-
148
- 不要假设,不要跳过,直接问。
149
-
150
- ---
151
-
152
- ## 评级标准
153
-
154
- | 评级 | 条件 |
155
- |------|------|
156
- | 🟢 可以开始开发 | 无 ❌ 缺失项,⚠️ 项少于 3 个且不涉及核心流程 |
157
- | 🟡 需补充后开发 | 存在 1-3 个 ❌ 缺失项,或核心流程有 ⚠️ 问题 |
158
- | 🔴 缺失过多,需重写 | 超过 3 个 ❌ 缺失项,或维度 A/B/C 有重大空白 |
159
-
160
- ---
161
-
162
- ## 常见高风险模式(自动标记)
163
-
164
- 审查时特别注意这些模式,发现即标红:
165
-
166
- 1. **"按需展示"** → 没有明确展示条件
167
- 2. **"处理一下"** → 动作不明确
168
- 3. **"状态/金额/时间"字段没有单位** → 前后端会对不上
169
- 4. **只有成功流程,没有失败流程** → AI 会忽略错误处理
170
- 5. **"参考竞品"** → AI 不知道竞品长什么样
171
- 6. **枚举值用"等"结尾** → AI 会自己发明值
172
- 7. **接口文档只有路径,没有字段说明** → AI 会猜字段名
173
- 8. **设计稿只有图片,没有任何标注** → 间距/字体会被随机发明