Repository navigation
Releases: harryopo/deep-research-ultra
Release list
Deep Research Ultra 7.4.0(内核 6.85.0)
离线安装包,解压即可用,不需要联网,也不需要 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/tests1137 项;根目录tests50 项;
合计 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 --probeWindows 下第二条改
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,诚实答案是「查不到,未证实」
三个实跑暴露的 bug
claim_support.py在 GBK 终端崩:定性检查文案带 emoji 而__main__漏调
UTF-8 强制,实跑收尾阶段、正当它该给结论时抛UnicodeEncodeError- 否定语境的全称词被误判「范围扩大」:诚实写的「查不到…的任何来源」三处全被误报。
加闸 4 识别否定语境;否定词表刻意不收单字「不」防放水 - 传输层扫描误扫草稿目录:一个写坏一半的草稿脚本就能让测试红,而红的原因跟传输层无关
宿主没有 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,诚实答案是「查不到,未证实」
诱导下没失守」,覆盖面仍需更多诱导样本。八维全部收口,但全部是 🟡 不是 🟢——
收口的意思是「每处都有已知且写明的边界」,不是「八维都完美」。
顺带修掉的三个实跑 bug
claim_support.py在 GBK 终端崩(6.73 引入)。__main__漏调
console.force_utf8(),而新增的定性检查文案带⚠️——实跑收尾阶段、正当它该给结论时
抛UnicodeEncodeError,恰好抵消它的存在意义。文档明写「脚本自身强制 UTF-8」,当时漏了。- 否定语境的全称词被误判成「范围扩大」(6.73 闸 3 缺陷)。诚实标注的句式天然带全称词
——「查不到…这一说法的任何来源」「没有任何一条提到…」三处全被误报。加闸 4
识别否定语境;否定词表刻意不收单字「不」(「不如基线」里的「不」不是否定语境,
收进来会连带吃掉真阳性)。
为什么必须修:诚实标注是硬要求,Lead 每句「未证实」都被误报就会学会忽略这个工具——
那时它就不只是误报,是把唯一的语义护栏关掉了。误报比漏报贵,在这里更贵。 - 传输层扫描误扫草稿目录:
.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 的
...
Deep Research Ultra 7.3.0(内核 6.82.0)
离线安装包,解压即可用,不需要联网,也不需要 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/tests1118 项;根目录tests50 项;
合计 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 --probeWindows 下第二条改
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,诚实答案是「查不到,未证实」
三个实跑暴露的 bug
claim_support.py在 GBK 终端崩:定性检查文案带 emoji 而__main__漏调
UTF-8 强制,实跑收尾阶段、正当它该给结论时抛UnicodeEncodeError- 否定语境的全称词被误判「范围扩大」:诚实写的「查不到…的任何来源」三处全被误报。
加闸 4 识别否定语境;否定词表刻意不收单字「不」防放水 - 传输层扫描误扫草稿目录:一个写坏一半的草稿脚本就能让测试红,而红的原因跟传输层无关
宿主没有 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,诚实答案是「查不到,未证实」
诱导下没失守」,覆盖面仍需更多诱导样本。八维全部收口,但全部是 🟡 不是 🟢——
收口的意思是「每处都有已知且写明的边界」,不是「八维都完美」。
顺带修掉的三个实跑 bug
claim_support.py在 GBK 终端崩(6.73 引入)。__main__漏调
console.force_utf8(),而新增的定性检查文案带⚠️——实跑收尾阶段、正当它该给结论时
抛UnicodeEncodeError,恰好抵消它的存在意义。文档明写「脚本自身强制 UTF-8」,当时漏了。- 否定语境的全称词被误判成「范围扩大」(6.73 闸 3 缺陷)。诚实标注的句式天然带全称词
——「查不到…这一说法的任何来源」「没有任何一条提到…」三处全被误报。加闸 4
识别否定语境;否定词表刻意不收单字「不」(「不如基线」里的「不」不是否定语境,
收进来会连带吃掉真阳性)。
为什么必须修:诚实标注是硬要求,Lead 每句「未证实」都被误报就会学会忽略这个工具——
那时它就不只是误报,是把唯一的语义护栏关掉了。误报比漏报贵,在这里更贵。 - 传输层扫描误扫草稿目录:
.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_v6160docstring 的非法转义(它让任何 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...
Deep Research Ultra 7.2.0(内核 6.80.0)
离线安装包,解压即可用,不需要联网,也不需要 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/tests1102 项;根目录tests50 项;
合计 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 --probeWindows 下第二条改
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,诚实答案是「查不到,未证实」
诱导下没失守」,覆盖面仍需更多诱导样本。八维全部收口,但全部是 🟡 不是 🟢——
收口的意思是「每处都有已知且写明的边界」,不是「八维都完美」。
顺带修掉的三个实跑 bug
claim_support.py在 GBK 终端崩(6.73 引入)。__main__漏调
console.force_utf8(),而新增的定性检查文案带⚠️——实跑收尾阶段、正当它该给结论时
抛UnicodeEncodeError,恰好抵消它的存在意义。文档明写「脚本自身强制 UTF-8」,当时漏了。- 否定语境的全称词被误判成「范围扩大」(6.73 闸 3 缺陷)。诚实标注的句式天然带全称词
——「查不到…这一说法的任何来源」「没有任何一条提到…」三处全被误报。加闸 4
识别否定语境;否定词表刻意不收单字「不」(「不如基线」里的「不」不是否定语境,
收进来会连带吃掉真阳性)。
为什么必须修:诚实标注是硬要求,Lead 每句「未证实」都被误报就会学会忽略这个工具——
那时它就不只是误报,是把唯一的语义护栏关掉了。误报比漏报贵,在这里更贵。 - 传输层扫描误扫草稿目录:
.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_v6160docstring 的非法转义(它让任何 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 脚本,...
Deep Research Ultra 7.1.0(内核 6.75.0)
离线安装包,解压即可用,不需要联网,也不需要 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/tests1084 项;根目录tests50 项;
合计 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 --probeWindows 下第二条改
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_v6160docstring 的非法转义(它让任何 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 发布页↔RESTreleases/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...
Deep Research Ultra 7.0.0(内核 6.60.0)
离线安装包,解压即可用,不需要联网,也不需要 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/tests968 项;根目录tests50 项;
合计 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 --probeWindows 下第二条改
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 发布页↔RESTreleases/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 等个别兜底通道在部分网络环境不可达,回执会照实标注,不当作可用能力。