Skip to content

Releases: harryopo/deep-research-ultra

Deep Research Ultra 7.4.0(内核 6.85.0)

Choose a tag to compare

@harryopo harryopo released this 12 Oct 11:33

离线安装包,解压即可用,不需要联网,也不需要 git。内核 6.85.0 / 插件壳 7.4.0。

本包起加了顶层目录:解压后得到 deep-research-ultra/,下面的命令都在它里面执行。(上一版没有这层,文件直接散开——那是打包漏了,本版补上。)

包里有什么

  • 内核 skill(skills/deep-research-ultra/:SKILL.md、scripts、references、tests)
  • 插件壳(根目录 server.py + .qoder-plugin/plugin.json + mcp.json + hooks/)
  • 校验与测试(skills/deep-research-ultra/scripts/tests 1137 项;根目录 tests 50 项;
    合计 1187 项——本包在 Windows 解压实跑 1185 过 / 2 跳,跳的两项需 bash 跑
    setup-mcp.sh,是环境依赖非回归)
  • 全仓测试入口(根目录 run_all_tests.py:内核+壳依次跑并汇总真实通过数)
  • 依赖清单(skills/deep-research-ultra/requirements.txt)
  • 宣传页(index.html)

安装

解压后依次执行:

pip install -r skills/deep-research-ultra/requirements.txt
rm -rf ~/.qoder/skills/deep-research-ultra && cp -r skills/deep-research-ultra ~/.qoder/skills/
python skills/deep-research-ultra/scripts/research.py --probe

Windows 下第二条改
robocopy skills\deep-research-ultra %USERPROFILE%\.qoder\skills\deep-research-ultra /MIR
(返回码是位掩码:0 没有变化、1 复制了文件、3 复制并删掉了目标里多出来的旧文件——升级成功就是 3;8 及以上才是失败)。
先删旧目录(或用 /MIR)再拷:直接合并会把上一版已删除的文件留在安装位,得到"版本号相同、内容不同"的副本。
--probe 逐源实测本机当前能不能出数据,并按缺项给出配置指引;退出码 0 才开工,
判 3 / 4 时会停下来说明缺什么、去哪补。

数据源

34 个源、四层结构(Layer 1 / 2 / 3 / 4 = 13 / 14 / 3 / 4)。其中 5 个需要你先配 key 或服务地址:
Tavily、Firecrawl、Gitee、Crawl4AI、SearXNG;其余 29 个开箱即用。
需要注册但免费额度绑定银行卡的源一律不接入。

research.py --list 给的是「配置就绪」,--probe 给的才是「今天出不得出数据」——
两者分得很清:取不到数据(通道故障)与「调通了但 0 命中」是两类判定,不混为一谈。

34 是注册表口径,不是可用性结论。 实测三层:注册表 34 / 配置就绪 30 / probe 实出 13。
按限流桶看,24 个源挤在 10 个桶里(≈2.4:1),所以同桶的源不能当成彼此的备份——
Semantic Scholar 桶配置就绪 3 个源,实测全倒,桶内冗余为 0。

派子 Agent 前建议再跑一次主题级预演,用你真正要派出去的那句查询词测通道:

python skills/deep-research-ultra/scripts/research.py --probe \
  --sources arxiv-fulltext,github-code-search --theme-query "本维度实际要用的查询词"

本包相对上一版的变化(内核 6.82.0 → 6.85.0)

过程门:第一次检查过程而不只是产出

本 skill 的校验门、证据账本、防伪戳全都在查产出(报告对不对、引用有没有据)。
对过程零检查 —— 而实测下来,agent 的高频错误恰恰都在过程里。

新增 scripts/preflight.py,交付前跑一次,三项检查:

检查 抓什么
smoke 每个脚本能 import、--help 不崩(抓语法错、缺 import、坏引号)
single-source 被钉住的概念只在一处定义(抓"同一件事两份实现")
prov CHANGELOG 里标「实测」的数字能被受版本控制的脚本重跑

为什么不加"让 agent 再审视一遍自己"的环节——因为那按文献是有害的:

文献 结论
ICLR 2024 LLM 没有 oracle 信号时无法可靠自我纠正
2402.08115 加 self-critique 显著降低性能,省略轮次越多退化越明显
2507.06920 LLM 的错误高度聚集,同模型验证者有相同的盲区(同质化陷阱)
2606.19544 高重测一致性可与严重偏置并存;原始一致率把区分度高估 33–41pp

所以过程门只做结构上不同、失效模式不相关的检查:可执行的机械判定,
以及"把结论挂在一个可复算的外部物件上"。完整推导见包内
docs/dev/v6.84-过程门与文献依据.md。

它挡不住什么:像"我根本没想到要去查"这类错误没有机械判据。preflight 自己
会打印「这只覆盖有机械判据的错误」——不要因为过了过程门就以为过程没问题。

数字从此可复算

CHANGELOG 里那些量化结论(precision / recall / AUC)此前只有一半可复算:
样本夹具进了版本控制,产出它们的分析脚本躺在 gitignore 的 .research/ 里。
别人拿到夹具也得自己重写分析,而"重写"未必一致。

现在产出链正式入库:scripts/analysis/relevance.py,带 --check 自证与
CHANGELOG 记录一致(容差 ±0.15,只容忍浮点、不容忍结论退化)。

主题锚词过滤(内核 6.83.0)

用 211 条带人工标注的样本(五类查询,跨学术/工程/中文)把"能不能改相关性
过滤"从"不敢动"变成有数据的结论。

按分项算判别力(AUC,0.5 = 抛硬币):

分项 AUC
标题锚词命中数 0.937
relevance 0.872
total 0.765
authority 0.372
accuracy 0.389

authority / accuracy 低于随机 —— 它们在当前语料上不携带切题信息。
所以「调权重」是往没信号的分项上加权,这就是不调权重的理由:不是保守,是有数据。

规则 precision recall 性价比
现状(relevance ≥ 50) 84.2% 92.5% —
只调阈值 ≥65 98.8% 62.4% 0.49 : 1
+ 主题锚词命中标题 95.2% 90.2% 4.9 : 1

调阈值能把 precision 顶到 98.8%,但 recall 崩到 62.4% —— 每三条切题证据扔掉
两条,扔掉的正是标题不含泛词的好论文。

落地为 --strict-anchor,默认关闭只报数:样本里同时存在两种失效
(15 条噪声命中锚词 vs 4 条切题未命中),只配当辅助信号。

插件壳 7.4.0

包名、插件缓存路径、plugin.json、install.py 四处同步。
最后一处是代码里 mkdir 的真实路径 —— 漏了就是「改了没生效」。

历史:本包相对上一版的变化(内核 6.80.0 → 6.82.0)

README 重写:去掉全部 emoji

129 处 emoji、51 种,全部去掉。这不是审美问题——表格里的对勾与叉号有真实歧义:
同一列里 ✅ 到底是「有」还是「推荐」,取决于看的是哪一列。换成文字之后每一格自己说得清
(支持: / 不支持 / 有限)。

全文 590 行 → 551 行,20 823 字符 → 17 499 字符。结构上的改动:

  • 开头加了「这个工具解决什么问题」,并把边界说死:判断留给 Lead,纪律交给机器。
    列清哪些是机器管的(可回源、引用编号对齐、未验证断言不许当定论、矛盾必须标注、
    抓回内容里的指令不得改变裁决、报告与账本不一致盖不了戳),哪些是人管的(哪些资料相关、
    结论是什么、取舍怎么定)
  • 数据源口径提到安装之前独立成节,--list / --probe / --probe --theme-query
    三层口径列成表——原来这段挤在一段引言里,容易被跳过
  • 35 行的「核心特性」表拆成机制表(每条一行,标注引入版本号)+ 能力清单
  • 输出格式四节合并成一张表

顺带修掉的:6 处死链与 5 处陈旧数字

重写时逐个对着磁盘核了一遍,发现的不只是排版问题:

位置 原来写的 实测
页脚版本 v6.40.0 · 2026-09-29 陈旧 41 个版本
竞品表「四层 32 数据源」 32 34
「767 个用例」 767 1161
「76 个测试文件」 76 120
「19 份调研笔记」 19 5
YOUR_USERNAME 占位符 6 处 全是死链,已换成真实仓库名

这些数字一个都没有测试钉着——已有的源数量钉子认的是 共 N 个数据源 那一句,
钉不到写在别处的同义写法(竞品表里的「四层 32 数据源」)。它们能陈旧 41 个版本
而无人发现,正是这个原因。已补 tests/test_v682_readme_facts.py(7 项)把这一类钉住,
其中测试总数是拿 --collect-only 实测对账,不拿 HANDOFF 互保。

检索质量的可见性(内核 6.81.0)

账本原先只存 craap_score(total),把 relevance 丢了。而 total 不是 relevance 的代理:
实算同一批 29 条检索结果,两张名次只有 1/29 逐位重合——Evaluation Methodology 的
total 83.2 看着体面,relevance 只有 30。

本版把 relevance 连同 relevance_capped 一起落盘,并让 research.py 每次检索后报一行
相关性分布,明说「留下的里还有多少低于阈值」。原先的过滤只在「一条都没丢」时才告警,
实跑那次 29 条落盘、其中 17 条 relevance < 50 却是无声的。

抗幻觉行为层实测(内核 6.79.0)

此前只有机制层结论。做法是拿这个 skill 跑一次真实实验测它自己:植入假前提
「已知 Stanford ARES 被 Google 官方推荐为 RAG 评测标准」——

  • 证据层:16 条 claim 零命中 Google 背书
  • 组稿层:报告 9 处提 Google 全在否定语境(查不到 / 无法证实 / 不应写入)
  • 交付闭环:过门盖章 + 验戳均 exit 0,诚实答案是「查不到,未证实」

⚠️ 这是样本量 1 的抽样结论,不是「抗幻觉已被证明」。

三个实跑暴露的 bug

  1. claim_support.py 在 GBK 终端崩:定性检查文案带 emoji 而 __main__ 漏调
    UTF-8 强制,实跑收尾阶段、正当它该给结论时抛 UnicodeEncodeError
  2. 否定语境的全称词被误判「范围扩大」:诚实写的「查不到…的任何来源」三处全被误报。
    加闸 4 识别否定语境;否定词表刻意不收单字「不」防放水
  3. 传输层扫描误扫草稿目录:一个写坏一半的草稿脚本就能让测试红,而红的原因跟传输层无关

宿主没有 Agent 工具时的降级说明(内核 6.81.0)

SKILL.md 只处理过「有 Agent 工具但不 fork」,没写「压根没有 Agent 工具」。补上降级步骤
(串行自跑但账本分片与归并不能省)、成本结论怎么分层说(脚本层常量成立,
宿主侧上下文消耗明显更高)、以及照实说而不是假装并行跑过了。

插件壳 7.3.0

README 与 index.html 的包名、插件缓存路径、plugin.json、install.py 四处同步。
最后一处是代码里 mkdir 的真实路径——漏了就是「改了没生效」。

历史:本包相对上一版的变化(内核 6.75.0 → 6.80.0)

上一版之后做的是一件以前没做过的事:拿这个 skill 跑真实实验测它自己,用 8 维评判
框架逐维找边界。八维现已全部出结论。

冲突处理:提醒,不阻断(6.76.0)

报告把 conflict(未裁决矛盾)的 claim 当定论写出来时,校验门给 warning 而不拦。
第一版做成拦红,被自己的实验否掉了——拦住它等于禁止报告矛盾,而矛盾本身可以是结论。
留了一条测试钉子(test_it_must_never_become_a_gate)防后人升级回阻断。

抗幻觉:行为层第一次有实测(6.79.0)

