@hawk2048/oh-my-dsh 0.2.1 → 0.3.3

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.
Files changed (49) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/LICENSE +21 -21
  3. package/README.md +246 -235
  4. package/README.zh.md +246 -235
  5. package/agent.cordis.yml +288 -0
  6. package/commands/omd-commands.mjs +150 -141
  7. package/cordis.patch.yml +20 -20
  8. package/index.js +8 -8
  9. package/install.ps1 +92 -0
  10. package/install.sh +81 -0
  11. package/package.json +46 -36
  12. package/preset.yml +2 -0
  13. package/skills/omd-ai-slop-cleaner/SKILL.md +43 -43
  14. package/skills/omd-autopilot/SKILL.md +51 -51
  15. package/skills/omd-autoresearch/CHANGELOG.md +46 -0
  16. package/skills/omd-autoresearch/SKILL.md +117 -24
  17. package/skills/omd-autoresearch/references/eval-prompt.md +79 -0
  18. package/skills/omd-autoresearch/references/report-rules.md +121 -0
  19. package/skills/omd-autoresearch/references/report-style.md +228 -0
  20. package/skills/omd-autoresearch/references/report_lint.py +466 -0
  21. package/skills/omd-autoresearch/references/rubric.md +89 -0
  22. package/skills/omd-autoresearch/references/skill-survey.md +158 -0
  23. package/skills/omd-cancel/SKILL.md +36 -36
  24. package/skills/omd-debug/SKILL.md +35 -35
  25. package/skills/omd-deep-analyze/SKILL.md +36 -36
  26. package/skills/omd-deep-interview/SKILL.md +68 -68
  27. package/skills/omd-deepsearch/SKILL.md +36 -36
  28. package/skills/omd-doctor/SKILL.md +39 -39
  29. package/skills/omd-execute/SKILL.md +41 -41
  30. package/skills/omd-external-context/SKILL.md +36 -36
  31. package/skills/omd-help/SKILL.md +35 -35
  32. package/skills/omd-hud/SKILL.md +80 -79
  33. package/skills/omd-minimal-code-discipline/SKILL.md +36 -36
  34. package/skills/omd-plan/SKILL.md +51 -51
  35. package/skills/omd-pyramid/SKILL.md +121 -0
  36. package/skills/omd-ralph/SKILL.md +62 -62
  37. package/skills/omd-ralplan/SKILL.md +45 -45
  38. package/skills/omd-release/SKILL.md +36 -36
  39. package/skills/omd-remember/SKILL.md +35 -35
  40. package/skills/omd-research/SKILL.md +40 -38
  41. package/skills/omd-review/SKILL.md +47 -45
  42. package/skills/omd-skillify/SKILL.md +36 -36
  43. package/skills/omd-tdd/SKILL.md +37 -37
  44. package/skills/omd-team/SKILL.md +96 -96
  45. package/skills/omd-ultragoal/SKILL.md +46 -46
  46. package/skills/omd-ultrathink/SKILL.md +39 -39
  47. package/skills/omd-verify/SKILL.md +44 -44
  48. package/skills/omd-visual-verdict/SKILL.md +36 -36
  49. package/skills/omd-wiki/SKILL.md +36 -36
@@ -1,45 +1,138 @@
1
1
  ---
2
2
  name: omd-autoresearch
3
- description: "自动调研改进:有界的评估器驱动改进循环——产出一版,评估子代理对照目标标准打分,再改进、再评,直到达标或到达轮次上限。触发词:autoresearch / 自动调研改进 / 边做边评 / 持续打磨到达标。"
3
+ description: "自动调研改进:有界的评估器驱动改进循环——先定额度、分节落笔、一节一闸、独立打分、定点改到达标。产出调研报告/行业研究/方案对比时用它,也用于修掉报告「太长、太干、AI 腔」。触发词:autoresearch / 自动调研改进 / 边做边评 / 持续打磨到达标 / 写报告 / 报告太长 / 太干 / 报告有AI腔 / 边写边改。"
4
4
  ---
5
5
 
6
- # oh-my-dsh · Autoresearch 评估器驱动的改进循环
6
+ # oh-my-dsh · Autoresearch 评估器驱动的有界改进循环
7
7
 
8
- 不是单趟调研,而是**「产出 → 评估打分 → 按差距改进 → 再评估」的有界循环**,直到达标或达到轮次上限。对应 OMC 的 `autoresearch`。
8
+ 一句话:**先定额度,分节落笔,一节一闸,独立打分,定点改到达标。**
9
+
10
+ 跑起来:`create_goal` 立标准 → 证据表 → 逐节写(每节四闸)→ 独立评估 → 定点改 → 达标或到上限停。
9
11
 
10
12
  ## 何时用
11
13
 
12
- - 产出物有明确的"达标标准",但第一版通常不够好,需要迭代打磨(调研报告、设计文档、方案对比)。
13
- - 用户说"autoresearch""自动调研改进""边做边评""持续打磨""做到达标为止"。
14
+ - 产出物有明确达标线,第一版通常不够好:调研报告、行业/竞品研究、方案对比、设计文档。
15
+ - 用户抱怨报告「太长」「太干」「像 AI 写的」「通篇对偶句式」——直接用本技能的写作检查,别等写完再润色。
16
+ - 用户说「autoresearch」「自动调研改进」「边做边评」「做到达标为止」。
14
17
 
