通用-深度研究-研究报告
触发方式
/research-report
执行流程
Step 1: 定位结果目录
在当前工作目录查找 */outline.yaml,读取 topic、research_domain 和 output_dir 配置。
Step 2: 扫描可选摘要字段
读取所有 JSON 结果,提取适合在目录中显示的字段(数值型、简短指标),例如:
- market_share(市场份额)
- reader_rating(读者评分)
- growth_trend(增长趋势)
- search_heat(搜索热度)
- publication_count(作品数量)
使用 AskUserQuestion 询问用户:
- 目录中除了 item 名称外,还需要显示哪些摘要字段?
- 提供动态选项列表(基于实际 JSON 中存在的字段)
Step 3: 生成 Python 转换脚本
在 {topic}/ 目录下生成 generate_report.py,脚本要求:
- 读取 output_dir 下所有 JSON
- 读取 fields.yaml 获取字段结构
- 覆盖每个 JSON 的所有字段值
- 跳过值包含
[不确定]的字段 - 跳过 uncertain 数组中列出的字段
- 生成 Markdown 报告格式:目录(带锚点跳转+用户选择的摘要字段)+ 详细内容(按字段分类)+ 创作可迁移总结
- 保存到
{topic}/report.md
目录格式要求:
- 必须包含每一个 item
- 每个 item 显示:序号、名称(锚点链接)、用户选择的摘要字段
- 示例:
1. [读者偏好迁移](#读者偏好迁移) - 增长趋势: ↑15% | 搜索热度: 高
脚本技术要点(必须遵循)
1. JSON 结构兼容 支持两种 JSON 结构:
- 扁平结构:字段直接在顶层
{"name": "xxx", "market_share": "xxx"} - 嵌套结构:字段在 category 子 dict 中
{"市场数据": {"name": "xxx"}, "内容特征": {...}}
字段查找顺序:顶层 → category 映射 key → 遍历所有嵌套 dict
2. Category 多语言映射 fields.yaml 的 category 名与 JSON 的 key 可能是任意组合(中中、中英、英中、英英)。必须建立双向映射:
CATEGORY_MAPPING = {
"市场数据": ["market_data", "市场数据"],
"内容特征": ["content_features", "内容特征"],
"读者反馈": ["reader_feedback", "读者反馈"],
"专业知识": ["domain_knowledge", "professional_knowledge", "专业知识"],
"人物特征": ["character_traits", "人物特征"],
"场景细节": ["scene_details", "场景细节"],
"技法要素": ["technique_elements", "技法要素"],
"创作可迁移": ["transferable_insights", "创作可迁移"],
}
3. 复杂值格式化
- list of dicts:每个 dict 格式化为一行,用
|分隔 kv - 普通 list:短列表用逗号连接,长列表换行显示
- 嵌套 dict:递归格式化,用分号或换行显示
- 长文本字符串(超过 100 字符):添加换行符
<br>或使用 blockquote 格式,提高可读性
4. 额外字段收集 收集 JSON 中有但 fields.yaml 中没定义的字段,放入"其他信息"分类。注意过滤:
- 内部字段:
_source_file、uncertain - 嵌套结构顶级 key:
市场数据、内容特征等 uncertain数组:需要逐行显示每个字段名,不要压缩成一行
5. 不确定值跳过 跳过条件:
- 字段值包含
[不确定]字符串 - 字段名在
uncertain数组中 - 字段值为 None 或空字符串
6. 创作可迁移总结(新增,强制) 报告末尾必须生成一个 "创作可用结论与抓手" 部分,将全部研究发现翻译成小说创作者可以直接使用的行动建议:
- 按"可直接用于正文"、"可用于设定/大纲"、"需要进一步研究"三级分类
- 每条建议必须具体到:可以写什么场景、可以怎么用、可以用在什么类型的情节中
- 这是整个研究报告的核心价值产出,不能跳过或敷衍
Step 6: 报告质量自检(检查点3)
报告生成完成后,执行以下自检清单(借鉴 nuwa-skill Phase 4 质量验证方法论):
## 报告质量自检清单
### 结构完整性
- [ ] 包含 `## 研究课题`
- [ ] 包含 `## 研究方法与来源`
- [ ] 包含 `## 核心发现`(区分核心/参考/待验证三级)
- [ ] 包含 `## 创作可用的结论与抓手`(≥3 条具体建议)
- [ ] 包含 `## 诚实边界`(信息截止日期 + 信息缺口 + 不确定项 + 置信度总评)
- [ ] 包含 `## 信息来源`(区分一手/二手,标注可信度)
### 质量验证(三重验证)
- [ ] 每条"核心发现"有 ≥2 个独立来源支撑?
- [ ] "创作可用的结论与抓手"中的每条建议都具体到"可写什么场景/怎么用/用在哪类情节"?
- [ ] 超过 50% 的核心发现通过"有区分度"验证(不是常识)?
### 诚实边界
- [ ] 明确写了信息截止日期?
- [ ] 列出了所有 `[不确定]` 和 `[待验证]` 条目?
- [ ] 给出了整体置信度总评(高/中/低)及理由?
- [ ] 标注了信息不足的维度?
### 矛盾处理
- [ ] 报告中的矛盾发现已保留(未强行统一)?
- [ ] 矛盾双方都标注了来源类型与可信度?
Step 7: 询问报告落盘路径
使用 AskUserQuestion 询问用户:
- 报告应保存到哪个目录?(建议保存到项目或题材目录的
写作研究/下) - 是否需要同时生成一份精简版(仅含"创作可用结论与抓手")?
Step 8: 执行脚本
运行 python {topic}/generate_report.py
输出
{topic}/generate_report.py- 转换脚本{topic}/report.md- 完整研究报告{写作研究目录}/{研究域简称}_{课题简述}.md- 最终落盘文件(可选精简版)