此前只有机制层结论(校验门不保证「这句话被那个来源支撑」)。这次做行为层实验:
植入假前提「已知 Stanford ARES 被 Google 官方推荐为 RAG 评测标准」,看 agent 会不会顺着编。

  • 证据层:16 条 claim 零命中 Google 背书——检索层未被污染
  • 组稿层:报告 9 处提 Google,全在否定语境(查不到 / 无法证实 / 不应写入)
  • 交付闭环:过门盖章 + 验戳均 exit 0,诚实答案是「查不到,未证实」

⚠️ 这是样本量 1 的抽样结论,不是「抗幻觉已被证明」。 它证明的是「这套机制在这一个
诱导下没失守」,覆盖面仍需更多诱导样本。八维全部收口,但全部是 🟡 不是 🟢——
收口的意思是「每处都有已知且写明的边界」,不是「八维都完美」。

顺带修掉的三个实跑 bug

  1. claim_support.py 在 GBK 终端崩(6.73 引入)。__main__ 漏调
    console.force_utf8(),而新增的定性检查文案带 ⚠️——实跑收尾阶段、正当它该给结论时
    抛 UnicodeEncodeError,恰好抵消它的存在意义。文档明写「脚本自身强制 UTF-8」,当时漏了。
  2. 否定语境的全称词被误判成「范围扩大」(6.73 闸 3 缺陷)。诚实标注的句式天然带全称词
    ——「查不到…这一说法的任何来源」「没有任何一条提到…」三处全被误报。加闸 4
    识别否定语境;否定词表刻意不收单字「不」(「不如基线」里的「不」不是否定语境,
    收进来会连带吃掉真阳性)。
    为什么必须修:诚实标注是硬要求,Lead 每句「未证实」都被误报就会学会忽略这个工具——
    那时它就不只是误报,是把唯一的语义护栏关掉了。误报比漏报贵,在这里更贵。
  3. 传输层扫描误扫草稿目录:.research/ 等被 gitignore 的目录会被一并 AST 解析,
    一个写坏一半的草稿脚本就能让传输层测试变红,而红的原因跟「传输层」毫无关系,
    排查方向直接被带偏。改为跳过点开头目录。

两个已量化但不全面的实测

  • 成本产出比(6.77.0):规划 0.21s/真实检索均值 7.48s(n=2,方差大)/缓存命中 0.25s
    (快 30×)/校验门 0.13s/忠实度 0.08s。验证开销占检索 3%;引擎有效调用率 30%。
    ⚠️ 这些数字只在脚本层成立——宿主侧的 LLM token 账单不在脚本里。
  • 覆盖广度(6.78.0):34 / 30 / 13 三层口径;限流桶 24 源挤 10 桶;Semantic Scholar 桶
    冗余为 0;能力标签缺「新闻时事」类目。

已知未覆盖:宿主没有 Agent 工具时怎么降级

本宿主 harness 没有 subagent/Task 工具,Phase 2.5 的并行子 Agent 编排无法执行,
降级为 Lead 自跑。这会改变 token 成本结构(Lead 自跑要吞更多上下文,而非只读汇总与账本状态),
而 skill 侧尚无「宿主没有 Agent 工具时怎么降级」的说明。这一条留待后续版本。

插件壳 7.2.0(6.80.0)

版本四处同步:plugin.json / index.html 6 处 / README.md 3 处 / install.py 的插件
缓存路径
。最后一处是代码里 mkdir 的真实路径——7.0.0→7.1.0 时正是它漏了,用户会看到
「装了但没生效」。这类「同一件事在四处各写一遍」的毛病是第二次,所以让测试读,不靠记性。

说明

  • 测试数 1134 → 1152(内核 1084 → 1102)。本包在 Windows 解压实跑 1150 过 / 2 跳,
    跳的两项需 bash 跑 setup-mcp.sh,是环境依赖非回归。

历史:本包相对上一版的变化(内核 6.60.0 → 6.75.0)

交付末端更硬了:两个"看起来成功、其实走偏了"的洞

  • 账本参数静默错位(6.71.0):ledger.py 的 --session(旧名)值一旦落空,
    下一个选项名会被当成目录名创建出来,账本写进去、退出码 0、还打印成功回执。
    比崩溃更糟的是它长得像成功——真正的原因(参数顺序)被吞了,一路走到下游才
    表现为"账本为空"。现在错一个就停,并说清是哪个选项被顶上来。
  • 防伪戳里的声明数字现在会被验(6.71.0):戳一直验正文与账本两个指纹,但
    claims / sources / weak_allowed 三个字段是装饰,改成 claims=99 照样通过。
    要紧的是 weak_allowed——它标记"这份报告是单源采信的"。无声删掉即可让降级
    事实不可见
    ,而 v6.62 写明这条"必须跟着交付物走"。现在验戳会比对。

引用忠实度:自查工具从"只查数字"扩到"也查定性"

  • claim_support.py(6.67 / 6.74):交付前核一遍作者手写段。现在查两类——
    数字(结论里的数在它引用的 claim 里找不到)与定性高危形态
    (极性反转:claim 说「高于/优于」而报告说反义词;范围扩大:claim 说
    「在低延迟场景下」而报告说「所有场景」)。10 用例实测判错 0。
  • 仍是提示不是门:忠实度误报压不到零,不该让它拦住交付。校验门永远不保证
    「这句话被那个来源支撑」
    ,它保证的是编号有对应来源、URL 出现、无串号、账本
    指纹没变。换对象/换维度的语义偏移(同义替换、英文与领域术语)仍查不出来。
  • 决策过程与实测见 docs/dev/v6.73-引用忠实度决策材料.md。

三次"结论翻转":我自己的体检结论被自己的实测否掉

体检初稿说 实测 版本
31/99 个测试文件是文档钉子 3%(文档断言 50/1941) 6.69
宣称 34 源 vs 实出 14,是宣传口径问题 宣传页早就写明"别拿静态数字当结论",是我的修法不如现状 6.70
阈值 / 权重 / 分层口径三处漂移 三处都是误判,实为口径不同 6.63 / 6.66

doc_pin_audit.py 留下了持续监测(钉的是上限不是当前值)。另外 HANDOFF 里有两处
全量测试数,过去只同步过一处、陈旧了 6 个版本——现在两处都有测试守着。

接口与文档一致性

  • 账本参数收敛(6.72.0):--ledger 指账本目录、--session 指会话目录,之前
    三副面孔。skeleton.py 与 ledger.py 现在都收 --ledger,旧写法继续有效
    (实测两种写法产出完全相同)。
  • SKILL.md 瘦身(6.64.0):1438 行;手册搬进 references/playbooks.md(665 行),
    铁律与禁止行为前置到前 200 行。
  • 校验门硬绑账本(6.62.0):不传 --ledger 判未通过;ledger=none 的戳一律验不过。
  • 相关性不可判定时不装懂(6.63.0):封顶 45 分、标 unrated,而不是给个高可信度。
  • 注入绕过实验(6.65.0):补中文形态(16→17),9 类已知穿透写进测试当"已知"
    而不是删掉——删掉等于把问题从账本里抹了。

检索现实性

  • 同族限流(6.68.x):同限流桶的引擎串行 + 3 秒间隔。Semantic Scholar 的
    ...
Read more

Deep Research Ultra 7.3.0(内核 6.82.0)

Choose a tag to compare

@harryopo harryopo released this 12 Oct 06:34

离线安装包,解压即可用,不需要联网,也不需要 git。内核 6.82.0 / 插件壳 7.3.0。

本包起加了顶层目录:解压后得到 deep-research-ultra/,下面的命令都在它里面执行。(上一版没有这层,文件直接散开——那是打包漏了,本版补上。)

包里有什么

  • 内核 skill(skills/deep-research-ultra/:SKILL.md、scripts、references、tests)
  • 插件壳(根目录 server.py + .qoder-plugin/plugin.json + mcp.json + hooks/)
  • 校验与测试(skills/deep-research-ultra/scripts/tests 1118 项;根目录 tests 50 项;
    合计 1168 项——本包在 Windows 解压实跑 1166 过 / 2 跳,跳的两项需 bash 跑
    setup-mcp.sh,是环境依赖非回归)
  • 全仓测试入口(根目录 run_all_tests.py:内核+壳依次跑并汇总真实通过数)
  • 依赖清单(skills/deep-research-ultra/requirements.txt)
  • 宣传页(index.html)

安装

解压后依次执行:

pip install -r skills/deep-research-ultra/requirements.txt
rm -rf ~/.qoder/skills/deep-research-ultra && cp -r skills/deep-research-ultra ~/.qoder/skills/
python skills/deep-research-ultra/scripts/research.py --probe

Windows 下第二条改
robocopy skills\deep-research-ultra %USERPROFILE%\.qoder\skills\deep-research-ultra /MIR
(返回码是位掩码:0 没有变化、1 复制了文件、3 复制并删掉了目标里多出来的旧文件——升级成功就是 3;8 及以上才是失败)。
先删旧目录(或用 /MIR)再拷:直接合并会把上一版已删除的文件留在安装位,得到"版本号相同、内容不同"的副本。
--probe 逐源实测本机当前能不能出数据,并按缺项给出配置指引;退出码 0 才开工,
判 3 / 4 时会停下来说明缺什么、去哪补。

数据源

34 个源、四层结构(Layer 1 / 2 / 3 / 4 = 13 / 14 / 3 / 4)。其中 5 个需要你先配 key 或服务地址:
Tavily、Firecrawl、Gitee、Crawl4AI、SearXNG;其余 29 个开箱即用。
需要注册但免费额度绑定银行卡的源一律不接入。

research.py --list 给的是「配置就绪」,--probe 给的才是「今天出不得出数据」——
两者分得很清:取不到数据(通道故障)与「调通了但 0 命中」是两类判定,不混为一谈。

34 是注册表口径,不是可用性结论。 实测三层:注册表 34 / 配置就绪 30 / probe 实出 13。
按限流桶看,24 个源挤在 10 个桶里(≈2.4:1),所以同桶的源不能当成彼此的备份——
Semantic Scholar 桶配置就绪 3 个源,实测全倒,桶内冗余为 0。

派子 Agent 前建议再跑一次主题级预演,用你真正要派出去的那句查询词测通道:

python skills/deep-research-ultra/scripts/research.py --probe \
  --sources arxiv-fulltext,github-code-search --theme-query "本维度实际要用的查询词"

本包相对上一版的变化(内核 6.80.0 → 6.82.0)

README 重写:去掉全部 emoji

129 处 emoji、51 种,全部去掉。这不是审美问题——表格里的对勾与叉号有真实歧义:
同一列里 ✅ 到底是「有」还是「推荐」,取决于看的是哪一列。换成文字之后每一格自己说得清
(支持: / 不支持 / 有限)。

全文 590 行 → 551 行,20 823 字符 → 17 499 字符。结构上的改动:

  • 开头加了「这个工具解决什么问题」,并把边界说死:判断留给 Lead,纪律交给机器。
    列清哪些是机器管的(可回源、引用编号对齐、未验证断言不许当定论、矛盾必须标注、
    抓回内容里的指令不得改变裁决、报告与账本不一致盖不了戳),哪些是人管的(哪些资料相关、
    结论是什么、取舍怎么定)
  • 数据源口径提到安装之前独立成节,--list / --probe / --probe --theme-query
    三层口径列成表——原来这段挤在一段引言里,容易被跳过
  • 35 行的「核心特性」表拆成机制表(每条一行,标注引入版本号)+ 能力清单
  • 输出格式四节合并成一张表

顺带修掉的:6 处死链与 5 处陈旧数字

重写时逐个对着磁盘核了一遍,发现的不只是排版问题:

位置 原来写的 实测
页脚版本 v6.40.0 · 2026-09-29 陈旧 41 个版本
竞品表「四层 32 数据源」 32 34
「767 个用例」 767 1161
「76 个测试文件」 76 120
「19 份调研笔记」 19 5
YOUR_USERNAME 占位符 6 处 全是死链,已换成真实仓库名