15
- ## 有界循环
18
+ ## 旧版(v1)的三个洞
16
19
 
17
- ```
18
- create_goal(达标目标) → 产出当前版 → 评估子代理打分/找差距 → 按差距改进 → 再评估 → 达标或达上限即停
19
- ```
20
+ | 洞 | 后果 | 本版补法 |
21
+ |---|---|---|
22
+ | 达标标准是自然语言 | 评分不可复现,两轮分数没法比 | 固定 rubric:5 维 + 硬伤清单(`references/rubric.md`) |
23
+ | 只在「产出当前版」之后评估 | 第一版是废话最多的一版,白烧一轮 | 闸门前移到每一节(第 3 步) |
24
+ | 没有篇幅预算 | 写多少算多少,「太长」无解 | 写前定额度(第 0 步) |
25
+
26
+ ## 第 0 步 · 先定额度(别跳)
27
+
28
+ 字数上限先定死,再动笔。超了砍,不靠「写得紧凑一点」。
29
+
30
+ | 档位 | 总字数 | 小节 | 每节字数 | 每节图表 | 独立来源下限 | 适用 |
31
+ |---|---|---|---|---|---|---|
32
+ | brief | 600–1500 | 3–5 | 200–300 | 0–1 | 3 | 一页纸结论、决策备忘 |
33
+ | standard | 2000–5600 | 5–8 | 400–700 | ≥1 | 6 | 常规行业/竞品/技术调研 |
34
+ | comprehensive | 6400–14400 | 8–12 | 800–1200 | 1–2 | 12 | 决策级深度报告 |
35
+
36
+ 总字数 = 小节数 × 每节字数,区间相乘,别单方面调其中一列。超了砍节或砍字,不靠「写得紧凑一点」。
37
+
38
+ 读者没要求深度时,默认 brief 或 standard。写 15 页没人看的报告,是这行最常见的浪费。
39
+
40
+ ## 第 1 步 · 立标准(rubric 落盘)
41
+
42
+ 1. `create_goal`,objective 写成可验收,例:*8 节 ≤6000 字、每节 ≥1 表、≥12 个独立来源、lint 全绿、独立评估 ≥85 分*。
43
+ 2. 把 `references/rubric.md` 和 `references/report_lint.py` **复制到工作区**(脚本不复制,后面所有闸门命令都跑不起来;用技能目录全路径也行)。
44
+ 3. 判据分两类:**机器判**(字数、图表数、来源数、章节完整性、`report_lint.py` 的数字)与 **人判**(结论有没有洞察、机制是否成立、反证是否诚实)。机器判优先,人判只留 2–3 维。
45
+
46
+ ## 第 2 步 · 证据表先于正文
47
+
48
+ - 先建 `evidence.md`,一行一条:`编号 | 事实或数字 | 来源URL | 来源级别 | 日期 | 置信度`。
49
+ - 来源分四级,能用的只有前三级:**A** 一手(官方披露、原始数据、公告原文、专利、财报);**B** 权威二手(券商研报、咨询报告、权威媒体调查);**C** 弱线索(转载、榜单、未标口径的市占率、自媒体);**D** 不可用(聚合页、洗稿、AI 生成内容),只能用来找线索。
50
+ - C 级不得单独支撑关键结论;同源转载只算一个来源;超过 180 天的数据按「历史参考」处理。
51
+ - 正文每个数字回指证据编号。回指不上的论断,删掉,或降级成「有说法称……(待核实)」。
52
+ - 先写正文再补证据,一定会出现「这句很顺,但我不确定那个数字的口径」,然后这句就被留下了。
53
+
54
+ ## 第 3 步 · 分节写,一节一闸(生成期优化就在这里)
20
55
 
21
- 1. **定达标标准**:`create_goal` 写一个可验收的 objective("有 3 个以上来源、覆盖性能与安全两个维度、无未决存疑项的报告"优于"好好调研一下")。
22
- 2. **产出当前版**:先出一版(可并行 `subagent` 分工)。
23
- 3. **评估**:派评估子代理**独立**对照达标标准打分,返回「差距清单」(哪里不达标、差在哪、怎么改),只允许"达标 / 具体差距",不允许"差不多"。
24
- 4. **改进**:按差距清单修,回到第 3 步。
25
- 5. **有界退出**:达标 → `update_goal complete`;达到轮次上限仍未达标 → 显式报告剩余差距,别装作完成。
56
+ 先出骨架:一句结论 + 3–8 个小节标题(判断句,不写「背景」「分析」这种标签)+ 每节字数预算。
57
+ 然后逐节循环:**写第 N 节 → 过四闸 → 过了再写 N+1**。
26
58
 
27
- ## 状态与可恢复
59
+ | 闸 | 通过条件 | 不过怎么改 |
60
+ |---|---|---|
61
+ | 事实闸 | 每个硬结论挂证据编号,置信度标了 | 补来源;补不到就降级并标「待核实」;再不行删句 |
62
+ | 结构闸 | 本节首句是判断句;标题是判断句;一节只讲一个主张 | 标签改判断句;首句换成结论;一个主张拆成两节 |
63
+ | 语言闸 | `python report_lint.py 节.md --scale 0.6 --strict --quiet` 返回 PASS,且本节逐句自问「这句话删掉,读者判断会变吗」,不变就删 | 按输出的 fix 就地改,重跑直到 PASS |
64
+ | 篇幅闸 | 本节字数在预算 ±10% 内 | 砍铺垫、砍复述、砍「本节小结」 |
28
65
 
