所有规则按"在哪拦截"标注,违规即降级。
| 规则 | 说明 | 在哪拦截 |
|---|---|---|
| 章节约束 | quick 5-8 章 / standard 8-10 章 / deep 10-12 章(区间以 profiles.json 的 min_chapters / max_chapters 为准) | 阶段1 大纲 agent |
| 可搜索性 | 每个子问题必须能通过工具内置引擎(如有)+ 免费源(DuckDuckGo/Semantic Scholar/GDELT/Wikipedia)独立搜索 | 阶段1 大纲 agent |
| 免费源补强 | 逐子问题质量门未达标时触发 Step 3(与 Step 4 抓取并行,新 URL 追加到下一轮抓取) | 阶段2 Step 3(并行) |
| 对比视角 | 至少 1 个反方观点子问题 | 阶段1 大纲 agent |
| 子节结构完整性 | 大纲 agent 必须为每章定义 sections[],deep 3-6 节,standard 2-4 节,quick 1-2 节 | 阶段1 大纲 agent |
| 规则 | 说明 | 在哪拦截 |
|---|---|---|
| Scrapling 为默认抓取工具 | 安装环节已确保 Scrapling 就绪,Task 2 直接使用 Scrapling 批量抓取;单 URL 失败则回退 webfetch | ⚡ 阻断点(Step 4→Step 5) |
| 结构化事实 | 数据池使用 JSON facts[] 数组格式,非散装文本 | 阶段2 输出 |
| 跨源矛盾标记 | 不同来源矛盾数据在 controversies[] 数组中对齐 | 阶段2 数据池 |
| 来源稀缺 | 连续 3 不同域名 404 → 2 分钟上限 | 阶段2 |
| 不重复 | 每个新子问题前检查数据池已有内容 | 阶段2 Step 5(数据提取) |
| 来源多样性硬线 | 补强与 data_limited 均基于逐子问题质量门:子问题 insufficient(可用 URL < 3 / 结果年份早于 target_year-2 / high 优先级无权威域名)单独补搜;insufficient_count ≥ total_sub_questions/3 时标记 data_limited | 阶段2 Step 3 + Step 6 |
| 数据时序分类 | 每条 fact 必须标注 data_type(actual/estimate/forecast)。若该指标的官方发布日在报告生成日之后,自动标记为 estimate 或 forecast |
阶段2 数据池 |
| 规则 | 说明 | 在哪拦截 |
|---|---|---|
| 标题自解释 | 标题不含模拟编号(C1/ch-01 等)。grep 检查 ^##.*ch-|^##.*C1 |
阶段5 验收 |
| 子节编号体系分离 | 子节标题(二级 / ###)不得使用汉字数字编号体系(一、二、三),必须使用阿拉伯数字 x.x 格式(1.1, 1.2…) |
章节 agent prompt + 阶段5 验收 grep ^### [一二三四五六七八九十] |
| 时间戳硬编码 | 文件名和报告尾时间必须 date 获取 |
阶段5 验收 |
| 章节 agent 不写最终文件 | 写临时文件,装配 agent 拼装 | 阶段4 Step 2 |
| 章节默认并行 | 章节撰写优先并行派发(探测到多 agent 工具时);无多 agent 能力的平台自动降级为串行撰写,产物一致,仅耗时略增 | 阶段4 主 agent 循环 |
| 章节自检 | 章节 agent 写入前必须通过编码洁净、子节编号合规、段落达标、来源可追溯等自检,合格后方可输出 | 阶段4 输出方式 |
| 跨源一致 | 同一数据在不同章节数值一致 | 阶段5 装配检查 |
| 三段式顺序 | 报告结构固定为:标题 → 元数据块 → TOC 标题 → 正文各章,不可调换 | 阶段5 验收:第1行 ^# ,第2-6行含元数据和参考来源,之后紧跟语言对应的 TOC 标题 |
| 参考来源行 | 元数据后另起一行 > **参考来源/References**:{主要来源} 等/et al. · 共引用 N 个来源/Total N sources,字段按语言自动适配 |
阶段5 QA 检查 |
| 报告尾部 | 末尾固定包含参考来源章节(语言对应,如 ## 参考来源/## References)和免责声明(语言对应,如 ## 免责声明/## Disclaimer) |
阶段5 QA 检查末尾 20 行 |
| TOC 标题唯一 | 报告有且仅有一个 TOC 标题(语言对应,如 ## 目录/## Table of Contents/## 목차) |
阶段5 QA python dr_tools.py check-toc --lang $LANG |
| 乱码零容忍 | data-pool.json 和最终报告均不得含替换字符(\ufffd)或典型 Mojibake 模式或 ??? 连续问号 |
Task 2 Step 6 + 阶段5 QA grep |
| 预测值措辞限定 | 引用 data_type=estimate 或 forecast 的事实,正文必须使用"预估""预计""预测"等限定词,不得作为既定事实陈述。章节 agent 和装配阶段均需检查 | 阶段4 chapter agent prompt + 阶段5 QA |
| 纯文本公式 | 报告不得使用 LaTeX/math 语法($...$ 等),全部用纯文本表达 |
阶段4 prompt + 阶段5 验收 |
| 可信评估标配 | 报告必须在 ## 参考来源(语言对应标题)前包含 ## 可信评估(语言对应),内容由装配阶段 generate-confidence-section 命令从 data-pool + manifest 自动聚合生成 |
阶段2b 装配 + 阶段5 QA check_tail |
| 数据类型行必含 | 可信评估段必须包含「数据类型」行(**数据类型** / **Data Type**),展示已公布/估算/预测的条数和比例,不得省略 |
阶段5 QA check_tail |
| 评估意见动态生成 | 评估意见必须引用上方统计数字(实际条数、百分占比),按条件组合判断语句,禁止使用与数字脱节的固定模板 | 阶段5 QA 人工验收 |
| 路径核验 | 最终报告必须保存在 skill 默认目录或用户自定义目录,两者之一 | 阶段5 QA 检查 |
| 编码洁净 | 所有中间文件(outline.json / data-pool.json / chapter-*.md)必须使用 UTF-8 无 BOM 编码写入,不得出现替换字符(\ufffd)或 GBK→UTF-8 Mojibake。子 agent 写入前自行校验,不得遗留到主 agent | 阶段1/2/3/5 各输出环节 |
| 清理 | 调研结束后删除 TMPDIR | 阶段5 Step 4 |
| 反模式 | 在哪拦截 |
|---|---|
| 数值量级错误(亿/billion 差 10x) | 阶段4 章节 agent 自检 + Task 2 Step 6 |
| 完美平滑趋势(虚假插值) | 阶段4 章节 agent 自检 |
| 来源混淆(出货量 vs 零售量) | 阶段4 章节 agent 自检 |
| 数据不足硬撑行数 | Task 2 Step 6 阻止 + 阶段4 段落数约束 |
| Scrapling 被搜索引擎摘要片段替代 | 阶段2 ⚡ 阻断点 |
| 内部编号泄露到正文(如出现 "以下是C1的分析") | 阶段4 prompt + 阶段5 grep 检查 |
| 自定义脚本替代 dr_tools.py(word-count/check-encoding/assemble-report 等已有命令,不得另写 Python 脚本) | 阶段4/5 主 agent 兜底规则 |
| 子节使用一、二、三编号(应与章编号体系分离) | 阶段4 prompt + 阶段5 验收 grep ^### [一二三四五六七八九十]、 |
| 章节 agent 写最终文件(并行竞态) | 阶段4 临时文件方案 |
| 并行章节数据不一致 | 阶段5 装配一致性检查 |
| 大纲超约束 | 阶段1 硬约束章节数 |
deep-research by hoolulu · github.com/hoolulu/deep-research