这些数字一个都没有测试钉着——已有的源数量钉子认的是 共 N 个数据源 那一句,
钉不到写在别处的同义写法(竞品表里的「四层 32 数据源」)。它们能陈旧 41 个版本
而无人发现,正是这个原因。已补 tests/test_v682_readme_facts.py(7 项)把这一类钉住,
其中测试总数是拿 --collect-only 实测对账,不拿 HANDOFF 互保。

检索质量的可见性(内核 6.81.0)

账本原先只存 craap_score(total),把 relevance 丢了。而 total 不是 relevance 的代理:
实算同一批 29 条检索结果,两张名次只有 1/29 逐位重合——Evaluation Methodology 的
total 83.2 看着体面,relevance 只有 30。

本版把 relevance 连同 relevance_capped 一起落盘,并让 research.py 每次检索后报一行
相关性分布,明说「留下的里还有多少低于阈值」。原先的过滤只在「一条都没丢」时才告警,
实跑那次 29 条落盘、其中 17 条 relevance < 50 却是无声的。

抗幻觉行为层实测(内核 6.79.0)

此前只有机制层结论。做法是拿这个 skill 跑一次真实实验测它自己:植入假前提
「已知 Stanford ARES 被 Google 官方推荐为 RAG 评测标准」——

  • 证据层:16 条 claim 零命中 Google 背书
  • 组稿层:报告 9 处提 Google 全在否定语境(查不到 / 无法证实 / 不应写入)
  • 交付闭环:过门盖章 + 验戳均 exit 0,诚实答案是「查不到,未证实」

⚠️ 这是样本量 1 的抽样结论,不是「抗幻觉已被证明」。

三个实跑暴露的 bug

  1. claim_support.py 在 GBK 终端崩:定性检查文案带 emoji 而 __main__ 漏调
    UTF-8 强制,实跑收尾阶段、正当它该给结论时抛 UnicodeEncodeError
  2. 否定语境的全称词被误判「范围扩大」:诚实写的「查不到…的任何来源」三处全被误报。
    加闸 4 识别否定语境;否定词表刻意不收单字「不」防放水
  3. 传输层扫描误扫草稿目录:一个写坏一半的草稿脚本就能让测试红,而红的原因跟传输层无关

宿主没有 Agent 工具时的降级说明(内核 6.81.0)

SKILL.md 只处理过「有 Agent 工具但不 fork」,没写「压根没有 Agent 工具」。补上降级步骤
(串行自跑但账本分片与归并不能省)、成本结论怎么分层说(脚本层常量成立,
宿主侧上下文消耗明显更高)、以及照实说而不是假装并行跑过了。

插件壳 7.3.0

README 与 index.html 的包名、插件缓存路径、plugin.json、install.py 四处同步。
最后一处是代码里 mkdir 的真实路径——漏了就是「改了没生效」。

历史:本包相对上一版的变化(内核 6.75.0 → 6.80.0)

上一版之后做的是一件以前没做过的事:拿这个 skill 跑真实实验测它自己,用 8 维评判
框架逐维找边界。八维现已全部出结论。

冲突处理:提醒,不阻断(6.76.0)

报告把 conflict(未裁决矛盾)的 claim 当定论写出来时,校验门给 warning 而不拦。
第一版做成拦红,被自己的实验否掉了——拦住它等于禁止报告矛盾,而矛盾本身可以是结论。
留了一条测试钉子(test_it_must_never_become_a_gate)防后人升级回阻断。

抗幻觉:行为层第一次有实测(6.79.0)

此前只有机制层结论(校验门不保证「这句话被那个来源支撑」)。这次做行为层实验:
植入假前提「已知 Stanford ARES 被 Google 官方推荐为 RAG 评测标准」,看 agent 会不会顺着编。

  • 证据层:16 条 claim 零命中 Google 背书——检索层未被污染
  • 组稿层:报告 9 处提 Google,全在否定语境(查不到 / 无法证实 / 不应写入)
  • 交付闭环:过门盖章 + 验戳均 exit 0,诚实答案是「查不到,未证实」

⚠️ 这是样本量 1 的抽样结论,不是「抗幻觉已被证明」。 它证明的是「这套机制在这一个
诱导下没失守」,覆盖面仍需更多诱导样本。八维全部收口,但全部是 🟡 不是 🟢——
收口的意思是「每处都有已知且写明的边界」,不是「八维都完美」。

顺带修掉的三个实跑 bug

  1. claim_support.py 在 GBK 终端崩(6.73 引入)。__main__ 漏调
    console.force_utf8(),而新增的定性检查文案带 ⚠️——实跑收尾阶段、正当它该给结论时
    抛 UnicodeEncodeError,恰好抵消它的存在意义。文档明写「脚本自身强制 UTF-8」,当时漏了。
  2. 否定语境的全称词被误判成「范围扩大」(6.73 闸 3 缺陷)。诚实标注的句式天然带全称词
    ——「查不到…这一说法的任何来源」「没有任何一条提到…」三处全被误报。加闸 4
    识别否定语境;否定词表刻意不收单字「不」(「不如基线」里的「不」不是否定语境,
    收进来会连带吃掉真阳性)。
    为什么必须修:诚实标注是硬要求,Lead 每句「未证实」都被误报就会学会忽略这个工具——
    那时它就不只是误报,是把唯一的语义护栏关掉了。误报比漏报贵,在这里更贵。
  3. 传输层扫描误扫草稿目录:.research/ 等被 gitignore 的目录会被一并 AST 解析,
    一个写坏一半的草稿脚本就能让传输层测试变红,而红的原因跟「传输层」毫无关系,
    排查方向直接被带偏。改为跳过点开头目录。

两个已量化但不全面的实测

  • 成本产出比(6.77.0):规划 0.21s/真实检索均值 7.48s(n=2,方差大)/缓存命中 0.25s
    (快 30×)/校验门 0.13s/忠实度 0.08s。验证开销占检索 3%;引擎有效调用率 30%。
    ⚠️ 这些数字只在脚本层成立——宿主侧的 LLM token 账单不在脚本里。
  • 覆盖广度(6.78.0):34 / 30 / 13 三层口径;限流桶 24 源挤 10 桶;Semantic Scholar 桶
    冗余为 0;能力标签缺「新闻时事」类目。

已知未覆盖:宿主没有 Agent 工具时怎么降级

本宿主 harness 没有 subagent/Task 工具,Phase 2.5 的并行子 Agent 编排无法执行,
降级为 Lead 自跑。这会改变 token 成本结构(Lead 自跑要吞更多上下文,而非只读汇总与账本状态),
而 skill 侧尚无「宿主没有 Agent 工具时怎么降级」的说明。这一条留待后续版本。

插件壳 7.2.0(6.80.0)

版本四处同步:plugin.json / index.html 6 处 / README.md 3 处 / install.py 的插件
缓存路径
。最后一处是代码里 mkdir 的真实路径——7.0.0→7.1.0 时正是它漏了,用户会看到
「装了但没生效」。这类「同一件事在四处各写一遍」的毛病是第二次,所以让测试读,不靠记性。

说明

  • 测试数 1134 → 1152(内核 1084 → 1102)。本包在 Windows 解压实跑 1150 过 / 2 跳,
    跳的两项需 bash 跑 setup-mcp.sh,是环境依赖非回归。

历史:本包相对上一版的变化(内核 6.60.0 → 6.75.0)

交付末端更硬了:两个"看起来成功、其实走偏了"的洞

  • 账本参数静默错位(6.71.0):ledger.py 的 --session(旧名)值一旦落空,
    下一个选项名会被当成目录名创建出来,账本写进去、退出码 0、还打印成功回执。
    比崩溃更糟的是它长得像成功——真正的原因(参数顺序)被吞了,一路走到下游才
    表现为"账本为空"。现在错一个就停,并说清是哪个选项被顶上来。
  • 防伪戳里的声明数字现在会被验(6.71.0):戳一直验正文与账本两个指纹,但
    claims / sources / weak_allowed 三个字段是装饰,改成 claims=99 照样通过。
    要紧的是 weak_allowed——它标记"这份报告是单源采信的"。无声删掉即可让降级
    事实不可见
    ,而 v6.62 写明这条"必须跟着交付物走"。现在验戳会比对。

引用忠实度:自查工具从"只查数字"扩到"也查定性"

  • claim_support.py(6.67 / 6.74):交付前核一遍作者手写段。现在查两类——
    数字(结论里的数在它引用的 claim 里找不到)与定性高危形态
    (极性反转:claim 说「高于/优于」而报告说反义词;范围扩大:claim 说
    「在低延迟场景下」而报告说「所有场景」)。10 用例实测判错 0。
  • 仍是提示不是门:忠实度误报压不到零,不该让它拦住交付。校验门永远不保证
    「这句话被那个来源支撑」
    ,它保证的是编号有对应来源、URL 出现、无串号、账本
    指纹没变。换对象/换维度的语义偏移(同义替换、英文与领域术语)仍查不出来。
  • 决策过程与实测见 docs/dev/v6.73-引用忠实度决策材料.md。

三次"结论翻转":我自己的体检结论被自己的实测否掉

体检初稿说 实测 版本
31/99 个测试文件是文档钉子 3%(文档断言 50/1941) 6.69
宣称 34 源 vs 实出 14,是宣传口径问题 宣传页早就写明"别拿静态数字当结论",是我的修法不如现状 6.70
阈值 / 权重 / 分层口径三处漂移 三处都是误判,实为口径不同 6.63 / 6.66

doc_pin_audit.py 留下了持续监测(钉的是上限不是当前值)。另外 HANDOFF 里有两处
全量测试数,过去只同步过一处、陈旧了 6 个版本——现在两处都有测试守着。

接口与文档一致性

  • 账本参数收敛(6.72.0):--ledger 指账本目录、--session 指会话目录,之前
    三副面孔。skeleton.py 与 ledger.py 现在都收 --ledger,旧写法继续有效
    (实测两种写法产出完全相同)。
  • SKILL.md 瘦身(6.64.0):1438 行;手册搬进 references/playbooks.md(665 行),
    铁律与禁止行为前置到前 200 行。
  • 校验门硬绑账本(6.62.0):不传 --ledger 判未通过;ledger=none 的戳一律验不过。
  • 相关性不可判定时不装懂(6.63.0):封顶 45 分、标 unrated,而不是给个高可信度。
  • 注入绕过实验(6.65.0):补中文形态(16→17),9 类已知穿透写进测试当"已知"
    而不是删掉——删掉等于把问题从账本里抹了。

检索现实性

  • 同族限流(6.68.x):同限流桶的引擎串行 + 3 秒间隔。Semantic Scholar 的
    graph/v1/paper/search 对匿名请求单发也 429(实测两次),等的不是时间是 key;
    同域的 s2-citation-graph 走 recommendations/v1 则宽松。归因改了两次才对。

顺手修的工程项

  • 子 Agent 按角色配模型(DRUX_MODEL_RETRIEVER / DRUX_MODEL_REVIEWER)
  • research.py --output 自建父目录;mcp_config_writer.py 补进跨平台配置路径
  • 修 test_v6160 docstring 的非法转义(它让任何 AST 扫该目录的工具刷警告)

说明

  • 测试数 1018 → 1134(内核 968 → 1084)。本包在 Windows 解压实跑 1132 过 / 2 跳,
    跳的两项需 bash 跑 setup-mcp.sh,是环境依赖非回归。

