sn-report-format-discovery · diff
git:20260715.c9bcf7a to git:20260825.98a8bde
16 added, 351 removed. Audit A to A.
---
name: sn-report-format-discovery
- description: 用于研究任务的最终呈现形式未知时。比较研究报告、学术论文、表格优先报表、决策备忘录或自定义形式,并用权威标准与真实范例支持推荐。
+ description: 用于用户希望推荐研究成品形式,或最终形式无法从需求中直接判断时。把需求解析为一个简短的 format 字符串,不创建格式文件或 schema。
---
- # sn-report-format-discovery(最终呈现形式发现)
-
- 在规划研究维度之前,先搞清楚最终结果应以什么形式呈现。本 skill 研究的是**呈现形式**,例如研究报告、学术论文、表格优先报表、决策备忘录或用户自定义形式;同时登记用户对主信息载体的偏好强度。它不决定文件后缀,也不在研究前生成具体章节目录。
-
- ## 核心原则
-
- 1. **呈现形式是可研究的问题**——读者任务、使用场景、信息形态和领域惯例决定什么形式更合适
- 2. **固定入口,动态导航**——写死的是"去哪里找"(锚点),动态的是"找什么"(具体领域标准)
- 3. **区分标准指南和真实范例**——指南告诉你"应该怎么写",范例告诉你"实际长什么样",两者互补
- 4. **容器与形式分开**——当前 deep-research 最终仍以 Markdown 承载;研究报告、论文、报表等是 Markdown 内的信息呈现形态
- 5. **形式、内容范式、信息载体正交**——研究报告等形式回答"交付物是什么",六种 research paradigm 回答"内容如何推进",主信息载体回答"核心信息由什么结构承载";三者不得建立固定映射
- 6. **偏好不等于最终编排**——研究前只登记 `required|preferred|auto`;研究完成后由 report-planner 根据实际 evidence 生成 `organization_decision`
- 7. **语言只服从运行锚点**——使用 payload 的 `language`;候选 label、best_for、defining_features、rationale、来源提取说明与 completion reply 使用该语言,不得因本 skill 的中文提示或外部来源语言改变输出语言
-
- ## 职责边界
+ # 最终形式推荐
- - 本 skill 是格式发现的唯一责任方:比较候选、调研惯例、提取 defining features,并写出 `format_proposal.json`。
- - scout 只在完成 briefing 后传入预研上下文并调用本 skill,不在自身契约中复制格式规则。
- - plan 只根据已确认形式准备相应证据,不重新选择格式。
- - report-planner 在研究完成后同时读取已确认形式、结构偏好和 evidence,生成可审计的 `organization_decision`;本 skill 不提前生成章节 blueprint,也不替 planner 预判 evidence 适合哪种结构。
+ 根据用户需求确定一个请求级 `format` 字符串。该字符串和 `language` 一样只在本次运行上下文中传递,不写入文件。
## 输入
- 原始研究需求 `query`
- - `language`:controller 根据 query 固化的请求级语言参数
- - briefing 中的 `task_interpretation`、目标读者、使用场景和用户已表达的格式要求
- - 可选 `format_revision_request`;修订时同时读取现有 `format_proposal.json`
- - `report_dir`,用于写入 `{report_dir}/format_proposal.json`
-
- ## 工作流程
-
- ```
- 步骤 1: 从 briefing 识别 → 用户任务 + 读者 + 使用场景 + 用户明确表达的结构偏好
- 步骤 2: 比较 2-3 种可行呈现形式,选出推荐项
- 步骤 3: 为候选形式选择锚点策略并搜索 → 标准指南 + 真实范例
- 步骤 4: 每搜到一个结果,验证 is_primary_source
- 步骤 5: 通过验证的来源 ≥ 3 份 → 停止搜索;不足则继续下一锚点(最多 8 轮)
- 步骤 6: 提取形式特征 + 登记结构偏好强度 → 输出 format_proposal.json
- ```
-
- ## 呈现形式判断
-
- 先判断读者最终要**阅读、复核、比较还是决策**。下表是常见起点,不是封闭枚举;用户可以指定任何其他形式。
-
- | 呈现形式 | 适合的任务 | 主要信息形态 |
- |---|---|---|
- | `research_report` | 多维度综合、行业/市场/政策/技术研究 | 结论前置的叙事 + 图表/表格 |
- | `academic_paper` | 明确研究问题、方法、证据过程与学术论证 | 摘要、方法、结果、讨论式论证 |
- | `analytical_table` | 读者主要需要逐项比较、查数或筛选 | 表格为主体,文字只解释口径与结论 |
- | `decision_memo` | 面向单一决策,需要建议、依据和风险 | 短篇决策结论 + 选项/风险 |
- | `timeline` | 事件演变、政策沿革、项目复盘 | 时间序列为主体 |
- | `faq` | 问题集合相对独立,读者按需查阅 | 问答单元 |
- | `custom` | 用户点名的其他形式 | 由用户定义 |
-
- 选择规则:
-
- - 用户已明确指定形式:只登记该形式,不用外部惯例替换用户选择。
- - 用户未指定:推荐 1 个主选项,并保留最多 2 个真正可行的替代项。
- - 不要因为最终容器是 Markdown 就默认 `research_report`;表格优先、论文式或其他形式同样可以在 Markdown 中实现。
- - `defining_features` 只描述该形式必须保持的呈现特征,不写本次研究的具体章节标题或结论。
-
- ### 结构偏好强度
-
- 主信息载体使用开放但稳定的基础类型:`narrative`、`matrix`、`timeline`、`checklist`、`scorecard`、`qa`、`callout`、`diagram`、`custom`。这些类型不是与 panorama、comparison、investigation、timeline、evaluation、forecast 的配对表;任一内容范式都可以根据读者任务和 evidence 采用任一载体或多个载体组合。
-
- 这里区分三层,不能混成一个枚举:
-
- - `selected_format` 是整体交付形态,例如研究报告、brief、memo、board 或用户自定义形式。
- - `structure_preference` 是核心信息由哪种原子载体承载,例如 narrative、matrix 或 checklist。
- - 研究完成后的 `organization_decision` 才决定实际 content units、主次关系和 Markdown 渲染方式。
-
- 因此 brief/board 不和 matrix/checklist 竞争同一个 `requested_type`。用户要求“board 中以矩阵为主体”时,board 进入 `selected_format`(必要时为 custom candidate),matrix 进入 `structure_preference`;两者都要保留。
-
- ```json
- {
- "requested_type": "matrix",
- "custom_type": null,
- "strength": "required|preferred|auto",
- "notes": "用户希望核心比较能直接扫读"
- }
- ```
-
- 判定规则:
-
- - `required`:用户明确使用“必须”“只要”“以……为主体”等硬约束。`requested_type` 必填;后续 planner 不得改成其他主载体。
- - `preferred`:用户表达“优先”“最好”“倾向”等偏好。`requested_type` 必填;planner 只有在 evidence 明显不适配时才可调整,并必须在 `organization_decision` 说明原因。
- - `auto`:用户没有表达主载体偏好。`requested_type` 与 `custom_type` 均为 `null`;planner 在 evidence 完成后选择。
- - 用户描述了枚举外的载体时用 `requested_type=custom`,并在 `custom_type` 写用户原话;不得为了套枚举改写用户要求。
- - 不从 query 的研究范式反推结构偏好。例如竞品分析不自动写成 matrix,事件调查也不自动写成 timeline。
-
- ---
-
- ## 锚点注册表
-
- ### 学术领域锚点
-
- #### 锚点 A1:EQUATOR Network(报告规范总站)
-
- EQUATOR Network 索引了 400+ 个研究报告规范(PRISMA、CONSORT、STROBE、MOOSE 等),覆盖几乎所有学术报告类型。
-
- **搜索方式**:
- ```
- site:equator-network.org {report_type} reporting guideline
- ```
-
- **示例**:
- - 系统综述 → `site:equator-network.org systematic review` → PRISMA 2020
- - 随机对照试验 → `site:equator-network.org randomised trial` → CONSORT
- - 观察性研究 → `site:equator-network.org observational study` → STROBE
- - 诊断准确性 → `site:equator-network.org diagnostic accuracy` → STARD
- - 质性研究 → `site:equator-network.org qualitative research` → SRQR / COREQ
-
- **适用范围**:生物医学、心理学、公共卫生、护理等有成熟报告规范的领域。
-
- #### 锚点 A2:期刊投稿指南
-
- 期刊自己定义了投稿格式。不写死具体期刊,而是**先找到领域对应的顶级期刊,再获取其投稿指南**。
-
- **搜索方式**(两步):
- ```
- # 步骤 1: 找到领域顶级期刊(通过高引综述)
- 用 sn-search-academic skill 搜索: "{领域关键词} survey OR review"
- 从结果中提取发表期刊名(优选引用数高的)
-
- # 步骤 2: 获取该期刊的投稿指南
- "{journal_name}" author guidelines OR guide to authors OR submission guidelines
- ```
-
- **验证**:URL 路径通常包含 `/authors/`、`/submit/`、`/guidelines/`、`/for-authors/`。
-
- **适用范围**:所有学术领域——每个领域都有对应的顶级期刊。
-
- #### 锚点 A3:方法论权威手册(少量极稳定来源)
-
- | 手册 | 域名 | 覆盖范围 |
- |------|------|---------|
- | Cochrane Handbook | training.cochrane.org | 系统综述、Meta 分析 |
- | NLM Reporting Guidelines | nlm.nih.gov | 所有生物医学研究类型的报告标准索引 |
- | APA Publication Manual | apastyle.apa.org | 心理学及社科领域写作规范 |
-
- **搜索方式**:
- ```
- site:training.cochrane.org {report_type} structure
- site:nlm.nih.gov reporting guidelines {research_type}
- ```
-
- #### 学术领域搜索优先级
-
- ```
- 1. EQUATOR Network(如果领域有对应的 reporting guideline)
- 2. 期刊投稿指南(通过高引综述定位期刊)
- 3. 方法论手册(Cochrane / NLM / APA)
- 4. 领域内高引综述论文的实际目录结构(作为范例)
- ```
-
- 对于 CS/AI/工程等**无成熟报告规范**的领域,EQUATOR 可能无结果。此时跳过步骤 1,直接从步骤 2(期刊指南)和步骤 4(高引综述范例)入手。
-
- ---
-
- ### 行业研究领域锚点
-
- #### 锚点 B1:监管机构披露模板(法定标准)
-
- 监管机构定义了法定的报告格式。不写死具体机构,而是**根据行业所在地区定位对应监管机构**。
-
- **搜索策略**:
- ```
- # 识别地区 → 搜索对应监管机构
- 中国上市公司: site:csrc.gov.cn 信息披露 OR 年报格式
- 美国上市公司: site:sec.gov filing template OR form 10-K
- 欧盟: site:esma.europa.eu reporting template
- 香港: site:hkex.com.hk listing rules disclosure
-
- # 特定行业监管
- 银行: site:cbirc.gov.cn OR site:federalreserve.gov
- 医药: site:nmpa.gov.cn OR site:fda.gov
- ```
-
- **适用范围**:涉及合规、上市公司分析、监管政策的研究。无监管要求的行业可跳过。
-
- #### 锚点 B2:CFA Institute Research Standards(职业标准)
-
- 投资研究领域的全球职业标准。
-
- **搜索方式**:
- ```
- site:cfainstitute.org research objectivity standards
- site:cfainstitute.org global investment performance standards
- ```
-
- **适用范围**:投资研究、券商研报、基金分析。
-
- #### 锚点 B3:真实范例发现(行业头部机构报告)
-
- 不写死哪些券商/咨询公司,而是**搜索同类报告,从结果中识别头部机构**。
-
- **搜索方式**:
- ```
- # 中文行业研报
- "{行业}" 深度研报 OR 行业研究报告 filetype:pdf
- "{行业}" 行业深度 site:research.cicc.com OR site:mckinsey.com.cn
-
- # 英文行业报告
- "{industry}" industry report OR market analysis filetype:pdf
- "{industry}" deep dive site:mckinsey.com OR site:bcg.com OR site:bain.com
-
- # 国际组织报告(特定行业)
- "{industry}" report site:worldbank.org OR site:imf.org OR site:oecd.org OR site:who.int
- ```
-
- **适用范围**:所有行业研究。不要求找到特定机构的报告,而是找到**任何头部机构发布的同类报告作为结构范例**。
-
- #### 行业研究搜索优先级
-
- ```
- 1. 监管模板(如果涉及合规/上市公司)
- 2. CFA 标准(如果是投资研究)
- 3. 同类真实报告范例(从搜索结果中识别头部机构发布的报告)
- 4. 头部咨询公司的公开方法论(McKinsey/BCG/Bain)
- ```
-
- ---
-
- ## 验证协议:is_primary_source
-
- 搜到内容后,需要验证**拿到的是报告本体/标准原文,而不是二手描述**。
-
- 这是一个结构特征检测,不需要模型做主观判断。
-
- ### 采信规则:命中 2+ 个 positive signal
-
- | # | 正向信号 | 检测方式 |
- |---|----------------|---------|
- | 1 | 有完整目录/标题层级结构(至少 3 级) | 计数 heading 层级 |
- | 2 | 有明确的发布机构和日期 | 页面中存在机构名 + 发布/更新日期 |
- | 3 | 有 DOI 或官方文档编号 | 页面中存在 `10.xxxx/` 或编号 |
- | 4 | 来自 PDF 原文或官方页面 | URL 以 .pdf 结尾,或路径含 /publications/ /research/ /reports/ |
- | 5 | 包含 checklist 或结构性要求列表 | 页面中有编号列表描述必选章节/元素 |
-
- ### 丢弃规则:命中任意 1 个 negative signal
-
- | # | 负向信号 | 说明 |
- |---|----------------|------|
- | 1 | 是"如何写报告"的教程 | 二手描述,非标准本身 |
- | 2 | 是报告的新闻摘要/媒体报道 | 转述不是原文 |
- | 3 | 正文内容不超过 500 字 | 摘要而非全文 |
- | 4 | 来自内容聚合站 | 知乎/CSDN/medium/搜狐/百家号 |
- | 5 | URL 含 blog/post/answer/article 等路径 | 通常是个人博文 |
-
- ### 验证失败处理
-
- 单次验证失败不终止搜索——丢弃该结果,继续尝试下一个候选。只有当退出条件触发时才停止。
-
- ---
-
- ## 退出条件
-
- 格式发现按目标驱动,不按轮次驱动。
-
- ### 成功退出
-
- **通过验证的来源(标准指南 + 真实范例合计)≥ 3 份** → 停止搜索,提取候选形式及其 defining features。
-
- 示例:
- - 1 份标准指南 + 2 份真实范例 = 3 ✓
- - 0 份标准指南 + 3 份真实范例 = 3 ✓(有些领域没有正式标准,纯靠范例也可以)
- - 2 份标准指南 + 1 份真实范例 = 3 ✓
-
- ### 来源不足退出
-
- **达到 8 轮搜索预算后仍不足 3 份** → 用已有结果生成 proposal:
- - 如果有 1-2 份通过验证的来源 → 基于已有结果生成 proposal,在 `fallback_reason` 中说明来源不足
- - 如果 0 份 → `fallback_used: true`,仅按用户任务、受众与信息形态给出候选,并明确缺少外部惯例依据
-
- ### 不要做
-
- - 不要为了凑数降低验证标准
- - 不要因为"已经搜了 3 轮"而提前停止——如果还有未尝试的锚点且当前不足 3 份,继续搜
- - 不要重复搜索同一个锚点
-
- ---
-
- ## 输出格式:呈现形式候选
-
- 格式发现的产出是独立的 `format_proposal.json`。它只供 controller 展示给用户确认,不进入正式研究。
-
- 写入前使用 `language`。所有由本 skill 撰写的自然语言值必须使用该语言;来源 `name` 可保留原始官方名称,URL、ID、枚举与结构 key 不翻译。
+ - 请求级 `language`
+ - 用户明确提出的最终形式(如有)
- ```json
- {
- "container": "markdown",
- "source": "user_specified|format_research|fallback",
- "recommended_format_id": "research_report",
- "structure_preference": {
- "requested_type": null,
- "custom_type": null,
- "strength": "auto",
- "notes": "用户未指定主信息载体,由 report-planner 在研究后按 evidence 决定"
- },
- "candidates": [
- {
- "id": "research_report",
- "label": "研究报告",
- "best_for": "该形式最适合解决什么读者任务",
- "defining_features": ["该形式必须保持的呈现特征"],
- "rationale": "为什么适合本次任务"
- }
- ],
- "format_research_sources": [
- {
- "type": "standard_guideline",
- "name": "来源名称",
- "url": "原文 URL",
- "what_extracted": "该来源支持了哪项形式判断"
- },
- {
- "type": "real_exemplar",
- "name": "真实范例名称",
- "url": "原文 URL",
- "what_extracted": "从中提取的呈现特征"
- }
- ],
- "fallback_used": false,
- "fallback_reason": null,
- "confirmed_by_user": false
- }
- ```
+ ## 规则
- 约束:
+ 1. 用户明确指定最终形式时,优先使用用户的名称。
+ 2. 用户未指定时,根据主要阅读任务选择一个简短名称;无法判断时使用 `report`。
+ 3. 常见值包括 `report`、`paper`、`table`、`memo`、`timeline`、`faq`,但这不是封闭枚举。
+ 4. `format` 只表示最终交付形式,不承载章节、摘要、目录、结构偏好或写作规则;这些要求继续保留在原始 query 中。
+ 5. 不搜索外部格式规范,不生成候选对象,不创建 `format_proposal.json`、`format.json` 或任何格式 schema。
+ 6. 不替用户修改研究问题、范围、语言或流程模式。
- - `recommended_format_id` 必须引用 `candidates[].id`。
- - `structure_preference.strength` 必须是 `required|preferred|auto`;`required|preferred` 必须有 `requested_type`,`auto` 的 `requested_type` 必须为 `null`。
- - 用户明确指定时,`source=user_specified`,候选只保留用户指定形式,`format_research_sources=[]`。
- - 用户未指定时,候选 2-3 个;每个 ID 使用稳定的小写 snake_case,也允许用户自定义 ID。
- - `defining_features` 是后续保持格式不变的核心合同;不得混入本次研究的事实或具体目录。
- - 0 个可靠来源时可 `fallback_used=true`,但仍须给出基于任务/受众/信息形态的候选,并说明 fallback reason。
- - `confirmed_by_user` 由 scout 保持 `false`;controller 收到用户确认后另行写出只读 `format.json`。
+ ## 输出
- 用户选定后,controller 写出的 `format.json` 只保留容器、所选候选和用户确认的结构偏好:
+ 只返回一行:
- ```json
- {
- "container": "markdown",
- "selected_format": {
- "id": "analytical_table",
- "label": "表格优先报表",
- "best_for": "逐项比较与查数",
- "defining_features": ["主表承载核心结果", "文字只解释口径、发现和限制"],
- "rationale": "本次任务的核心是同口径比较"
- },
- "structure_preference": {
- "requested_type": "matrix",
- "custom_type": null,
- "strength": "required",
- "notes": "用户确认核心结果必须由主表承载"
- },
- "confirmed_by_user": true
- }
+ ```text
+ format: <一个简短的非空字符串>
```
-
- `selected_format` 必须从用户实际确认的 candidate 原样复制,`structure_preference` 必须保留用户确认时的强度;后续 agent 不得增删或改写 defining features,也不得把 `preferred` 或 `auto` 偷换成 `required`。研究后的实际编排写在 outline v2 的 `organization_decision`,不回写 `format.json`。