29
- - 用 goal 工具承载循环状态,跨轮持续。
30
- - 每轮把「当前版 + 评估结论」写进工作区文件(如 `AUTORESEARCH.md`),保证会话恢复后能接着改。
66
+ `--strict` 让数字密度和图表密度也参与判死:没有数字、没有表格的段落就是「太干」的直接来源,节级就要拦下来,别等整篇评估。图表密度只对 ≥400 字的节生效,200 字的短节不强制塞表。
31
67
 
32
- ## 与其它模式的关系
68
+ **降级规则**:同一节改 2 次仍过不了语言闸 → 保留结论 + 1 条证据,其余删掉,标 `[待补]`。宁可短,别灌水。
33
69
 
34
- - `research` = 单趟查证;`autoresearch` = research + 评估循环,目标是"持续改进到达标"。
35
- - 评估是**独立评估**,别让产出代理自我打分。
70
+ **每节落盘**:写完一节立刻追加进 `REPORT.md`,并在 `AUTORESEARCH.md` 记一行(节号 / 字数 / lint 结果)。断在第 4 节可以接着写第 5 节,不用从头。
71
+
72
+ **为什么要在生成期做**:整篇返工只有两种结局,全篇重写(把已经过闸的部分重新弄坏)或局部打补丁(前后语感断裂)。节级闸门把返工拆成能承受的小步,下一节直接继承上一节的语感。
73
+
74
+ ## 第 4 步 · 独立评估(不许自评)
75
+
76
+ - 派评估子代理,输入只有三样:**文档 + rubric + 用户诉求**。不给你的推理过程,不给「我觉得哪里不好」。
77
+ - 派发用的 prompt 模板在 `references/eval-prompt.md`,复制后改路径即可。
78
+ - 输出固定格式:各维度得分 + 证据(引原文)+ 差距清单。
79
+ - 差距清单每条五列:**位置 / 现状 / 目标 / 改法 / 严重度**。缺一列视为不合格评估,退回重评。
80
+ - 能机器判的先跑 `report_lint.py` 和字数统计,把数字交给评估者,压低主观漂移。
81
+ - 评估不许写「还行」「建议再丰富一点」。写不出差距项,就是没评估。
82
+
83
+ ## 第 5 步 · 定点改,不重写
84
+
85
+ - 只改差距项,改动范围以「节」为单位,不动已过闸的节。
86
+ - 改完重跑 lint,再用同一份 rubric、同一达标线重评。
87
+ - 每轮把「当前版 + 分数 + 差距」写进 `AUTORESEARCH.md`,会话断了能接着改。
88
+
89
+ ## 有界退出
90
+
91
+ - 默认上限 **3 轮**,用户指定则从用户。
92
+ - 达标(总分 ≥ 线 且 无硬伤)→ 交付 + HUD。
93
+ - 到上限未达标 → 交付当前最好版本 + 剩余差距清单,明说没达标,不装完成。
94
+ - 停滞(连续两轮同一维度不涨)→ 早停,报「这个维度靠改文字解决不了,需要补证据或换角度」。
95
+
96
+ ## 报告硬规则(交付前逐条过)
97
+
98
+ 1. 每个百分比带 N 和来源。删掉形容词代替数据:「显著提升」→「提升 34%(n=210,A 级)」。
99
+ 2. 趋势不写成因果,除非做了识别;否则写「与……同时发生」。
100
+ 3. 反证必须写:列替代解释 → 各自怎么排除 → 没排除掉的 → 结论降级。找不到反证数据就说找不到,不编风险。
101
+ 4. 局限单独成节,不塞进结论最后一句。
102
+ 5. 不写工作日志、不写「我是怎么做的」、不写自我更正过程。方法论该写,过程记录不写。
103
+ 6. 附录不超过正文 10%。附录是来源表,一条来源一行,不印数据表。
104
+ 7. 语言细则见 `references/report-style.md`;它的机器版是 `references/report_lint.py`,整篇收尾用 `python report_lint.py REPORT.md --strict`,不过不交。
105
+ 8. 交付前问一句:这份报告我敢不敢直接发给那个最挑的人?不敢的话,问题通常在第 3 条(没有反证)或第 1 条(没有数字)。
106
+ 9. 语域:给读者看的正文用日常词;行业术语首次出现加一句白话;工具内部词(`报警项`、`判死`、`落盘`)不出现。判据:读者没装这个工具,也读得懂吗。
107
+
108
+ ## 与其它技能的关系
109
+
110
+ - `omd-research` 单趟查证;本技能是多轮 + 闸门 + 达标线。
111
+ - `omd-pyramid` 管结构(结论先行、MECE);`references/report-style.md` 管字面;`report_lint.py` 管机械下限。
112
+ - `omd-ai-slop-cleaner` 是事后清理;本技能把清理放进写作过程,一节一清。
113
+ - 外部报告类技能(huashu-report、industry-research、deep-research-plus 等)的机制吸收记录在 `references/skill-survey.md`。
36
114
 
37
115
  ## 收尾:HUD
38
116
 