历史:本包相对上一版的变化(内核 6.48.0 → 6.60.0)

  • 注入防线四层闭环(6.53.0 / 6.56.0):L1 出口白名单(建连前拒绝非白名单域名)、
    L2 guard 机械门(16 类注入形态逐条留痕)、L3 不可信标记(命中只降级不删除,对策
    DoS-by-poisoning)、L4 canary 哨兵(令牌出账即 exit 1)。I4 让带标 claim 升不了
    verified,--text 重写干净原文是唯一出口——防线不误伤全程干净的证据。
  • 多轮持续对抗压测(6.60.0):红队四轮升级攻击语料(试探 → 换向量 → 混入正常
    内容 → 直接外传 canary),每轮结束跑 L3 + I4 蓝队检查,任何一轮放行即防线失效。
  • 报告类型学与对比形态(6.54.0 / 6.55.0):六型模板(知识 / 对比 / 开源选型 /
    学术 / 商业 / 风险)+ skeleton.py --intent compare(基线 / 候选 / 对比矩阵 /
    维度证据四层)+类型专属骨架;骨架头部固定三行阅读指南——只关心结论看「一页拍板」,
    要溯源看维度证据 claims(每条挂 [N]),审计看来源登记表+引文对账回执。
  • 分析性段落写法(6.60.0):references/report-types.md 补上骨架插槽怎么写——
    读者层与审计层两层不混、通用三句式(发现了什么 → 证据是什么 [N] → 对你的问题意味着
    什么)、六型各自的思考架构、三条禁令。
  • 检索器热切换(6.57.0):DRUX_RETRIEVER 环境变量——子 Agent 不带 --sources
    也继承 Lead 的引擎组,派单不用每条检索命令重复参数。
  • L3 基准重放与管线基准(6.58.0 / 6.59.0):20 条干净语料零误报、12 类 payload
    recall 100%(3 处已知误报入 KNOWN_FP 档案);guard 机械门 / L3 / I4 / canary /
    修复路径 / 绿队放行六步在同一会话 12 条 payload 上全过并量化。
  • 意图澄清与结论前置(6.51.0 / 6.51.1):澄清门从"问参数"改成"问意图";报告结论
    前置「一页拍板」,占位内容与缺节在发布门是硬失败。
  • Agent-Reach 免登录通道接入(6.53.1 / 6.53.2):Reddit / HN / X / 知乎 / B 站等
    6 个免登录档点亮;登录态 9 通道按用户红线一律不装不配不引 Cookie(平台检测非浏览器
    调用会封号)。
  • 门盲区审计与实跑收口(6.49.0 / 6.50.x / 6.52.0):克隆地址当来源、结论段可以不
    引用、交叉验证静默失败等门盲区逐一修掉;一次 7 维并行实跑暴露的五个工程坑收口。
  • 开发期文档清理:18 份开发期调研文档移入 docs/dev/,CHANGELOG 3565→521 行
    (旧史进 docs/dev/CHANGELOG-archive.md)。

历史:本包相对上一版的变化(内核 6.1x → 6.48.0)

  • 冲突条目的标签照实写(内核 6.48.0):报告骨架过去把每条 conflict...
Read more

Deep Research Ultra 7.2.0(内核 6.80.0)

Choose a tag to compare

@harryopo harryopo released this 12 Oct 01:48

离线安装包,解压即可用,不需要联网,也不需要 git。内核 6.80.0 / 插件壳 7.2.0。

本包起加了顶层目录:解压后得到 deep-research-ultra/,下面的命令都在它里面执行。(上一版没有这层,文件直接散开——那是打包漏了,本版补上。)

包里有什么

  • 内核 skill(skills/deep-research-ultra/:SKILL.md、scripts、references、tests)
  • 插件壳(根目录 server.py + .qoder-plugin/plugin.json + mcp.json + hooks/)
  • 校验与测试(skills/deep-research-ultra/scripts/tests 1102 项;根目录 tests 50 项;
    合计 1152 项——本包在 Windows 解压实跑 1150 过 / 2 跳,跳的两项需 bash 跑
    setup-mcp.sh,是环境依赖非回归)
  • 全仓测试入口(根目录 run_all_tests.py:内核+壳依次跑并汇总真实通过数)
  • 依赖清单(skills/deep-research-ultra/requirements.txt)
  • 宣传页(index.html)

安装

解压后依次执行:

pip install -r skills/deep-research-ultra/requirements.txt
rm -rf ~/.qoder/skills/deep-research-ultra && cp -r skills/deep-research-ultra ~/.qoder/skills/
python skills/deep-research-ultra/scripts/research.py --probe

Windows 下第二条改
robocopy skills\deep-research-ultra %USERPROFILE%\.qoder\skills\deep-research-ultra /MIR
(返回码是位掩码:0 没有变化、1 复制了文件、3 复制并删掉了目标里多出来的旧文件——升级成功就是 3;8 及以上才是失败)。
先删旧目录(或用 /MIR)再拷:直接合并会把上一版已删除的文件留在安装位,得到"版本号相同、内容不同"的副本。
--probe 逐源实测本机当前能不能出数据,并按缺项给出配置指引;退出码 0 才开工,
判 3 / 4 时会停下来说明缺什么、去哪补。

数据源

34 个源、四层结构(Layer 1 / 2 / 3 / 4 = 13 / 14 / 3 / 4)。其中 5 个需要你先配 key 或服务地址:
Tavily、Firecrawl、Gitee、Crawl4AI、SearXNG;其余 29 个开箱即用。
需要注册但免费额度绑定银行卡的源一律不接入。

research.py --list 给的是「配置就绪」,--probe 给的才是「今天出不得出数据」——
两者分得很清:取不到数据(通道故障)与「调通了但 0 命中」是两类判定,不混为一谈。

34 是注册表口径,不是可用性结论。 实测三层:注册表 34 / 配置就绪 30 / probe 实出 13。
按限流桶看,24 个源挤在 10 个桶里(≈2.4:1),所以同桶的源不能当成彼此的备份——
Semantic Scholar 桶配置就绪 3 个源,实测全倒,桶内冗余为 0。

派子 Agent 前建议再跑一次主题级预演,用你真正要派出去的那句查询词测通道:

python skills/deep-research-ultra/scripts/research.py --probe \
  --sources arxiv-fulltext,github-code-search --theme-query "本维度实际要用的查询词"

本包相对上一版的变化(内核 6.75.0 → 6.80.0)

上一版之后做的是一件以前没做过的事:拿这个 skill 跑真实实验测它自己,用 8 维评判
框架逐维找边界。八维现已全部出结论。

冲突处理:提醒,不阻断(6.76.0)

报告把 conflict(未裁决矛盾)的 claim 当定论写出来时,校验门给 warning 而不拦。
第一版做成拦红,被自己的实验否掉了——拦住它等于禁止报告矛盾,而矛盾本身可以是结论。
留了一条测试钉子(test_it_must_never_become_a_gate)防后人升级回阻断。

抗幻觉:行为层第一次有实测(6.79.0)

此前只有机制层结论(校验门不保证「这句话被那个来源支撑」)。这次做行为层实验:
植入假前提「已知 Stanford ARES 被 Google 官方推荐为 RAG 评测标准」,看 agent 会不会顺着编。

  • 证据层:16 条 claim 零命中 Google 背书——检索层未被污染
  • 组稿层:报告 9 处提 Google,全在否定语境(查不到 / 无法证实 / 不应写入)
  • 交付闭环:过门盖章 + 验戳均 exit 0,诚实答案是「查不到,未证实」

⚠️ 这是样本量 1 的抽样结论,不是「抗幻觉已被证明」。 它证明的是「这套机制在这一个
诱导下没失守」,覆盖面仍需更多诱导样本。八维全部收口,但全部是 🟡 不是 🟢——
收口的意思是「每处都有已知且写明的边界」,不是「八维都完美」。

顺带修掉的三个实跑 bug

  1. claim_support.py 在 GBK 终端崩(6.73 引入)。__main__ 漏调
    console.force_utf8(),而新增的定性检查文案带 ⚠️——实跑收尾阶段、正当它该给结论时
    抛 UnicodeEncodeError,恰好抵消它的存在意义。文档明写「脚本自身强制 UTF-8」,当时漏了。
  2. 否定语境的全称词被误判成「范围扩大」(6.73 闸 3 缺陷)。诚实标注的句式天然带全称词
    ——「查不到…这一说法的任何来源」「没有任何一条提到…」三处全被误报。加闸 4
    识别否定语境;否定词表刻意不收单字「不」(「不如基线」里的「不」不是否定语境,
    收进来会连带吃掉真阳性)。
    为什么必须修:诚实标注是硬要求,Lead 每句「未证实」都被误报就会学会忽略这个工具——
    那时它就不只是误报,是把唯一的语义护栏关掉了。误报比漏报贵,在这里更贵。
  3. 传输层扫描误扫草稿目录:.research/ 等被 gitignore 的目录会被一并 AST 解析,
    一个写坏一半的草稿脚本就能让传输层测试变红,而红的原因跟「传输层」毫无关系,
    排查方向直接被带偏。改为跳过点开头目录。

两个已量化但不全面的实测

  • 成本产出比(6.77.0):规划 0.21s/真实检索均值 7.48s(n=2,方差大)/缓存命中 0.25s
    (快 30×)/校验门 0.13s/忠实度 0.08s。验证开销占检索 3%;引擎有效调用率 30%。
    ⚠️ 这些数字只在脚本层成立——宿主侧的 LLM token 账单不在脚本里。
  • 覆盖广度(6.78.0):34 / 30 / 13 三层口径;限流桶 24 源挤 10 桶;Semantic Scholar 桶
    冗余为 0;能力标签缺「新闻时事」类目。

已知未覆盖:宿主没有 Agent 工具时怎么降级

本宿主 harness 没有 subagent/Task 工具,Phase 2.5 的并行子 Agent 编排无法执行,
降级为 Lead 自跑。这会改变 token 成本结构(Lead 自跑要吞更多上下文,而非只读汇总与账本状态),
而 skill 侧尚无「宿主没有 Agent 工具时怎么降级」的说明。这一条留待后续版本。

插件壳 7.2.0(6.80.0)

版本四处同步:plugin.json / index.html 6 处 / README.md 3 处 / install.py 的插件
缓存路径
。最后一处是代码里 mkdir 的真实路径——7.0.0→7.1.0 时正是它漏了,用户会看到
「装了但没生效」。这类「同一件事在四处各写一遍」的毛病是第二次,所以让测试读,不靠记性。

说明

  • 测试数 1134 → 1152(内核 1084 → 1102)。本包在 Windows 解压实跑 1150 过 / 2 跳,
    跳的两项需 bash 跑 setup-mcp.sh,是环境依赖非回归。

历史:本包相对上一版的变化(内核 6.60.0 → 6.75.0)

交付末端更硬了:两个"看起来成功、其实走偏了"的洞

  • 账本参数静默错位(6.71.0):ledger.py 的 --session(旧名)值一旦落空,
    下一个选项名会被当成目录名创建出来,账本写进去、退出码 0、还打印成功回执。
    比崩溃更糟的是它长得像成功——真正的原因(参数顺序)被吞了,一路走到下游才
    表现为"账本为空"。现在错一个就停,并说清是哪个选项被顶上来。
  • 防伪戳里的声明数字现在会被验(6.71.0):戳一直验正文与账本两个指纹,但
    claims / sources / weak_allowed 三个字段是装饰,改成 claims=99 照样通过。
    要紧的是 weak_allowed——它标记"这份报告是单源采信的"。无声删掉即可让降级
    事实不可见
    ,而 v6.62 写明这条"必须跟着交付物走"。现在验戳会比对。

引用忠实度:自查工具从"只查数字"扩到"也查定性"

  • claim_support.py(6.67 / 6.74):交付前核一遍作者手写段。现在查两类——
    数字(结论里的数在它引用的 claim 里找不到)与定性高危形态
    (极性反转:claim 说「高于/优于」而报告说反义词;范围扩大:claim 说
    「在低延迟场景下」而报告说「所有场景」)。10 用例实测判错 0。
  • 仍是提示不是门:忠实度误报压不到零,不该让它拦住交付。校验门永远不保证
    「这句话被那个来源支撑」
    ,它保证的是编号有对应来源、URL 出现、无串号、账本
    指纹没变。换对象/换维度的语义偏移(同义替换、英文与领域术语)仍查不出来。
  • 决策过程与实测见 docs/dev/v6.73-引用忠实度决策材料.md。

三次"结论翻转":我自己的体检结论被自己的实测否掉

