深度研究(双图版 / DualGraph)
把研究过程变成双图协同的知识构建:提纲图(Outline Graph,OG)负责"要写什么",知识图(Knowledge Graph,KG)负责"已知道什么";两者之间的缺口驱动每一轮搜索。先积累结构化知识,再以证据约束写作。
默认按以下顺序工作:
- 先从研究问题生成 OG(4-7 章节的骨架)
- 再循环:缺口检测 → 精准搜索 → 抓取全文 → 提炼摘要+三元组 → 更新 OG 引用 + KG 节点
- 直到各章节平均覆盖度 ≥ 0.65 或达到 15 轮上限
- 最后按 OG 拓扑顺序逐章写作,每章精准注入对应证据
依赖与分流
- 当前环境有
search和url_fetch时,优先用它们完成检索与正文抓取。- 需要处理动态网页、JavaScript 页面、搜索摘要不足或必须核对原网页最新内容时,先阅读
skills/browser/SKILL.md,再使用 browser。- 先阅读
references/deliverable-routing.md,判断最终交付属于聊天内结论、HTML,还是需要切换到docx / pptx / pdf / xlsx / wps等现有 skill。- 知识缺口的检测规则详见
references/gap-detection.md。- 来源优先级和场景化检索策略详见
references/source-priority.md。
双图数据结构与沉淀物
正式任务默认沉淀以下研究中间件:
og.md:提纲图——章节列表、各章节描述、引用 ID 列表、覆盖度分数kg.md:知识图——实体节点与实体关系三元组evidence-bank.md:证据库——所有已抓取的页面摘要与三元组(按 ID 索引)
按最终交付路径,再补充以下文件:
- HTML:按任务语义命名的
xxx.html或report.html - 通用 Word / PPT / PDF / 表格:研究完成后切换到对应 skill
开始正式研究任务时,优先读取并复用以下模板:
assets/og-template.mdassets/kg-template.mdassets/evidence-bank-template.md
小任务或用户只要聊天内结论时,可以不落盘,但仍要遵守同样的证据标准。
覆盖度计算规则
章节覆盖度(coverage_score)使用指数衰减公式:
coverage_score = 1 - 0.7^n
其中 n 为该章节绑定的引用数(evidence_id 条数):
| 引用数 n | coverage_score |
|---|---|
| 0 | 0.00 |
| 1 | 0.30 |
| 2 | 0.51 |
| 3 | 0.66 |
| 4 | 0.76 |
| 5 | 0.83 |
终止条件:所有叶节点的平均 coverage_score ≥ 0.65,且已完成至少 3 轮迭代。
每轮更新覆盖度时,重新计算每个章节节点的 coverage_score 并写入 og.md。
工作流
第 0 步:交付路径分流
进入本技能后,先阅读 references/deliverable-routing.md,再判断最终交付属于哪一类:
- 聊天内结论 / 无文件路径:用户只要研究结论、对比、建议时,直接在聊天内交付,不强制生成文件。
- HTML 路径:只有当用户明确要求网页阅读稿、HTML 最终稿或浏览器预览稿时,才继续留在本技能内生成 HTML。
- 外部包装 skill 路径:如果最终交付是普通 Word 报告、PPT、PDF、表格或 金山云文档,先在本技能中完成研究与内容整理,再切换到对应 skill 做最终包装。
第 1 步:界定研究任务
如果用户目标还不清楚,最多补 3 个关键问题,优先问:
- 最终要解决什么问题
- 输出更偏"决策报告"还是"专题分析"
- 是否限定时间、地区、行业、对象、语言或来源类型
如果用户已经讲清楚,就直接进入下一步,不要为了提问而提问。
第 2 步:初始化双图
2a. 生成初始提纲
根据研究问题,生成包含 4-7 个章节 的结构化提纲,每个章节需包含:
- 标题(清晰简短)
- 描述(本章节应覆盖的具体内容和关键点)
章节应覆盖研究问题的核心方面,典型结构为:背景与现状 → 核心机制/方法 → 实验/评估/数据 → 挑战与局限 → 未来展望。根据具体任务调整。
2b. 写入初始文件
用 file(brief=..., action=write, path=og.md, content=...) 创建提纲图,参照 assets/og-template.md 格式。每个章节初始覆盖度为 0.00,引用列表为空。
用 file(brief=..., action=write, path=kg.md, content=...) 创建空的知识图。
用 file(brief=..., action=write, path=evidence-bank.md, content=...) 创建空的证据库。
第 3 步:迭代探索循环(最多 15 轮)
每轮包含以下子步骤,全部完成后再计算终止条件:
3a. 检测知识缺口
先阅读 references/gap-detection.md 了解完整缺口类型。核心检测逻辑:
弱覆盖章节(WEAK_SECTION) ← 最高优先级
- 读取
og.md,找出coverage_score < 0.65的叶节点 - 覆盖度越低,优先级越高(
priority = 1.0 - coverage_score)
- 读取
缺失实体(MISSING_ENTITY)
- 对每个叶节点,提取标题和描述中的关键术语(引号内内容、连续大写词等)
- 读取
kg.md,检查这些术语是否作为节点存在 - 未出现在 KG 中的术语 → 生成 MISSING_ENTITY 缺口(priority=0.8)
孤立实体(ISOLATED_ENTITY)
- 读取
kg.md,找出没有任何关系边的实体节点 - 这些节点表明知识存在"孤岛"(priority=0.7)
- 读取
稀疏区域(SPARSE_REGION)
- 找出关系边数 < 2 的非孤立实体节点(priority=0.5)
知识孤岛(KNOWLEDGE_ISLAND)
- 若 KG 中存在明显互不连通的子图群组(priority=0.6)
将所有缺口按优先级排序,取前 4 个进入下一步。若无任何缺口,提前终止循环。
3b. 生成搜索查询
根据当前前 4 个知识缺口,结合研究问题和 KG 现有知识,生成 3-5 条精准搜索查询:
- 每条查询针对一个具体缺口
- 查询要具体,包含关键实体名或术语(专有名词、英文缩写、模型/方法名保留原文)
- 不同查询覆盖不同缺口,避免重复
- 中文查询时,最后 1 条提供英文变体
3c. 搜索与抓取
对每条查询依次执行:
3c-i. 搜索
使用 search 工具。类型选择:
- 学术论文、白皮书、政府/行业报告:
type="research" - 官网说明、产品文档、事实性资料:
type="info" - 近期动态、时效性事件、发布消息:
type="news" - 公开统计、数据源、榜单、数据库:
type="data"
3c-ii. URL 过滤
对搜索结果中的 URL 进行过滤,跳过以下类型(详见本文档末尾的 URL 过滤规则):
- PDF/PPT/DOC 等不可爬取文件
- YouTube、Twitter/X、Facebook、Instagram、TikTok、Reddit
- 中文字典/古诗词类网站(zdic、汉典等)
- 视频平台(B站视频页、优酷、爱奇艺等)
- 电商平台(淘宝、京东商品页等)
arxiv 链接统一转换为 HTML 格式(/pdf/ 或 /abs/ → /html/)。
每条查询最多取 3 个不重复 URL 进入下一步。已处理过的 URL 直接跳过。
3c-iii. 抓取全文
用 url_fetch 抓取每个 URL 的完整正文。
若 url_fetch 失败或内容明显不完整(< 200 字符):
- 检查是否是 JavaScript 渲染页面
- 若是,切换到
browser工具(先阅读skills/browser/SKILL.md)
必须使用 browser 的场景:
url_fetch拿不到有效正文- 页面强依赖 JavaScript
- 搜索结果与原网页发布时间、标题、数据不一致
- 需要翻页、查看隐藏内容
3c-iv. 提炼摘要 + 三元组
对每个成功抓取的页面内容:
摘要:针对当前搜索查询,从页面提炼关键信息(200 字以内,保留数字、事实、关键术语)。若页面与查询完全无关,摘要写"无相关内容"并跳过该页面。
三元组:从内容中抽取实体-关系-实体三元组(最多 15 条,只抽取明确表达的事实),格式为
(实体A, 关系动词, 实体B)。
3d. 更新双图与证据库
对每条有效证据(摘要不为"无相关内容"的):
更新 evidence-bank.md:
- 分配唯一 ID(如
ev_001、ev_002) - 记录 URL、标题、查询词、摘要、三元组
- 用
file(brief=..., action=append, ...)追加到evidence-bank.md
更新 kg.md:
- 将三元组中的实体加入 KG(节点去重,同名实体合并)
- 将关系边加入 KG(去重:相同 head-relation-tail 不重复)
- 用
file(brief=..., action=write, ...)更新kg.md
更新 og.md(引用绑定):
- 将证据摘要与各章节标题+描述对比,判断最匹配的章节
- 匹配逻辑(按优先级):
- 摘要中出现章节标题的关键词(英文词交集 or 中文 3-gram 命中)
- 若无明确匹配,找最相关的章节(语义最近)
- 将证据 ID 加入匹配章节的引用列表(
citations) - 重新计算该章节的
coverage_score = 1 - 0.7^n(n = 引用数)
自动扩展提纲(可选):
- 若证据揭示一个明确重要但当前 OG 中完全没有覆盖的新话题,且 OG 总章节数 < 8:
- 在最相关的章节下新增子章节(或新增顶级章节)
- 将当前证据的 ID 绑定到新章节
更新完成后,用 file(brief=..., action=write, ...) 将最新 og.md 和 kg.md 写回。
3e. 终止判断
每轮迭代结束后检查:
- 计算所有叶节点的平均 coverage_score
- 若 平均 coverage_score ≥ 0.65 且已完成至少 3 轮:终止循环
- 若 已达到 15 轮:强制终止
- 若 本轮无知识缺口(3a 检测为空):提前终止
满足任一条件即可终止,进入写作阶段。
第 4 步:关键判断定向核验
以下内容必须优先做二次核验:
- 精确数字、增长率、准确率、市场份额、效率提升
- "行业第一""主流""广泛采用"等带比较含义的表述
- 带时间敏感性的政策、产品版本、组织数量、融资或财务数据
- 明显会影响结论方向的争议点
若无法核验:删除该数字,或改写成保守的定性判断,明确标注"待验证"或"无法确认"。
第 5 步:分章节写作
按 OG 的 BFS(宽度优先)层序 逐章撰写:
从
og.md读取章节顺序(根节点 → 子节点,按层次展开)跳过虚拟根节点,只写有内容的章节
对每个章节:
a. 注入证据(精准上下文):
- 从
evidence-bank.md中读取该章节citations列表对应的所有证据 - 只使用这些证据写作,不引入其他章节的证据(避免跨章干扰)
b. 维护 running_context(跨章连贯性):
- 每完成一章,提取该章的前 120 字作为摘要
- 将摘要格式为
[章节标题]: 摘要内容...追加到 running_context - running_context 保留最近 600 字,防止无限膨胀
- 下一章写作时,将 running_context 作为上下文注入
c. 写作要求:
- 深入分析,不要泛泛而谈
- 有条理地展开(可使用子标题、列表、表格等)
- 与前文保持逻辑连贯,不重复已写内容
- 正文引用时在句末或关键断点处标注编号,如
[1]、[2];编号与 evidence-bank.md 中的编号保持一致 - 若某章节引用为空,基于通用知识撰写,并注明"内容待补充"
- 标题级别:一级章节用
##,二级用###,以此类推
- 从
所有章节写完后,整理 参考文献列表:
- 从
evidence-bank.md中提取正文中实际引用过的所有条目 - 按引用顺序编号,格式为:
[n] 作者/机构. 标题. 年份. URL - 若缺作者、年份,可留空,但 URL 和标题必须有
- 格式由用户指定决定:默认使用编号引用;若用户指定 APA 或 GB/T 7714,则按对应格式统一整理
- 将参考文献列表追加到报告末尾(
## 参考文献章节)
- 从
拼接所有章节与参考文献列表,补充报告标题和研究问题说明,生成完整 Markdown 报告
第 6 步:按交付类型输出
聊天内结论:直接在对话中呈现完整报告内容。
落盘输出:
- 先写入
evidence-bank.md(最终版本) - 再写入
og.md和kg.md(最终状态) - 若 HTML 路径:先阅读
references/html-report.md,再生成report.html - 若其他格式:研究完成后切换到对应 skill
提交前必须阅读 references/final-gate.md,通过质量检查后再交付。
核心原则
- 双图驱动,缺口导向:不是机械地搜索,而是让 OG-KG 缺口告诉你下一步搜什么。
- 原始来源优先:优先官方文档、论文、标准、财报、监管披露、原始数据。
- 证据精准注入:每个章节只用该章节的引用证据写作,不混入其他章节证据。
- 覆盖度可量化:用
1 - 0.7^n公式跟踪每章节的知识充盈程度。 - 关键结论可回溯:正文里的每个重要判断都要能在
evidence-bank.md里找到支撑。 - 宁可少写,不要补空话:证据薄弱就缩短该节,不要用行业套话填篇幅。
URL 过滤规则
处理搜索结果时,跳过以下模式的 URL:
文件类型:.pdf、.ppt、.pptx、.doc、.docx、.xls、.xlsx
社交/短视频平台:youtube.com、youtu.be、twitter.com、x.com、facebook.com、instagram.com、tiktok.com、reddit.com/r/
中文字典/古诗词类:zdic.net/hans/、zdic.net/ci/、hanyuguoxue.com/zidian/、chagushici.com/zidian/、hanziyuan.net、hanyu.baidu.com/item/、hanyucidian.org
视频/直播平台:iqiyi.com、youku.com、mgtv.com、sohu.com/v/、v.qq.com、bilibili.com/video/
电商/购物平台:amazon.com、amazon.co.uk、jd.com/product/、taobao.com/item、tmall.com、pinduoduo.com
百度百科短词条:baike.baidu.com/item/X 中若词条名 X 为 1-2 个汉字则跳过
arXiv 格式转换:arxiv.org/pdf/XXXX 或 arxiv.org/abs/XXXX → 统一改为 arxiv.org/html/XXXX,去掉 .pdf 后缀
反空话约束
以下写法默认视为低质量,除非 evidence-bank.md 里有明确证据:
- "近年来得到了广泛关注和应用"
- "某头部机构 / 某业内公司内部测试显示"
- "显著提升效率""大幅降低成本""效果显著优于"
- "未来将全面普及""预计将达到"
对这类句子,优先改成以下三类表达:
- 事实句:谁在什么时候发布了什么、做了什么
- 比较句:不同来源在哪些口径上得出不同结论
- 限定句:这个判断只适用于什么场景、时间窗口或样本范围
写作规则
- 主体段落优先使用"观点句 → 证据 → 分析 → 过渡"的结构
- 不要把文献逐条罗列;要按主题、方法、结论或争议组织
- 任何精确数字都要能回溯到
evidence-bank.md中的来源;如果缺出处,就删掉 - 不能把搜索摘要、营销文案或媒体转述当作最终证据
- 如果一个小节只有共识性常识,没有新的研究发现,就缩短或合并
- 如果用户研究的是行业落地,不要把主体篇幅浪费在通用技术原理介绍上
- 对关键来源说明其性质:原始研究、综述、官方说明、行业报告、媒体报道等
- 如果用户没有指定格式,默认使用可回查的编号引用;若指定 APA、GB/T 7714,再统一整理
- 章节有
citations为空时,注明"本章节证据待补充",不要编造数据
HTML 交付(仅显式要求时)
只有当用户明确要求 HTML 最终稿或网页预览稿时,才输出 report.html:
- 先阅读
references/html-report.md - 再阅读
references/final-gate.md - HTML 内正文引用使用编号锚点,参考文献区列出所有 evidence-bank.md 中引用的来源
质量门槛
提交前至少自检以下问题:
- 是否存在无 evidence-bank.md 支撑的关键结论
- 是否存在无出处的精确数字或排名
- 是否过度依赖单一网站或单一立场
- 是否核对了关键数字、日期、名称、版本
- 是否单独说明了争议点与不确定性
- 是否把搜索摘要误当成最终证据
- 是否把"趋势判断"写成了"已证实事实"
- OG 各章节是否都至少有一条引用(无引用章节需说明)
- KG 中是否有明显孤立节点(孤立实体说明知识存在空白)
- 若额外生成了
report.html,其正文引用是否都能跳转到参考文献条目
提交前必须再阅读一次 references/final-gate.md。若未通过,先重写再交付。