39
- 用 `omd-hud` 输出:轮次 + 评分趋势 + 差距清单(未达标项)。让"离达标还差什么"始终可见。
117
+ ```dsh-ui
118
+ {"title":"Autoresearch · 报告改进","gap":14,"items":[
119
+ {"type":"row","wrap":true,"items":[
120
+ {"type":"stat","label":"轮次","value":"2 / 3"},
121
+ {"type":"stat","label":"评分","value":"88","delta":"+9"},
122
+ {"type":"stat","label":"未达标项","value":"1"}
123
+ ]},
124
+ {"type":"progress","label":"到达标线","value":88},
125
+ {"type":"table","columns":["维度","上一轮","本轮","差距"],
126
+ "rows":[["语言","62","84","对偶句仍有 3 处"],["结构","80","88","—"]]},
127
+ {"type":"callout","tone":"warn","title":"剩余差距","content":"第 3 节仍缺反证段,补完再评一轮"}
128
+ ]}
129
+ ```
40
130
 
41
131
  ## 反模式
42
132
 
43
- - 别无界循环——必须有轮次上限 + 明确的达标退出条件。
44
- - 别把"评估分数"当最终结论——评估也是证据之一,最后仍要独立核验。
45
- - 别把评估做模糊("还行")——要具体到差距项。
133
+ - 没有轮次上限、没有达标线——v1 的通病,等于没有循环。
134
+ - 让产出者自己打分,或让评估者拿到产出者的自我评价。
135
+ - 评估写成「还行」「可以更丰富」——必须落到差距项。
136
+ - 先写正文再补证据。
137
+ - 用形容词和总结句凑篇幅——这是「太长太干」的直接来源。
138
+ - 在报告正文里表演自我更正(`前面说的有误` / `纠正一下`)——删掉,直接写正确版本。
@@ -0,0 +1,79 @@
1
+ # 评估子代理 prompt 模板(直接复制)
2
+
3
+ 评估必须由**另一个 agent** 做。产出者自己判卷,循环就失效了。
4
+
5
+ ---
6
+
7
+ ## 派发前准备(产出者做,3 件事)
8
+
9
+ 1. 把 `rubric.md` 填好:权重、达标线、本轮的特别关注项(例如「本轮重点看第 3 节」)。
10
+ 2. 准备好三份输入:文档全文路径、填好的 rubric、用户原始诉求(原话)。
11
+ 3. 跑一遍机器闸门,把数字准备好:`python report_lint.py REPORT.md --json`,与字数统计。
12
+
13
+ **不要**把自己的推理过程、自评、「我哪里没写好」交给评估者。
14
+
15
+ ---
16
+
17
+ ## 可复制的 prompt
18
+
19
+ ```
20
+ 你是独立评估者。你评估一份报告,按给定 rubric 打分并给出差距清单。
21
+ 你没有看过产出者的推理与自评,也不需要问。
22
+
23
+ 输入:
24
+ 1. 被评文档:<绝对路径>
25
+ 2. rubric:<绝对路径>
26
+ 3. 用户原始诉求(原话):<粘贴>
27
+ 4. 机器闸门结果(产出者跑的,供参考,不代替你的判断):
28
+ <粘贴 report_lint.py --json 的 metrics 与 fails/warns>
29
+
30
+ 要做:
31
+ 1. 读完整文档(不要只读开头)。
32
+ 2. 按 rubric 的 D1–D5 逐维度打分,每维度必须引 1–3 段原文作为依据。
33
+ 不许写「还行」「可以更丰富」,写不出依据就是没读。
34
+ 3. 检查硬伤 H1–H4 是否命中。
35
+ 4. 输出差距清单,每条五列:位置 | 现状 | 目标 | 改法 | 严重度。
36
+ 位置要能定位到节/段/句;严重度只有 高/中/低。
37
+ 至少 3 条,最多 12 条;挑能改的,不要凑数。
38
+
39
+ 输出格式(严格):
40
+ 总分:XX/100 达标:是/否
41
+ 硬伤:H1 命中/未命中 ……
42
+
43
+ ## D1 来源与事实 (x/25)
44
+ 依据:<引原文>
45
+ 扣分:<具体>
46
+
47
+ ## D2 洞察与机制 (x/25)
48
+ ……
49
+
50
+ ## D3 语言与可读性 (x/20)
51
+ ……
52
+
53
+ ## D4 结构 (x/15)
54
+ ……
55
+
56
+ ## D5 篇幅与呈现 (x/15)
57
+ ……
58
+
59
+ ## 差距清单
60
+ | # | 位置 | 现状 | 目标 | 改法 | 严重度 |
61
+
62
+ ## 一句话裁决
63
+ 能交付 / 还需改,以及最该改的那一条。
64
+ ```
65
+
66
+ ---
67
+
68
+ ## 拿到结果后(产出者做)
69
+
70
+ 1. 逐条判断差距是否成立。不成立的(误判)要在 `AUTORESEARCH.md` 里写清理由,**不许默默忽略**。
71
+ 2. 定点改:以「节」为单位,不动已过闸的部分。
72
+ 3. 改完重跑 `report_lint.py`,再用同一 rubric 重评。
73
+ 4. 记录:轮次 / 总分 / 各维度 / 差距条数 / 本轮改了什么。
74
+
75
+ ## 三条防止评估失效的规矩
76
+
77
+ - 评估者不能是产出者,也不能是产出者的子代理。
78
+ - 评分锚点要先看(95+/85–94/70–84/<70),别凭感觉给分。
79
+ - 若两轮总分不涨但差距条数在减少,说明在真改;若总分涨而差距条数不减,大概率是评分放宽了。
@@ -0,0 +1,121 @@
1
+ # 报告证据与结构规范
2
+
3
+ `report-style.md` 管怎么说,本文档管**说了算不算数**。
4
+
5
+ ---
6
+
7
+ ## 一、证据表(正文之前必须存在)
8
+
9
+ `evidence.md`,一行一条:
10
+
11
+ ```
12
+ S07 | 美国户储 2025 新增装机 12.4GWh,同比 +34% | bnef.com/xxx | A | 2026-01-15 | 高
13
+ S08 | 加州 NEM 3.0 余电收购价降至批发电价 | cpuc.ca.gov/xxx | A | 2023-11-02 | 高
14
+ S09 | 某券商测算美国户储 2026 增速 28% | 券商研报 | B | 2026-02-01 | 中
15
+ ```
16
+
17
+ 字段:编号 / 事实或数字 / 来源 / 级别 / 日期 / 置信度。
18
+
19
+ 正文每个数字回指编号(`[S07]`)。回指不上的论断只有两条路:删掉,或降级成「有报道称……(待核实)」。
20
+
21
+ 先写正文再补证据,一定会出现「这句很顺,但我不确定那个数字的口径」,然后这句就被留下了。
22
+
23
+ ---
24
+
25
+ ## 二、来源分级
26
+
27
+ | 级别 | 定义 | 能不能单独支撑关键结论 |
28
+ |---|---|---|
29
+ | **A** | 一手:官方披露、公告、财报、法律文本、原始数据库、代码/规范、可验证的经营痕迹 | 能 |
30
+ | **B** | 权威二手:署名研报、咨询报告、权威媒体原创调查、专家署名分析 | 能,但需说明分析方 |
31
+ | **C** | 弱线索:转载、榜单、未标口径的市占率/GMV/门店数、自媒体、社区讨论 | 不能;只能证明「有人这样说过」 |
32
+ | **D** | 不可用:聚合页、SEO 内容、无署名洗稿、AI 生成内容 | 只能用来找线索 |
33
+
34
+ 三条硬规矩:
35
+
36
+ 1. **去重**:多篇转载同一原始报道,算一个来源。
37
+ 2. **家族去重**:同一来源体系的多条信号只算一个独立来源(官网 + 官方公众号 + 官方 App 算一家)。
38
+ 3. **时效**:超过 180 天的数据按历史参考,不单独支撑「当前状态」判断;必须用时标时滞。
39
+
40
+ ---
41
+
42
+ ## 三、主张-证据矩阵
43
+
44
+ 把关键结论拆成可核查主张,每条两边对齐:主张 → 证据编号。
45
+
46
+ | 缺口类型 | 标注写法 |
47
+ |---|---|
48
+ | 只有一个来源 | `单一来源` |
49
+ | 来源存在但未交叉 | `未充分交叉验证` |
50
+ | 两个来源打架 | `来源冲突:A 说 X(S03),B 说 Y(S05)` |
51
+ | 找不到一手 | `截至访问日未找到一手来源` |
52
+
53
+ **承重引用要开页核对**:TL;DR 里 3–4 条决策级结论,逐条打开来源页确认「内容确实支撑这句话」,不能只看链接能打开。行业里最常见的引用错误在「链接有效但内容不支撑」这一档,链接失效反倒少见。
54
+
55
+ **决策级结论由 C 级来源单独支撑** → 直接降级,或删。带脚注的谣言仍然是谣言。
56
+
57
+ ---
58
+
59
+ ## 四、反证(这是报告与资料汇编的分界线)
60
+
61
+ 写完结论,专门写一段「它可能错在哪」:
62
+
63
+ 1. 列出所有可能的替代解释(还有哪些原因能解释这个现象)。
64
+ 2. 说明各自怎么排除的(控制了什么变量、交叉了哪个数据)。
65
+ 3. **诚实说出没排除掉的。**
66
+ 4. 主动降级结论(「这是早期描述性指标,不是因果估计」)。
67
+
68
+ 第 3、4 步最容易跳过,也最值钱:你主动认领局限,读的人才不用替你找。
69
+
70
+ **找不到反证数据时怎么写**:
71
+
72
+ > 我们尝试查找 X 方面的反证(关键词……,来源范围……),未找到可用数据。因此这条结论的置信度下调为中等,需后续验证。
73
+
74
+ 不许为了凑反方而编造风险,也不许把「数据缺失」写成「已被证伪」。
75
+
76
+ ---
77
+
78
+ ## 五、结构骨架(标准六章,缺章即不合格)
79
+
80
+ 1. **核心结论**(TL;DR):3–5 条,每条一句,带数字。
81
+ 2. **对比总表**:一张能独立读懂的表,标「数据截点」。
82
+ 3. **逐项详析**:一节一个主张,首句是判断句。
83
+ 4. **冲突与存疑**:来源打架的地方,给最可能解释 + 下一步验证动作。
84
+ 5. **未覆盖与限制**:没查的、查不到的、口径不一致的。
85
+ 6. **来源清单**:S 编号 + 标题 + 发布方 + 日期 + URL。
86
+
87
+ brief 档可合并 3 与 4;comprehensive 档把 3 拆成多章。缺第 1、4、5、6 章一律不算完成。
88
+
89
+ ---
90
+
91
+ ## 六、篇幅与图表
92
+
93
+ **权威表在 `SKILL.md` 第 0 步**(brief 600–1500 / standard 2000–5600 / comprehensive 6400–14400,总字数 = 小节数 × 每节字数)。两份文件出现分歧时以 SKILL.md 为准。
94
+
95
+ - 附录 ≤ 正文 10%,附录是来源表,一条来源一行,不印数据表。
96
+ - 图表标题写结论,不写主题:`按职能划分的招聘计划` ✗ → `研发与销售扩张,客服与 G&A 收缩` ✓(研报型例外,查数的人要中性索引)。
97
+ - 图表下必须有数据源行:`来源:BNEF 2026.1 | 制图:本文`,区分谁采的数、谁做的图。
98
+ - 百分比一律带分母:`7%(951 家企业,Bain 2026)`。
99
+ - 单段 ≤7 行(约 300 字),超了拆段。
100
+
101
+ ---
102
+
103
+ ## 七、结论要分层
104
+
105
+ - **我们发现**:跟着数据走,可复核。
106
+ - **我们认为**:跟着判断走,标出这是我的判断。
107
+
108
+ 两样混在一起写,整段可信度按最弱的那句算。
109
+
110
+ ---
111
+
112
+ ## 八、交付前自检清单
113
+
114
+ - [ ] 每个硬结论都有 S 编号;每个百分比都有分母和来源。
115
+ - [ ] 有一条讲「没排除掉的替代解释」。
116
+ - [ ] 冲突写进「冲突与存疑」,没拿「综合判断」蒙过去。
117
+ - [ ] 局限单独成节。
118
+ - [ ] 附录 ≤10%,是来源表不是数据表。
119
+ - [ ] 六章齐全(或按档位合并后齐全)。
120
+ - [ ] `report_lint.py --strict` PASS。
121
+ - [ ] 逐句自问过一遍:删掉这句,读者对结论的判断会变吗?不变就删。
@@ -0,0 +1,228 @@
1
+ # 报告语言规范(去 AI 腔)
2
+
3
+ 写作时逐节套用。`report_lint.py` 是本文档的机器版,负责查下限;本文档负责解释为什么改、怎么改。
4
+
5
+ 一句话原则:**每句话都要带来读者还不知道的东西。** 带不来的句子删掉,删掉读起来更顺。
6
+
7
+ ---
8
+
9
+ ## 分级处置(关键:别把线索当判决)
10
+
11
+ | 级别 | 判定 | 处置 |
12
+ |---|---|---|
13
+ | **T1 结构性** | 单次命中就改 | 对偶拔高句、自我更正、生造黑话、客服腔、无源引用 |
14
+ | **T2 密度型** | 同段 2 处以上,或整篇密度超阈值才改 | 抒情词、程度副词、破折号、加粗 |
15
+ | **T3 线索型** | 只报警,交人判断 | 连词密度、名词化、借喻场混用 |
16
+
17
+ 理由:未经本地语料标定的阈值会误杀。词表是线索,不是判决。
18
+
19
+ ---
20
+
21
+ ## T1-1 对偶拔高句(中文 AI 味最强信号)
22
+
23
+ ```
24
+ ✗ 这不是一次技术升级,而是生产关系的重构。
25
+ ✗ 真正的瓶颈不是产能,而是渠道。
26
+ ✗ 这不仅仅是补贴退坡,更是需求端的系统性收缩。
27
+ ✗ 与其说是产品问题,不如说是组织问题。
28
+ ```
29
+
30
+ 它先立一个读者根本没有的误解,再推翻,制造假顿悟;删掉前半句,信息一点不少。
31
+
32
+ 改法:**留后半句。**
33
+
34
+ ```
35
+ ✓ 这是生产关系的重构。
36
+ ✓ 瓶颈在渠道。
37
+ ```
38
+
39
+ 两处例外保留:术语定义一处、论证骨架一处(全篇额度 2 处)。超过就逐条改。
40
+
41
+ **密度判死线**:<300 字允许 1 处;300–1000 字允许 2 处;≥1000 字按每 300 字 1 处计。超过即判死。
42
+
43
+ ## T1-2 自我更正元叙述
44
+
45
+ ```
46
+ ✗ 前面提到的数据有误,正确口径是 18GWh。
47
+ ✗ 纠正一下,欧洲其实没有退坡。
48
+ ```
49
+
50
+ 报告是交付物。写作过程中的自我纠错属于草稿痕迹,写进正文会让读者怀疑整篇可信度,也浪费他的注意力。
51
+
52
+ 改法:**直接给正确版本,不留痕迹。**
53
+
54
+ ```
55
+ ✓ 2025 年全球户储新增装机 18GWh(BNEF 2026.1)。
56
+ ```
57
+
58
+ 需要留档时,单开「修订记录」小节列日期与变更,正文保持干净。
59
+
60
+ ## T1-3 生造黑话
61
+
62
+ ```
63
+ ✗ 这一点必须钉死,否则后面全站不住。
64
+ ✗ 把三家的口径拉齐。
65
+ ```
66
+
67
+ | 黑话 | 人话 |
68
+ |---|---|
69
+ | `钉死` / `焊死` / `锁死` | 确定下来、锁定 |
70
+ | `拉齐` / `对齐` | 统一成同一口径 |
71
+ | `颗粒度` | 细致程度 |
72
+ | `闭环` | 有反馈的完整流程 |
73
+ | `抓手` | 着手点、突破口 |
74
+ | `赋能` | 帮助、提供能力 |
75
+ | `沉淀` | 积累下来、整理成文档 |
76
+ | `兜底` / `压实` / `收口` | 保底 / 落实 / 结束 |
77
+ | `小疤` / `打穿` / `啃下` | 小问题 / 彻底解决 / 拿下 |
78
+ | `裸写` / `裸奔` / `缝补` | 不用辅助直接写 / 没有防护 / 打补丁 |
79
+ | `水位` / `势能` / `心智` / `体感` / `链路` | 水平 / 优势 / 认知 / 感受 / 流程 |
80
+
81
+ 判据:**这句话你会对着客户或领导说出口吗?** 不会,就换掉。
82
+
83
+ ### 语域:三类词别混用
84
+
85
+ 同一个意思,三种说法,用错层次就露馅:
86
+
87
+ | 层次 | 例子 | 用在哪 |
88
+ |---|---|---|
89
+ | 日常词 | 有问题、不确定、存成文件、验证通过 | 正文默认用这一层 |
90
+ | 行业术语 | NEM 3.0、ITC、LCOE | 正文可用,首次出现加一句白话解释 |
91
+ | 工具内部词 | 报警项、判死、闸门、落盘、跑通 | 只在讨论工具本身时用;给读者看的报告里换成日常词 |
92
+
93
+ 判断只要一句:**读者没装这个工具,也读得懂吗?** 读不懂就是外泄。
94
+
95
+ `report_lint.py` 把这一层单独查了一档:纯行话(报警项、判死、落盘、跑通)直接判不合格,权衡用词(闸门、拆轮、打标)只提示。规则文档本身要讨论这些词,用 `--doc` 跳过这档。
96
+
97
+ 误杀防护:`闭环控制`、`协同编辑`、`消防联动`、`用户洞察`(模块名)、体育语境下的「赛道」放行。
98
+
99
+ ## T1-4 客服腔与聊天残留(确定性最高的破绽)
100
+
101
+ 好问题!/ 你说得很对 / 让我来为你解释 / 希望这对你有帮助 / 如果你还有其他问题 / 要不要我…… / 我看到你…… / 先说结论——出现即删。
102
+
103
+ ## T1-5 无源引用
104
+
105
+ 研究表明 / 数据显示 / 有专家指出 / 业内人士认为 / 据报道 —— 这是把「权威」当成句子里的一个空位去填。
106
+
107
+ 改法:给出来源;给不出就删掉这句,或写成「有报道称 X(标的:媒体名,日期),未能核到一手来源」。**禁止把笼统归因替换成你编造的机构名、报告名、日期。**
108
+
109
+ ## T1-6 比喻与借代(对外报告一律不用)
110
+
111
+ 拿别的东西指代报告里的概念,读者要多绕一步才能懂,而且各人脑子里绕的方向不一样。对外报告里直接说做了什么。
112
+
113
+ | 常见的比喻 | 直接说 |
114
+ |---|---|
115
+ | `骨架` / `结构骨架` | 结构、章节安排 |
116
+ | `台账` / `证据台账` | 证据清单、材料清单 |
117
+ | `三角验证` | 用三类互不相同的材料互相核对 |
118
+ | `双轴` 评鉴 | 从两方面判断:因果是否成立、结论能推多远 |
119
+ | `全家桶` | 一次装齐所有工具 |
120
+ | `抓手` | 着手点、先做的事 |
121
+ | `打穿` / `小疤` | 彻底解决 / 小问题 |
122
+ | `地基` / `桥梁` / `钥匙` | 基础 / 中间环节 / 关键条件 |
123
+
124
+ 机器判比喻不可靠,`report_lint.py` 只对高频的几十个词给出提示,不作判定;最终还是要人来读一遍。
125
+
126
+ ---
127
+
128
+ ## T2 · 删连接词与拔高渲染(同段 2 处以上才动手)
129
+
130
+ | 类别 | 典型词 | 处理 |
131
+ |---|---|---|
132
+ | 空转连接 | 值得注意的是、不难发现、众所周知、由此可见、综上所述、总而言之 | 删,前后句本来就连得上 |
133
+ | 过渡废话 | 换句话说、也就是说、具体来说、更重要的是 | 删;要解释就换个说法重写 |
134
+ | 伪深刻 | 本质上是、核心在于、真正的问题在于、从某种意义上说 | 删,直接给判断 |
135
+ | 拔高渲染 | 意义深远、前所未有、至关重要、颠覆性、范式转移 | 换成事实;抬价的那半句通常没有新信息 |
136
+ | 时代开场 | 在当今……背景下、随着……的快速发展 | 删,第一句直接给结论 |
137
+ | 正能量收尾 | 未来可期、让我们拭目以待、只有……才能…… | 删,停在最后一个具体事实上 |
138
+
139
+ 三段排比(既要……又要……还要……)压成一句带数字的陈述,或改表格。
140
+
141
+ ---
142
+
143
+ ## T2 · 标点与排版
144
+
145
+ | 指标 | 阈值 | 说明 |
146
+ |---|---|---|
147
+ | 破折号 | 单段 ≤1 处;≥4 处判死 | 破折号是「想加转折但懒得组织」的记号 |
148
+ | 加粗 | ≤8 处/千字 | 满篇加粗等于没有重点 |
149
+ | 段落 | ≤7 行,最佳 ≤4 行(按手机宽度约 300 字;lint 以字数近似,>300 字判死) | 一屏读不完,读者跳过 |
150
+ | 单句 | 目标 ≤20 字;30–39 字须语义清晰;>40 字不可接受;>60 字判死 | 中文长句是最强信号 |
151
+ | 标题层级 | 一级标题下不得直接出现三级;同级不孤立;尽量不用四级 | 跳级说明结构没想清楚 |
152
+
153
+ ---
154
+
155
+ ## T3 · 只报警,人来判断
156
+
157
+ - **连词密度**:不设全局阈值。实测反例存在——不该改的文本连词密度反而更高。只有出现「连续 3 句都以连词起手」或「同一连词单段 ≥3 次」时才提示。
158
+ - **名词化**:`进行/实现/完成 + 动名词`(对流程进行了优化)。改回动词(把流程改顺了);法律公文固定表述保留。
159
+ - **借喻场混用**:800 字窗口内混用 3 套以上比喻系统(道路竞赛/战争攻防/建筑灾害/温度/仓储/海洋航行/机器器官)才提示。先排除字面用法(搜索引擎、代码仓库)。
160
+
161
+ ---
162
+
163
+ ## 改写七法
164
+
165
+ 1. **删抬价的前半句**:`不是 X,而是 Y` → `Y`。
166
+ 2. **换成事实**:形容词 → 数字、名字、时间、金额。**但不得新造原文没有的数字与出处**。
167
+ 3. **拆句**:一句只装一个意思,超过 40 字就找句号的位置;不为凑短句把连贯段落拆成清单。
168
+ 4. **删连接词**:句间靠内容衔接,不靠「因此/然而/此外」。
169
+ 5. **名词化还原**:`进行了优化` → `改顺了`。
170
+ 6. **一段一主张**:段首句就是主张,其余句子支撑它。
171
+ 7. **统一指称**:`修表 → 这门手艺 → 这项技能` 这种同义词轮换读起来发油,统一回最具体的说法。
172
+
173
+ 改写示例:
174
+
175
+ ```
176
+ ✗ AI 版
177
+ 值得注意的是,欧洲户储市场正在经历深刻的结构性调整。这不仅仅是补贴退坡
178
+ 的问题,更是回本期拉长导致的系统性需求收缩。换句话说,政策与经济的双重
179
+ 压力正在形成闭环,行业需要重新思考自身的价值定位。
180
+
181
+ ✓ 人话版
182
+ 欧洲户储在收缩。德国 2026 年户用光伏新增预计 3.0GW,比 2024 年少 27%;
183
+ 平均回本期从 6.2 年拉到 9.4 年。电价从 0.42 欧元/kWh 回落到 0.24,补贴
184
+ 也退了,多数家庭算不过这笔账。
185
+ ```
186
+
187
+ 差别不在文采:人话版每句都有数字或事实,AI 版每句都在解释自己。
188
+
189
+ ---
190
+
191
+ ## 不误伤:这些保留
192
+
193
+ - **引用**:别人原话、公告原文、访谈原句,照抄并标出处,不改写。
194
+ - **必要的对比**:纠正读者真实持有的误解时,一次「不是 A 而是 B」合法(额度内)。
195
+ - **专业术语**:NEM 3.0、ITC、LCOE 保留,首次出现加一句白话解释。
196
+ - **事实性否定**:`欧洲没有退坡` 照写。禁的是「否定 + 肯定」的对偶骨架。
197
+ - **顺序与同时**:`首先/其次` 表顺序、`与此同时` 表同时发生,保留。
198
+ - **坏消息铺垫**:SCQA 用两句话建立情境,然后立刻给结论。
199
+
200
+ ---
201
+
202
+ ## 三遍读法(每节写完立刻做)
203
+
204
+ 1. **删**:删掉所有删了不影响理解的句子,通常能删 20%。
205
+ 2. **换**:形容词换数字,抽象换具体,黑话换日常词。换不出数字说明这段缺证据,回去补。
206
+ 3. **拆**:长句拆短,长段分段,并列三项以上改表格。
207
+
208
+ 三遍之后还读不顺,是内容没想清楚——回去补证据,别在文字上磨。
209
+
210
+ ---
211
+
212
+ ## 交付前核对(防编造)
213
+
214
+ - 每个新增的具体信息(数字、名字、日期、引文)能否在证据表里找到?找不到就撤回。
215
+ - 有没有把「可能」写成「确定」?
216
+ - 有没有为了显得具体而编造数据?宁可保持概括,也不要一个假数字。
217
+
218
+ ---
219
+
220
+ ## 与 lint 的关系
221
+
222
+ `report_lint.py` 查下限:禁句、超长句、超长段、破折号峰值、AI 腔密度、数字密度、图表密度。它查不出观点错、逻辑断、数据假——那部分交给评估子代理与人工核验。
223
+
224
+ 用法:每写完一节跑一次 `--scale 0.6 --strict --quiet`,整篇写完再跑 `--strict`。不 PASS 就地改。
225
+
226
+ `--strict` 把数字密度和图表密度升级为判死项:一段没有数字、一节没有表格,就是「太干」的源头,节级拦下。不加 `--strict` 时它们只报警——改别人的稿子用这种模式,别一上手就判死。
227
+
228
+ 阈值可在脚本顶部按自己的语料调整;改阈值要在 `AUTORESEARCH.md` 里记一条理由。