体检初稿说 实测 版本
31/99 个测试文件是文档钉子 3%(文档断言 50/1941) 6.69
宣称 34 源 vs 实出 14,是宣传口径问题 宣传页早就写明"别拿静态数字当结论",是我的修法不如现状 6.70
阈值 / 权重 / 分层口径三处漂移 三处都是误判,实为口径不同 6.63 / 6.66

doc_pin_audit.py 留下了持续监测(钉的是上限不是当前值)。另外 HANDOFF 里有两处
全量测试数,过去只同步过一处、陈旧了 6 个版本——现在两处都有测试守着。

接口与文档一致性

  • 账本参数收敛(6.72.0):--ledger 指账本目录、--session 指会话目录,之前
    三副面孔。skeleton.py 与 ledger.py 现在都收 --ledger,旧写法继续有效
    (实测两种写法产出完全相同)。
  • SKILL.md 瘦身(6.64.0):1438 行;手册搬进 references/playbooks.md(665 行),
    铁律与禁止行为前置到前 200 行。
  • 校验门硬绑账本(6.62.0):不传 --ledger 判未通过;ledger=none 的戳一律验不过。
  • 相关性不可判定时不装懂(6.63.0):封顶 45 分、标 unrated,而不是给个高可信度。
  • 注入绕过实验(6.65.0):补中文形态(16→17),9 类已知穿透写进测试当"已知"
    而不是删掉——删掉等于把问题从账本里抹了。

检索现实性

  • 同族限流(6.68.x):同限流桶的引擎串行 + 3 秒间隔。Semantic Scholar 的
    graph/v1/paper/search 对匿名请求单发也 429(实测两次),等的不是时间是 key;
    同域的 s2-citation-graph 走 recommendations/v1 则宽松。归因改了两次才对。

顺手修的工程项

  • 子 Agent 按角色配模型(DRUX_MODEL_RETRIEVER / DRUX_MODEL_REVIEWER)
  • research.py --output 自建父目录;mcp_config_writer.py 补进跨平台配置路径
  • 修 test_v6160 docstring 的非法转义(它让任何 AST 扫该目录的工具刷警告)

说明

  • 测试数 1018 → 1134(内核 968 → 1084)。本包在 Windows 解压实跑 1132 过 / 2 跳,
    跳的两项需 bash 跑 setup-mcp.sh,是环境依赖非回归。

历史:本包相对上一版的变化(内核 6.48.0 → 6.60.0)

  • 注入防线四层闭环(6.53.0 / 6.56.0):L1 出口白名单(建连前拒绝非白名单域名)、
    L2 guard 机械门(16 类注入形态逐条留痕)、L3 不可信标记(命中只降级不删除,对策
    DoS-by-poisoning)、L4 canary 哨兵(令牌出账即 exit 1)。I4 让带标 claim 升不了
    verified,--text 重写干净原文是唯一出口——防线不误伤全程干净的证据。
  • 多轮持续对抗压测(6.60.0):红队四轮升级攻击语料(试探 → 换向量 → 混入正常
    内容 → 直接外传 canary),每轮结束跑 L3 + I4 蓝队检查,任何一轮放行即防线失效。
  • 报告类型学与对比形态(6.54.0 / 6.55.0):六型模板(知识 / 对比 / 开源选型 /
    学术 / 商业 / 风险)+ skeleton.py --intent compare(基线 / 候选 / 对比矩阵 /
    维度证据四层)+类型专属骨架;骨架头部固定三行阅读指南——只关心结论看「一页拍板」,
    要溯源看维度证据 claims(每条挂 [N]),审计看来源登记表+引文对账回执。
  • 分析性段落写法(6.60.0):references/report-types.md 补上骨架插槽怎么写——
    读者层与审计层两层不混、通用三句式(发现了什么 → 证据是什么 [N] → 对你的问题意味着
    什么)、六型各自的思考架构、三条禁令。
  • 检索器热切换(6.57.0):DRUX_RETRIEVER 环境变量——子 Agent 不带 --sources
    也继承 Lead 的引擎组,派单不用每条检索命令重复参数。
  • L3 基准重放与管线基准(6.58.0 / 6.59.0):20 条干净语料零误报、12 类 payload
    recall 100%(3 处已知误报入 KNOWN_FP 档案);guard 机械门 / L3 / I4 / canary /
    修复路径 / 绿队放行六步在同一会话 12 条 payload 上全过并量化。
  • 意图澄清与结论前置(6.51.0 / 6.51.1):澄清门从"问参数"改成"问意图";报告结论
    前置「一页拍板」,占位内容与缺节在发布门是硬失败。
  • Agent-Reach 免登录通道接入(6.53.1 / 6.53.2):Reddit / HN / X / 知乎 / B 站等
    6 个免登录档点亮;登录态 9 通道按用户红线一律不装不配不引 Cookie(平台检测非浏览器
    调用会封号)。
  • 门盲区审计与实跑收口(6.49.0 / 6.50.x / 6.52.0):克隆地址当来源、结论段可以不
    引用、交叉验证静默失败等门盲区逐一修掉;一次 7 维并行实跑暴露的五个工程坑收口。
  • 开发期文档清理:18 份开发期调研文档移入 docs/dev/,CHANGELOG 3565→521 行
    (旧史进 docs/dev/CHANGELOG-archive.md)。

历史:本包相对上一版的变化(内核 6.1x → 6.48.0)

  • 冲突条目的标签照实写(内核 6.48.0):报告骨架过去把每条 conflict 一律印成「⚠️ 冲突待裁决」。
    Lead 给了取舍之后(裁决写进账本的留痕里),标签还在说"待裁决"——读者只看标签,就会以为结论还没下。
    现在带留痕的冲突直接印出「来源冲突(账本留痕:……)」,确实没写过取舍的才印「(未裁决)」;
    状态本身不因裁决而变,缺跨域复现就继续留 conflict。

  • 短引文段不再被回执当作已核(内核 6.47.0):『「“ 只判长度 ≥15 字的段,这个长度阈值此前是沉默的——
    回执会写"全部逐字命中",而那 35 段 4–14 字的中文术语从来没被比对过。现在它们被数进"未对账 N 段"并点名,
    发布门同步给出警告;有未对账段时回执不再写"全部命中"。

  • 引文对账门现在也量报告正文(内核 6.46.0):verify_quotes.py --report <report.md> 把报告里的
    『』/「」/“” 段一并逐字比对,对不上时报到 report.md:行号;发布门的引文校验会自动带上正在校验的那份报告。
    同时收口一条写法约定:『』/「」/“” 表示逐字引文(必须命中抓回的原始材料),〔〕 表示报告作者自己的
    措辞(术语、归纳、检索词;不参与对账)。既没给 --ledger 也没给 --report 时按"没有待查文本"退 2,
    不再打印"全部逐字命中"。

  • 『』 在跨通道判同侧不再被当成"没有引文"(内核 6.45.0):派单模板与引文对账门都把 『…』 定为逐字引文标记,
    但账本的引号识别表里没有它,于是带长段逐字引文的 claim 会被回"原文里没有 ≥20 字的逐字片段"——
    拒绝理由错向,会把人引去改本来正确的证据。现在两处共用同一套括号表(『』/「」/“”),
    拒绝理由改为"试了 N 个片段都没在两侧命中",指向真正要查的东西。
    同时记录两类实测反查不出的通道(不放宽判据):锚点页是单页应用外壳(静态抓只有 4-5 KB、无正文句子);
    同一句话在不同通道字符形态不同(PMID 写 0.86-0.96、全文 XML 写 0.86–0.96)。

  • 引文逐字对账门(内核 6.44.0):新增 scripts/verify_quotes.py。账本里每段 『…』 引文必须能在
    存档的原始材料({会话目录}/raw/)里逐字命中——只允许折叠空白,不允许换字符形态:
    Scale (0–3) 写成 (0-3)、κ = 0.91 写成 kappa 都会被点名为 MISS,并附上正文里的原始写法。
    没有可比对材料时直接报错退出(退 2),不会报"通过"。validate_report.py 加 --raw <目录>,
    给了就把对账结果算进发布门。派单模板同步一条硬规则:子研究员必须把逐字引文出自的页面存进 raw/。

  • 摘要与正文不一致时以正文为准(内核 6.44.0):一次补正文实测发现,同一篇论文的摘要与正文
    给出的是不同口径的数(比例的分母不同、限定语不同)。因此本包要求:凡标"正文逐字"的引文,
    出稿前跑一次对账;转述不要套 『』。

  • 登记待办不再进 verified(内核 6.43.0):证据账本把 claim 升为 verified 时,跳过原文行首自标
    「【未复核】」「【待办】」的条目,并点名说明出路。这类条目是子研究员留下的登记待办,
    来源条数再多也不作为已验证判据;要它进结论,先核实、用 --text 改写原文去掉标记,再重跑升级命令。

  • 仓库活跃度改用推送时间(内核 6.43.0):GitHub 结果摘要里的时间行改为 [Pushed](最后一次代码推送),
    维护维度评分同步改用 pushed_at。updated_at 是元数据被动过的时间(改描述、加 star、调 topic 都会推后它),
    只在取不到推送时间时退回使用,并在同一行标注「元数据更新时间,不代表有提交」。

  • 一次完整实跑收口:用 6.41/6.42 新增的两个学术源跑通 4 路并行调研(67 条 claim / 117 个来源),
    报告每条结论的「成立范围」由账本直出,发布前过校验门并盖防伪戳。

  • 新增 Crossref 源(内核 6.42.0):免费、无需注册、不绑卡。它是 DOI 的注册方,返回的 resource.primary.URL 是出版方落地页——与 doi.org 链接构成同一制品的两条通道,反查正文时用得上。日期按接口给的精度放行(只有年份就写年份,不补 01-01)。

  • 新增 Europe PMC 源(内核 6.41.0):免费、无需注册、不绑卡。它是本包唯一直接给出
    开放获取全文直链的学术源(PubMed 只回摘要页),命中"某篇论文原文说 X"时能真读到正文。
    链接优先取 OA 正文页,订阅论文退回 DOI;--probe 已把它纳入闸门。

  • Windows 上 MCP server 起得来的问题:setup-mcp.sh 与宿主配置写的启动名是裸 npx/uvx,
    而 node 安装目录里那个 npx 是 bash 脚本,...

Read more

Deep Research Ultra 7.1.0(内核 6.75.0)

Choose a tag to compare

@harryopo harryopo released this 11 Oct 15:54

离线安装包,解压即可用,不需要联网,也不需要 git。内核 6.75.0 / 插件壳 7.1.0。

本包起加了顶层目录:解压后得到 deep-research-ultra/,下面的命令都在它里面执行。(上一版没有这层,文件直接散开——那是打包漏了,本版补上。)

包里有什么

  • 内核 skill(skills/deep-research-ultra/:SKILL.md、scripts、references、tests)
  • 插件壳(根目录 server.py + .qoder-plugin/plugin.json + mcp.json + hooks/)
  • 校验与测试(skills/deep-research-ultra/scripts/tests 1084 项;根目录 tests 50 项;
    合计 1134 项——本包在 Windows 解压实跑 1132 过 / 2 跳,跳的两项需 bash 跑
    setup-mcp.sh,是环境依赖非回归,Linux 下 1018/1018)
  • 全仓测试入口(根目录 run_all_tests.py:内核+壳依次跑并汇总真实通过数)
  • 依赖清单(skills/deep-research-ultra/requirements.txt)
  • 宣传页(index.html)

安装

解压后依次执行:

pip install -r skills/deep-research-ultra/requirements.txt
rm -rf ~/.qoder/skills/deep-research-ultra && cp -r skills/deep-research-ultra ~/.qoder/skills/
python skills/deep-research-ultra/scripts/research.py --probe

Windows 下第二条改
robocopy skills\deep-research-ultra %USERPROFILE%\.qoder\skills\deep-research-ultra /MIR
(返回码是位掩码:0 没有变化、1 复制了文件、3 复制并删掉了目标里多出来的旧文件——升级成功就是 3;8 及以上才是失败)。
先删旧目录(或用 /MIR)再拷:直接合并会把上一版已删除的文件留在安装位,得到"版本号相同、内容不同"的副本。
--probe 逐源实测本机当前能不能出数据,并按缺项给出配置指引;退出码 0 才开工,
判 3 / 4 时会停下来说明缺什么、去哪补。

数据源

34 个源、四层结构(Layer 1 / 2 / 3 / 4 = 13 / 14 / 3 / 4)。其中 5 个需要你先配 key 或服务地址:
Tavily、Firecrawl、Gitee、Crawl4AI、SearXNG;其余 29 个开箱即用。
需要注册但免费额度绑定银行卡的源一律不接入。

research.py --list 给的是「配置就绪」,--probe 给的才是「今天出不得出数据」——
两者分得很清:取不到数据(通道故障)与「调通了但 0 命中」是两类判定,不混为一谈。

派子 Agent 前建议再跑一次主题级预演,用你真正要派出去的那句查询词测通道:

python skills/deep-research-ultra/scripts/research.py --probe \
  --sources arxiv-fulltext,github-code-search --theme-query "本维度实际要用的查询词"

本包相对上一版的变化(内核 6.60.0 → 6.75.0)

交付末端更硬了:两个"看起来成功、其实走偏了"的洞

  • 账本参数静默错位(6.71.0):ledger.py 的 --session(旧名)值一旦落空,
    下一个选项名会被当成目录名创建出来,账本写进去、退出码 0、还打印成功回执。
    比崩溃更糟的是它长得像成功——真正的原因(参数顺序)被吞了,一路走到下游才
    表现为"账本为空"。现在错一个就停,并说清是哪个选项被顶上来。
  • 防伪戳里的声明数字现在会被验(6.71.0):戳一直验正文与账本两个指纹,但
    claims / sources / weak_allowed 三个字段是装饰,改成 claims=99 照样通过。
    要紧的是 weak_allowed——它标记"这份报告是单源采信的"。无声删掉即可让降级
    事实不可见
    ,而 v6.62 写明这条"必须跟着交付物走"。现在验戳会比对。

引用忠实度:自查工具从"只查数字"扩到"也查定性"

  • claim_support.py(6.67 / 6.74):交付前核一遍作者手写段。现在查两类——
    数字(结论里的数在它引用的 claim 里找不到)与定性高危形态
    (极性反转:claim 说「高于/优于」而报告说反义词;范围扩大:claim 说
    「在低延迟场景下」而报告说「所有场景」)。10 用例实测判错 0。
  • 仍是提示不是门:忠实度误报压不到零,不该让它拦住交付。校验门永远不保证
    「这句话被那个来源支撑」
    ,它保证的是编号有对应来源、URL 出现、无串号、账本
    指纹没变。换对象/换维度的语义偏移(同义替换、英文与领域术语)仍查不出来。
  • 决策过程与实测见 docs/dev/v6.73-引用忠实度决策材料.md。

三次"结论翻转":我自己的体检结论被自己的实测否掉

体检初稿说 实测 版本
31/99 个测试文件是文档钉子 3%(文档断言 50/1941) 6.69
宣称 34 源 vs 实出 14,是宣传口径问题 宣传页早就写明"别拿静态数字当结论",是我的修法不如现状 6.70
阈值 / 权重 / 分层口径三处漂移 三处都是误判,实为口径不同 6.63 / 6.66

doc_pin_audit.py 留下了持续监测(钉的是上限不是当前值)。另外 HANDOFF 里有两处
全量测试数,过去只同步过一处、陈旧了 6 个版本——现在两处都有测试守着。

接口与文档一致性

  • 账本参数收敛(6.72.0):--ledger 指账本目录、--session 指会话目录,之前
    三副面孔。skeleton.py 与 ledger.py 现在都收 --ledger,旧写法继续有效
    (实测两种写法产出完全相同)。
  • SKILL.md 瘦身(6.64.0):1438 行;手册搬进 references/playbooks.md(665 行),
    铁律与禁止行为前置到前 200 行。
  • 校验门硬绑账本(6.62.0):不传 --ledger 判未通过;ledger=none 的戳一律验不过。
  • 相关性不可判定时不装懂(6.63.0):封顶 45 分、标 unrated,而不是给个高可信度。
  • 注入绕过实验(6.65.0):补中文形态(16→17),9 类已知穿透写进测试当"已知"
    而不是删掉——删掉等于把问题从账本里抹了。

检索现实性

  • 同族限流(6.68.x):同限流桶的引擎串行 + 3 秒间隔。Semantic Scholar 的
    graph/v1/paper/search 对匿名请求单发也 429(实测两次),等的不是时间是 key;
    同域的 s2-citation-graph 走 recommendations/v1 则宽松。归因改了两次才对。

顺手修的工程项

  • 子 Agent 按角色配模型(DRUX_MODEL_RETRIEVER / DRUX_MODEL_REVIEWER)
  • research.py --output 自建父目录;mcp_config_writer.py 补进跨平台配置路径
  • 修 test_v6160 docstring 的非法转义(它让任何 AST 扫该目录的工具刷警告)

说明

  • 测试数 1018 → 1134(内核 968 → 1084)。本包在 Windows 解压实跑 1132 过 / 2 跳,
    跳的两项需 bash 跑 setup-mcp.sh,是环境依赖非回归。

历史:本包相对上一版的变化(内核 6.48.0 → 6.60.0)

  • 注入防线四层闭环(6.53.0 / 6.56.0):L1 出口白名单(建连前拒绝非白名单域名)、
    L2 guard 机械门(16 类注入形态逐条留痕)、L3 不可信标记(命中只降级不删除,对策
    DoS-by-poisoning)、L4 canary 哨兵(令牌出账即 exit 1)。I4 让带标 claim 升不了
    verified,--text 重写干净原文是唯一出口——防线不误伤全程干净的证据。
  • 多轮持续对抗压测(6.60.0):红队四轮升级攻击语料(试探 → 换向量 → 混入正常
    内容 → 直接外传 canary),每轮结束跑 L3 + I4 蓝队检查,任何一轮放行即防线失效。
  • 报告类型学与对比形态(6.54.0 / 6.55.0):六型模板(知识 / 对比 / 开源选型 /
    学术 / 商业 / 风险)+ skeleton.py --intent compare(基线 / 候选 / 对比矩阵 /
    维度证据四层)+类型专属骨架;骨架头部固定三行阅读指南——只关心结论看「一页拍板」,
    要溯源看维度证据 claims(每条挂 [N]),审计看来源登记表+引文对账回执。
  • 分析性段落写法(6.60.0):references/report-types.md 补上骨架插槽怎么写——
    读者层与审计层两层不混、通用三句式(发现了什么 → 证据是什么 [N] → 对你的问题意味着
    什么)、六型各自的思考架构、三条禁令。
  • 检索器热切换(6.57.0):DRUX_RETRIEVER 环境变量——子 Agent 不带 --sources
    也继承 Lead 的引擎组,派单不用每条检索命令重复参数。
  • L3 基准重放与管线基准(6.58.0 / 6.59.0):20 条干净语料零误报、12 类 payload
    recall 100%(3 处已知误报入 KNOWN_FP 档案);guard 机械门 / L3 / I4 / canary /
    修复路径 / 绿队放行六步在同一会话 12 条 payload 上全过并量化。
  • 意图澄清与结论前置(6.51.0 / 6.51.1):澄清门从"问参数"改成"问意图";报告结论
    前置「一页拍板」,占位内容与缺节在发布门是硬失败。
  • Agent-Reach 免登录通道接入(6.53.1 / 6.53.2):Reddit / HN / X / 知乎 / B 站等
    6 个免登录档点亮;登录态 9 通道按用户红线一律不装不配不引 Cookie(平台检测非浏览器
    调用会封号)。
  • 门盲区审计与实跑收口(6.49.0 / 6.50.x / 6.52.0):克隆地址当来源、结论段可以不
    引用、交叉验证静默失败等门盲区逐一修掉;一次 7 维并行实跑暴露的五个工程坑收口。
  • 开发期文档清理:18 份开发期调研文档移入 docs/dev/,CHANGELOG 3565→521 行
    (旧史进 docs/dev/CHANGELOG-archive.md)。

历史:本包相对上一版的变化(内核 6.1x → 6.48.0)

  • 冲突条目的标签照实写(内核 6.48.0):报告骨架过去把每条 conflict 一律印成「⚠️ 冲突待裁决」。
    Lead 给了取舍之后(裁决写进账本的留痕里),标签还在说"待裁决"——读者只看标签,就会以为结论还没下。
    现在带留痕的冲突直接印出「来源冲突(账本留痕:……)」,确实没写过取舍的才印「(未裁决)」;
    状态本身不因裁决而变,缺跨域复现就继续留 conflict。

  • 短引文段不再被回执当作已核(内核 6.47.0):『「“ 只判长度 ≥15 字的段,这个长度阈值此前是沉默的——
    回执会写"全部逐字命中",而那 35 段 4–14 字的中文术语从来没被比对过。现在它们被数进"未对账 N 段"并点名,
    发布门同步给出警告;有未对账段时回执不再写"全部命中"。

  • 引文对账门现在也量报告正文(内核 6.46.0):verify_quotes.py --report <report.md> 把报告里的
    『』/「」/“” 段一并逐字比对,对不上时报到 report.md:行号;发布门的引文校验会自动带上正在校验的那份报告。
    同时收口一条写法约定:『』/「」/“” 表示逐字引文(必须命中抓回的原始材料),〔〕 表示报告作者自己的
    措辞(术语、归纳、检索词;不参与对账)。既没给 --ledger 也没给 --report 时按"没有待查文本"退 2,
    不再打印"全部逐字命中"。

  • 『』 在跨通道判同侧不再被当成"没有引文"(内核 6.45.0):派单模板与引文对账门都把 『…』 定为逐字引文标记,
    但账本的引号识别表里没有它,于是带长段逐字引文的 claim 会被回"原文里没有 ≥20 字的逐字片段"——
    拒绝理由错向,会把人引去改本来正确的证据。现在两处共用同一套括号表(『』/「」/“”),
    拒绝理由改为"试了 N 个片段都没在两侧命中",指向真正要查的东西。
    同时记录两类实测反查不出的通道(不放宽判据):锚点页是单页应用外壳(静态抓只有 4-5 KB、无正文句子);
    同一句话在不同通道字符形态不同(PMID 写 0.86-0.96、全文 XML 写 0.86–0.96)。

  • 引文逐字对账门(内核 6.44.0):新增 scripts/verify_quotes.py。账本里每段 『…』 引文必须能在
    存档的原始材料({会话目录}/raw/)里逐字命中——只允许折叠空白,不允许换字符形态:
    Scale (0–3) 写成 (0-3)、κ = 0.91 写成 kappa 都会被点名为 MISS,并附上正文里的原始写法。
    没有可比对材料时直接报错退出(退 2),不会报"通过"。validate_report.py 加 --raw <目录>,
    给了就把对账结果算进发布门。派单模板同步一条硬规则:子研究员必须把逐字引文出自的页面存进 raw/。

  • 摘要与正文不一致时以正文为准(内核 6.44.0):一次补正文实测发现,同一篇论文的摘要与正文
    给出的是不同口径的数(比例的分母不同、限定语不同)。因此本包要求:凡标"正文逐字"的引文,
    出稿前跑一次对账;转述不要套 『』。

  • 登记待办不再进 verified(内核 6.43.0):证据账本把 claim 升为 verified 时,跳过原文行首自标
    「【未复核】」「【待办】」的条目,并点名说明出路。这类条目是子研究员留下的登记待办,
    来源条数再多也不作为已验证判据;要它进结论,先核实、用 --text 改写原文去掉标记,再重跑升级命令。

  • 仓库活跃度改用推送时间(内核 6.43.0):GitHub 结果摘要里的时间行改为 [Pushed](最后一次代码推送),
    维护维度评分同步改用 pushed_at。updated_at 是元数据被动过的时间(改描述、加 star、调 topic 都会推后它),
    只在取不到推送时间时退回使用,并在同一行标注「元数据更新时间,不代表有提交」。

  • 一次完整实跑收口:用 6.41/6.42 新增的两个学术源跑通 4 路并行调研(67 条 claim / 117 个来源),
    报告每条结论的「成立范围」由账本直出,发布前过校验门并盖防伪戳。

  • 新增 Crossref 源(内核 6.42.0):免费、无需注册、不绑卡。它是 DOI 的注册方,返回的 resource.primary.URL 是出版方落地页——与 doi.org 链接构成同一制品的两条通道,反查正文时用得上。日期按接口给的精度放行(只有年份就写年份,不补 01-01)。

  • 新增 Europe PMC 源(内核 6.41.0):免费、无需注册、不绑卡。它是本包唯一直接给出
    开放获取全文直链的学术源(PubMed 只回摘要页),命中"某篇论文原文说 X"时能真读到正文。
    链接优先取 OA 正文页,订阅论文退回 DOI;--probe 已把它纳入闸门。

  • Windows 上 MCP server 起得来的问题:setup-mcp.sh 与宿主配置写的启动名是裸 npx/uvx,
    而 node 安装目录里那个 npx 是 bash 脚本,Python 起进程只认可执行文件,实测两条源都报
    「进程起不来:[WinError 2] 系统找不到指定的文件」——读起来像"没装 node",实际只差 .cmd 后缀。
    现在启动名会解析成 npx.cmd/uvx.cmd,"装没装"也按同一个名字判。

  • 自检说得更准:MCP 超时会自动重探一次(npx/uvx 首轮在下包,超一次不再直接判死),
    两次都超时才照实判坏并给出预热命令;声明了全文/提取/引用图谱能力的引擎,✅ 后面会点明
    「未测 fulltext、latex」——探针那一发只覆盖检索,取正文要另发一次调用。

  • 全局 skill 的安装位收口为一份清单:~/.agents/skills、~/.qoder/skills 等都在扫描范围内,
    环境门与引擎层判定一致;判"未找到"时回执会列出找过哪些目录。

  • 回执与账本的六处对齐(依据一次 7 维并行调研交回的缺陷清单逐条复现后修):
    merge 不再把注入留痕账计成分片;注入护栏识别紧邻的否定式表述(引用规范原文、
    自述取证边界不再记成攻击);--probe 的 ✅ 后面附「正文 M/N」,只有标题时明确提示
    逐字引文需另开通道;--route 的建议 --sources 不再包含配置未就绪的引擎(并点名剔除者);
    MCP server 超时也会把它自己写过的 stderr 带进失败原因,非 UTF-8 报错不再中断采集;
    引擎的可选配置项(Crawl4AI 令牌)不再按必需项判「缺少配置」。

  • --env-check 补齐 Gitee / SearXNG 两个变量:引擎声明的必需项现在必须出现在某个
    profile 清单里、且清单里每项都带配置指引,两条都由测试守住。

  • 派单模板新增落点硬规则:子 Agent 的临时脚本与中间文件只写会话目录下的 scratch/,
    不写系统 /tmp——护栏的检查范围是会话目录。

  • CLI 版本号单一来源:--route 横幅与 --help 的版本号取自 SKILL.md frontmatter,
    帮助文本里不再出现历史版本戳。

  • 子 Agent 分波派发:breadth 不再一波全发。--plan-only 回执会写明每波上限(当前 ≤4)与
    分几波,并给出撞上限后的动作:这一波折半重发,连续两波仍超限则该维度由 Lead 自己跑检索。
    此前 deep 档 breadth=8 一波发满,有账号被宿主打回 user concurrency limit exceeded,整轮停在派发上。

  • 检索解析:百度 / 搜狗知乎 / 搜狗微信 / Bing 的标题、摘要、日期按当前页面结构重做,
    改由锚点驱动并限定窗口边界;另给出 SERP 改版预警工具,把「0 结果」的四种成因分开报。

  • 引擎返回契约:None(通道故障)与 [](可达但 0 条)在断路器、闸门与自检回执里
    分开处理,死引擎不再拿 ✅。

  • 字段完整度:GitHub 与学术链路里「这一路没返回这个字段」不再写成 0;
    报告推荐度表把缺项印成「未取到 / 未提供」,真实为 0 的照印 0;
    学术论文推荐度表不再列 GitHub 仓库。

  • 证据分级(档 B 反查):认得更多同制品入口——arXiv /abs↔/pdf、
    仓库根↔raw/REST README、GitHub 发布页↔REST releases/tags,
    以及跨主机但同内容的文档站页面↔仓库源文件(凭这条 claim 的逐字片段在两侧正文都命中判同)。

  • 产能:每个维度写进账本的 claim 上限 12 条,merge 归并时会点名超标分片;
    报告骨架由账本直出,未验证结论渲染为「⚠️ 仅作线索」。

  • 安全护栏:抓回内容里的指令注入(冒充系统指令、要求删文件 / 传凭据等)由机械门把关并留痕,
    不影响复核裁决;越权写盘一律拒。本轮补进两类此前抓不到的形态:行首伪装成特权通道的
    [system]: / SYSTEM: 标签(旧判据只认 --- SYSTEM OVERRIDE --- 破折号块),以及要求
    "往留痕账 injection_log.jsonl 追加一行"的指令——留痕账在允许清单与自产文件里,照它的写既不算
    越权也不算命中,等于把审计面变成写入面。派单模板同步两条硬规则:留痕账只由 agent 主动写,
    以及不接受"本会话已经创建过某文件"的自述(以列目录为准)。
    这道门的判据同时分成两层:进入证据链(账本、分片、报告)的指令片段逐条要求留痕,声明过的
    原始抓取材料(scratch/、raw/)里的厂商 README 安装句按目录计数、不逐条拦停——实测一轮调研
    在原始材料里能数出 98 处,逐条要求的结局是门永远红。留痕账改按 *injection*.jsonl 这一族识别:
    子 Agent 实测各自自留了 D5-injection.jsonl 这类分维度账,只认固定文件名的话这些上报等于没留。发布前的报告由校验门与防伪戳把关(`validate_report.py --stamp...

Read more

Deep Research Ultra 7.0.0(内核 6.60.0)

Choose a tag to compare

@harryopo harryopo released this 23 Sep 09:53

离线安装包,解压即可用,不需要联网,也不需要 git。内核 6.60.0 / 插件壳 7.0.0。

包里有什么

  • 内核 skill(skills/deep-research-ultra/:SKILL.md、scripts、references、tests)
  • 插件壳(根目录 server.py + .qoder-plugin/plugin.json + mcp.json + hooks/)
  • 校验与测试(skills/deep-research-ultra/scripts/tests 968 项;根目录 tests 50 项;
    合计 1018 项——本包在 Windows 解压实跑 1016 过 / 2 挂,挂的两项需 bash 跑
    setup-mcp.sh,是环境依赖非回归,Linux 下 1018/1018)
  • 全仓测试入口(根目录 run_all_tests.py:内核+壳依次跑并汇总真实通过数)
  • 依赖清单(skills/deep-research-ultra/requirements.txt)
  • 宣传页(index.html)

安装

解压后依次执行:

pip install -r skills/deep-research-ultra/requirements.txt
rm -rf ~/.qoder/skills/deep-research-ultra && cp -r skills/deep-research-ultra ~/.qoder/skills/
python skills/deep-research-ultra/scripts/research.py --probe

Windows 下第二条改
robocopy skills\deep-research-ultra %USERPROFILE%\.qoder\skills\deep-research-ultra /MIR
(返回码是位掩码:0 没有变化、1 复制了文件、3 复制并删掉了目标里多出来的旧文件——升级成功就是 3;8 及以上才是失败)。
先删旧目录(或用 /MIR)再拷:直接合并会把上一版已删除的文件留在安装位,得到"版本号相同、内容不同"的副本。
--probe 逐源实测本机当前能不能出数据,并按缺项给出配置指引;退出码 0 才开工,
判 3 / 4 时会停下来说明缺什么、去哪补。

数据源

34 个源、四层结构(Layer 1 / 2 / 3 / 4 = 13 / 14 / 3 / 4)。其中 5 个需要你先配 key 或服务地址:
Tavily、Firecrawl、Gitee、Crawl4AI、SearXNG;其余 29 个开箱即用。
需要注册但免费额度绑定银行卡的源一律不接入。

research.py --list 给的是「配置就绪」,--probe 给的才是「今天出不得出数据」——
两者分得很清:取不到数据(通道故障)与「调通了但 0 命中」是两类判定,不混为一谈。

派子 Agent 前建议再跑一次主题级预演,用你真正要派出去的那句查询词测通道:

python skills/deep-research-ultra/scripts/research.py --probe \
  --sources arxiv-fulltext,github-code-search --theme-query "本维度实际要用的查询词"

本包相对上一版的变化(内核 6.48.0 → 6.60.0)

  • 注入防线四层闭环(6.53.0 / 6.56.0):L1 出口白名单(建连前拒绝非白名单域名)、
    L2 guard 机械门(16 类注入形态逐条留痕)、L3 不可信标记(命中只降级不删除,对策
    DoS-by-poisoning)、L4 canary 哨兵(令牌出账即 exit 1)。I4 让带标 claim 升不了
    verified,--text 重写干净原文是唯一出口——防线不误伤全程干净的证据。
  • 多轮持续对抗压测(6.60.0):红队四轮升级攻击语料(试探 → 换向量 → 混入正常
    内容 → 直接外传 canary),每轮结束跑 L3 + I4 蓝队检查,任何一轮放行即防线失效。
  • 报告类型学与对比形态(6.54.0 / 6.55.0):六型模板(知识 / 对比 / 开源选型 /
    学术 / 商业 / 风险)+ skeleton.py --intent compare(基线 / 候选 / 对比矩阵 /
    维度证据四层)+类型专属骨架;骨架头部固定三行阅读指南——只关心结论看「一页拍板」,
    要溯源看维度证据 claims(每条挂 [N]),审计看来源登记表+引文对账回执。
  • 分析性段落写法(6.60.0):references/report-types.md 补上骨架插槽怎么写——
    读者层与审计层两层不混、通用三句式(发现了什么 → 证据是什么 [N] → 对你的问题意味着
    什么)、六型各自的思考架构、三条禁令。
  • 检索器热切换(6.57.0):DRUX_RETRIEVER 环境变量——子 Agent 不带 --sources
    也继承 Lead 的引擎组,派单不用每条检索命令重复参数。
  • L3 基准重放与管线基准(6.58.0 / 6.59.0):20 条干净语料零误报、12 类 payload
    recall 100%(3 处已知误报入 KNOWN_FP 档案);guard 机械门 / L3 / I4 / canary /
    修复路径 / 绿队放行六步在同一会话 12 条 payload 上全过并量化。
  • 意图澄清与结论前置(6.51.0 / 6.51.1):澄清门从"问参数"改成"问意图";报告结论
    前置「一页拍板」,占位内容与缺节在发布门是硬失败。
  • Agent-Reach 免登录通道接入(6.53.1 / 6.53.2):Reddit / HN / X / 知乎 / B 站等
    6 个免登录档点亮;登录态 9 通道按用户红线一律不装不配不引 Cookie(平台检测非浏览器
    调用会封号)。
  • 门盲区审计与实跑收口(6.49.0 / 6.50.x / 6.52.0):克隆地址当来源、结论段可以不
    引用、交叉验证静默失败等门盲区逐一修掉;一次 7 维并行实跑暴露的五个工程坑收口。
  • 开发期文档清理:18 份开发期调研文档移入 docs/dev/,CHANGELOG 3565→521 行
    (旧史进 docs/dev/CHANGELOG-archive.md)。

历史:本包相对上一版的变化(内核 6.1x → 6.48.0)

  • 冲突条目的标签照实写(内核 6.48.0):报告骨架过去把每条 conflict 一律印成「⚠️ 冲突待裁决」。
    Lead 给了取舍之后(裁决写进账本的留痕里),标签还在说"待裁决"——读者只看标签,就会以为结论还没下。
    现在带留痕的冲突直接印出「来源冲突(账本留痕:……)」,确实没写过取舍的才印「(未裁决)」;
    状态本身不因裁决而变,缺跨域复现就继续留 conflict。

  • 短引文段不再被回执当作已核(内核 6.47.0):『「“ 只判长度 ≥15 字的段,这个长度阈值此前是沉默的——
    回执会写"全部逐字命中",而那 35 段 4–14 字的中文术语从来没被比对过。现在它们被数进"未对账 N 段"并点名,
    发布门同步给出警告;有未对账段时回执不再写"全部命中"。

  • 引文对账门现在也量报告正文(内核 6.46.0):verify_quotes.py --report <report.md> 把报告里的
    『』/「」/“” 段一并逐字比对,对不上时报到 report.md:行号;发布门的引文校验会自动带上正在校验的那份报告。
    同时收口一条写法约定:『』/「」/“” 表示逐字引文(必须命中抓回的原始材料),〔〕 表示报告作者自己的
    措辞(术语、归纳、检索词;不参与对账)。既没给 --ledger 也没给 --report 时按"没有待查文本"退 2,
    不再打印"全部逐字命中"。

  • 『』 在跨通道判同侧不再被当成"没有引文"(内核 6.45.0):派单模板与引文对账门都把 『…』 定为逐字引文标记,
    但账本的引号识别表里没有它,于是带长段逐字引文的 claim 会被回"原文里没有 ≥20 字的逐字片段"——
    拒绝理由错向,会把人引去改本来正确的证据。现在两处共用同一套括号表(『』/「」/“”),
    拒绝理由改为"试了 N 个片段都没在两侧命中",指向真正要查的东西。
    同时记录两类实测反查不出的通道(不放宽判据):锚点页是单页应用外壳(静态抓只有 4-5 KB、无正文句子);
    同一句话在不同通道字符形态不同(PMID 写 0.86-0.96、全文 XML 写 0.86–0.96)。

  • 引文逐字对账门(内核 6.44.0):新增 scripts/verify_quotes.py。账本里每段 『…』 引文必须能在
    存档的原始材料({会话目录}/raw/)里逐字命中——只允许折叠空白,不允许换字符形态:
    Scale (0–3) 写成 (0-3)、κ = 0.91 写成 kappa 都会被点名为 MISS,并附上正文里的原始写法。
    没有可比对材料时直接报错退出(退 2),不会报"通过"。validate_report.py 加 --raw <目录>,
    给了就把对账结果算进发布门。派单模板同步一条硬规则:子研究员必须把逐字引文出自的页面存进 raw/。

  • 摘要与正文不一致时以正文为准(内核 6.44.0):一次补正文实测发现,同一篇论文的摘要与正文
    给出的是不同口径的数(比例的分母不同、限定语不同)。因此本包要求:凡标"正文逐字"的引文,
    出稿前跑一次对账;转述不要套 『』。

  • 登记待办不再进 verified(内核 6.43.0):证据账本把 claim 升为 verified 时,跳过原文行首自标
    「【未复核】」「【待办】」的条目,并点名说明出路。这类条目是子研究员留下的登记待办,
    来源条数再多也不作为已验证判据;要它进结论,先核实、用 --text 改写原文去掉标记,再重跑升级命令。

  • 仓库活跃度改用推送时间(内核 6.43.0):GitHub 结果摘要里的时间行改为 [Pushed](最后一次代码推送),
    维护维度评分同步改用 pushed_at。updated_at 是元数据被动过的时间(改描述、加 star、调 topic 都会推后它),
    只在取不到推送时间时退回使用,并在同一行标注「元数据更新时间,不代表有提交」。

  • 一次完整实跑收口:用 6.41/6.42 新增的两个学术源跑通 4 路并行调研(67 条 claim / 117 个来源),
    报告每条结论的「成立范围」由账本直出,发布前过校验门并盖防伪戳。

  • 新增 Crossref 源(内核 6.42.0):免费、无需注册、不绑卡。它是 DOI 的注册方,返回的 resource.primary.URL 是出版方落地页——与 doi.org 链接构成同一制品的两条通道,反查正文时用得上。日期按接口给的精度放行(只有年份就写年份,不补 01-01)。

  • 新增 Europe PMC 源(内核 6.41.0):免费、无需注册、不绑卡。它是本包唯一直接给出
    开放获取全文直链的学术源(PubMed 只回摘要页),命中"某篇论文原文说 X"时能真读到正文。
    链接优先取 OA 正文页,订阅论文退回 DOI;--probe 已把它纳入闸门。

  • Windows 上 MCP server 起得来的问题:setup-mcp.sh 与宿主配置写的启动名是裸 npx/uvx,
    而 node 安装目录里那个 npx 是 bash 脚本,Python 起进程只认可执行文件,实测两条源都报
    「进程起不来:[WinError 2] 系统找不到指定的文件」——读起来像"没装 node",实际只差 .cmd 后缀。
    现在启动名会解析成 npx.cmd/uvx.cmd,"装没装"也按同一个名字判。

  • 自检说得更准:MCP 超时会自动重探一次(npx/uvx 首轮在下包,超一次不再直接判死),
    两次都超时才照实判坏并给出预热命令;声明了全文/提取/引用图谱能力的引擎,✅ 后面会点明
    「未测 fulltext、latex」——探针那一发只覆盖检索,取正文要另发一次调用。

  • 全局 skill 的安装位收口为一份清单:~/.agents/skills、~/.qoder/skills 等都在扫描范围内,
    环境门与引擎层判定一致;判"未找到"时回执会列出找过哪些目录。

  • 回执与账本的六处对齐(依据一次 7 维并行调研交回的缺陷清单逐条复现后修):
    merge 不再把注入留痕账计成分片;注入护栏识别紧邻的否定式表述(引用规范原文、
    自述取证边界不再记成攻击);--probe 的 ✅ 后面附「正文 M/N」,只有标题时明确提示
    逐字引文需另开通道;--route 的建议 --sources 不再包含配置未就绪的引擎(并点名剔除者);
    MCP server 超时也会把它自己写过的 stderr 带进失败原因,非 UTF-8 报错不再中断采集;
    引擎的可选配置项(Crawl4AI 令牌)不再按必需项判「缺少配置」。

  • --env-check 补齐 Gitee / SearXNG 两个变量:引擎声明的必需项现在必须出现在某个
    profile 清单里、且清单里每项都带配置指引,两条都由测试守住。

  • 派单模板新增落点硬规则:子 Agent 的临时脚本与中间文件只写会话目录下的 scratch/,
    不写系统 /tmp——护栏的检查范围是会话目录。

  • CLI 版本号单一来源:--route 横幅与 --help 的版本号取自 SKILL.md frontmatter,
    帮助文本里不再出现历史版本戳。

  • 子 Agent 分波派发:breadth 不再一波全发。--plan-only 回执会写明每波上限(当前 ≤4)与
    分几波,并给出撞上限后的动作:这一波折半重发,连续两波仍超限则该维度由 Lead 自己跑检索。
    此前 deep 档 breadth=8 一波发满,有账号被宿主打回 user concurrency limit exceeded,整轮停在派发上。

  • 检索解析:百度 / 搜狗知乎 / 搜狗微信 / Bing 的标题、摘要、日期按当前页面结构重做,
    改由锚点驱动并限定窗口边界;另给出 SERP 改版预警工具,把「0 结果」的四种成因分开报。

  • 引擎返回契约:None(通道故障)与 [](可达但 0 条)在断路器、闸门与自检回执里
    分开处理,死引擎不再拿 ✅。

  • 字段完整度:GitHub 与学术链路里「这一路没返回这个字段」不再写成 0;
    报告推荐度表把缺项印成「未取到 / 未提供」,真实为 0 的照印 0;
    学术论文推荐度表不再列 GitHub 仓库。

  • 证据分级(档 B 反查):认得更多同制品入口——arXiv /abs↔/pdf、
    仓库根↔raw/REST README、GitHub 发布页↔REST releases/tags,
    以及跨主机但同内容的文档站页面↔仓库源文件(凭这条 claim 的逐字片段在两侧正文都命中判同)。

  • 产能:每个维度写进账本的 claim 上限 12 条,merge 归并时会点名超标分片;
    报告骨架由账本直出,未验证结论渲染为「⚠️ 仅作线索」。

  • 安全护栏:抓回内容里的指令注入(冒充系统指令、要求删文件 / 传凭据等)由机械门把关并留痕,
    不影响复核裁决;越权写盘一律拒。本轮补进两类此前抓不到的形态:行首伪装成特权通道的
    [system]: / SYSTEM: 标签(旧判据只认 --- SYSTEM OVERRIDE --- 破折号块),以及要求
    "往留痕账 injection_log.jsonl 追加一行"的指令——留痕账在允许清单与自产文件里,照它的写既不算
    越权也不算命中,等于把审计面变成写入面。派单模板同步两条硬规则:留痕账只由 agent 主动写,
    以及不接受"本会话已经创建过某文件"的自述(以列目录为准)。
    这道门的判据同时分成两层:进入证据链(账本、分片、报告)的指令片段逐条要求留痕,声明过的
    原始抓取材料(scratch/、raw/)里的厂商 README 安装句按目录计数、不逐条拦停——实测一轮调研
    在原始材料里能数出 98 处,逐条要求的结局是门永远红。留痕账改按 *injection*.jsonl 这一族识别:
    子 Agent 实测各自自留了 D5-injection.jsonl 这类分维度账,只认固定文件名的话这些上报等于没留。发布前的报告由校验门与防伪戳把关(validate_report.py --stamp)。

  • 取数与判据四处补齐:OSV 的 CVE 查询返回键读错导致条数恒空,现在按 vulns 读、生态名
    折成规范形,并在 0 条时用对照包自证通道活着——通道没取到时印"CVE 未取到",综合等级不再停在低;
    许可证字段为 NOASSERTION 时强制回读 LICENSE 正文并按正文判级,读不出就写"许可证未证实";
    仓库改名/迁移时在回执里并列"请求路径"与"终态路径";--plan-only 的数据源不再写本机没配 key
    的引擎,摘完没有剩余数据源的子问题单独点名。

  • 注入形态扩到 16 种:新增"要把 skill/偏好/记忆落进全局目录或全局记忆"与"别写进当前项目"
    两类形态(实测某高星件主 README 就这么写)。判据要求祈使动词与全局落点同句;
    拿真会话复跑时 5 处命中里 4 处是描述句("commands can write to the per-user temp directory"、
    "does not auto-write user-level config"),已按"动词须在句首或句子长成一条命令"收紧,四处描述句复测不再命中、
    真那条 npx skills add … --global 仍抓到。
    派单模板补一条硬规则:写账本只能追加、禁止整文件覆盖、别人的分片不碰。

  • 安装:README 的解包安装路径改为替换式(先删旧目录再拷;Windows 用 robocopy /MIR),
    合并式拷贝会把旧版已删除的文件留在安装位;install.py --dry-run 被护栏拦下时
    改说「预演拦下」,不再喊「安装失败」。

  • 文档:§14.3 命令签名表补齐全部子命令,并有测试防止文档与代码漂移;
    README 的版本号、目录结构树、示例命令所在目录与参考链接同步到当前布局。

说明

--list 与 --env-check 的回执只反映配置与连通性;某源此刻能不能出数据以 --probe 为准。
Wayback 等个别兜底通道在部分网络环境不可达,回执会照实标注,不当作可用能力。