安装
在 DeepSeek Harness 里通过 dsh-market 安装
dsh plugin --profile web add dshmarket
或使用命令行
dsh plugin --profile web add dsh-fact-check
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络。请先审阅源码,并尽量锁定 commit(github:owner/repo#sha)。
README
DeepSeek Harness 用的事实核查技能:不轻信模型自己的记忆,一律去公开互联网核实——多源交叉、 国内外信息生态并行、对抗性反查,最后交出一份结论先行、每条论断都可溯源的核查报告。
English → README.md
目录
它是什么
一个事实核查技能。给它一条传闻、一个数字、一则新闻或一句「这是不是真的」,它交回一份核查报告。 它与「直接问模型」的区别在于五条不允许跳过的铁律:
- 知识库禁用:即便模型「认为」自己知道答案,也必须先用搜索工具从互联网核实。搜索不可用时 如实报告「无法核实」,绝不用记忆顶替。
- 多源交叉:每个事实点至少要有 2~3 个相互独立的来源。多家媒体转载同一篇原始报道只算一个 来源,不是三个。
- 国内外并行:同一核查对象同时从国内、国外两套信息生态取证并分别呈现——很多信息只在某一侧出现。
- 对抗性核查:结论初步成型后,主动用反向/质疑关键词再搜一轮。找不到反证才给高置信度。
- 全部可溯源:每一个论断、数字、日期、引述都带完整 URL + 出处名称 + 具体引用位置。
输出是结论先行的报告,来源进编号附录;部分核实的内容被物理分档——「未证实」「无法裁定」 不会和「已证实」排在同一段里,所以一条没查清的东西没法被当成已定论引用。
运行前提
| 必需 | 一个能搜索公开互联网并且能抓取页面正文的 agent(抓取链任意一条可用即可)。没有搜索能力时,技能会报「无法核实」而不是猜。 |
| 推荐 | 批量/多引擎搜索、存档服务(Wayback)、用于并行取证的子代理机制。 |
| 可选 | Node.js ≥ 18(两个自带工具需要);TypeSafe Jev 密钥(判据层需要)。 |
技能正文不绑定任何产品、主机或工具链:它只写能力名,由 ADAPTING.md 把能力
落到你的环境里。
已验证宿主:DSH 0.1.7-rc.2 与 0.2.0-rc.2。 0.1.7-rc.2 于 2026-09-25 完整跑过一遍(Node 24.21.0,WSL/Linux):宿主能发现本技能并读入正文;
插件形态能挂到宿主自己的技能注册表上,source: bundled,描述取自 SKILL.md,get() 交出的正文
与 SKILL.md 逐字一致;npm run selftest 全过(插件挂载 27/27、jev-verdict 25/25、route 37/37);
route.mjs regress 离线 26/26;判据语料复现 MEASUREMENTS.md §6 的预期 ——
support 37/40、injection 11/12、provenance 15/16、usable_page 12/12、sufficient 24/40
(最后一条正是 §1 已写明「不要单用」的那条判据)。package.json 不声明宿主版本 —— engines 只留
node,写精确版本会让插件市场判「确认不兼容」并拦住其他所有宿主 —— 所以未列入的宿主是没验过,
而不是被禁止。
DSH 0.2.0-rc.2 于 2026-09-30 完整跑过一遍 —— 这次宿主真的升上来了(@deepseek-ai/dsh-desktop-runtime 0.2.0-rc.2、Node 24.12.0、Windows)。目录形态在上面是活的:运行中会话自己的技能目录里列着 fact-check,是宿主真实的 @deepseek-ai/dsh-skill-filesystem provider 从技能目录里扫出来的。仓库自带的工具在该宿主上对着真实判定模型重跑:npm run selftest 27/27、25/25、37/37;route.mjs regress 26/26;判据语料(需要密钥)—— support 37/40(Brier 0.0451)、injection 11/12(0.0369)、primary_source 15/16(0.0487)、usable_page 12/12(0.0031)—— 全部复现 MEASUREMENTS.md §6 的预期。实现技能注册表的那个宿主文件在 0.1.7-rc.2 与 0.2.0-rc.2 之间逐字节一致,所以无需改动、也确实一行未改。有一项仍停在 2026-09-29 那一轮的位置:插件形态没有在这台宿主上挂载 —— 那台机器跑的是目录形态,插件包并未安装 —— 它的证据仍是针对宿主自己已发布的 0.2.0-rc.2 包做的注册检查:挂到真实的 @deepseek-ai/dsh-skill 0.2.0-rc.2 注册表上,候选 rank 等于宿主自己导出的 BUNDLED_SKILL_RANK,get() 交出的正文与 SKILL.md 逐字一致(15/15);目录形态也在那里验证过同名合并以 rank 400 压过 bundled 的 600(6/6)。
安装
作为 DSH 插件
dsh plugin add dsh-fact-check
上面这条装的是已发布到 npm 的包——也就是插件市场优先采用的安装源。想直接从 GitHub 源码装,用
dsh plugin add github:7starsseeker/dsh-fact-check。
重启 DSH 后 fact-check 技能即出现在会话技能目录里。插件本体是一层很薄的接线——lib/index.js
把包自带的 SKILL.md 注册到 ctx.skills,每次加载都现读,所以改技能不需要改代码。它是
零运行时依赖(只用 node: 内置模块)。因为本 provider 注册在随包档位,你自己放在
~/.dsh/skills/fact-check 的那一份(用户档位)在同名冲突时仍然优先——装这个插件不会覆盖你的本地修改。
git clone https://github.com/7starsseeker/dsh-fact-check.git
dsh plugin add ./dsh-fact-check
把整个文件夹交给任何 AI 工具
把本目录(或它的 zip)交给你的 AI 工具,说一句「照 FOR-AI.md 做」即可——它会自己离线探测环境、
自己适配,不需要人做配置。吃 skill 的框架直接给 SKILL.md(带 frontmatter);吃纯指令的框架用生成的
INSTRUCTIONS.md。
工作方式
拆解核查项 → 并行搜索(国内 + 国外 + 垂直域 + 质疑词)
→ 抓取一手页面 → 交叉比对与来源分级 → 对抗性反查
→ 结论先行的报告:已证实 / 未证实 / 无法裁定 + 编号来源
另外附带两个可选的离线工具:
| 工具 | 做什么 |
|---|---|
node tools/route.mjs plan --task "…" |
确定性规划:这类核查该走哪条来源阶梯、哪些渠道,以及失败动作表。纯数据表,无模型、0 token。 |
node tools/jev-verdict.mjs |
下面说的判据客户端。 |
可选的 Jev 判据层
有三类判断天生是事实判断而非文风问题,本技能可以把它们交给 TypeSafe Jev(System One)决策模型, 而不是留给「裸推理」:
| 判断 | 问题类型 | 什么时候问 |
|---|---|---|
| 这批证据是否支持该论断 | 是/否 + 概率 | 交叉比对来源时 |
| 该来源是否一手 | 是/否 + 概率 | 给候选来源分级时 |
| 这个页面是否可用正文 | 是/否 + 概率 | 抓取之后——登录墙、验证码、JS 空壳不得计入证据 |
两件事是刻意的:
- 它是可选的。 没配密钥时,这三件事由
SKILL.md里写死的确定性规则执行,其余流程完全不变。 密钥可以来自tools/local.json、环境变量TYPESAFE_API_KEY,或tools/jev-verdict.mjs --key-file。 - 模型的判断只能降档,不能升档。 结论档位由确定性规则「独立来源数 → 档位」裁定;模型说「支持」 不会让任何东西升级。只有「证据不足」或「与证据矛盾」才触发动作。
每条判据的实测可靠性、喂给模型前的提示注入防御、以及复跑命令都在
MEASUREMENTS.md——包括一条刻意不问的判据,它的单题准确率实测只有 62.5%。
自己验一遍
下面每条都离线、不需要密钥、几秒跑完:
node tools/smoke-plugin.mjs # 插件挂载是否正确、是否真的在提供 SKILL.md
node tools/route.mjs selftest # 确定性路由表
node tools/route.mjs regress --file cases/route-cases-neutral.json
node tools/route.mjs arms # 派发臂代理指标(见 MEASUREMENTS §4.1)
node tools/jev-verdict.mjs selftest # 判据层回归断言
node tools/doctor.mjs # 这台机器能做什么、缺什么
node tools/doctor.mjs --net 会额外自测抓取链与判据端点,并报告缺哪些能力、缺了会降级成什么样。
本检出上的当前状态:27/27、25/25、37/37、26/26 断言全过。
CI 在 Linux 与 Windows 上、Node 18 与 22 下跑的就是上面这几条,另外多一条检查:生成的
INSTRUCTIONS.md 是否仍然与 SKILL.md 一致。
目录结构
| 路径 | 是什么 |
|---|---|
SKILL.md |
技能本体——流程与规则(唯一真相源) |
INSTRUCTIONS.md |
由 SKILL.md 生成,给吃纯指令的宿主 |
FOR-AI.md |
拿到本包的那个 AI 的任务书 |
ADAPTING.md |
换环境要改什么 |
MEASUREMENTS.md |
实测数字与复跑方法 |
CHANGELOG.md |
版本间净变化 |
RELEASING.md |
一次发布怎么发到 npm(OIDC,无长期 token) |
lib/index.js |
DSH 插件入口:把 SKILL.md 挂到 ctx.skills |
cordis.patch.yml |
bundle patch,让本包能被 dsh plugin add 安装 |
tools/ |
两个零依赖 Node 脚本、本机配置模板与数据表 |
cases/ |
去痕后的回归语料 |
submission/ |
投稿到插件市场的条目文件(不属于插件包本身) |
配置
主机相关的值——端点、密钥、你那台机器上哪些渠道真的能用——一律放 tools/local.json,它被 gitignore,
只分发 tools/local.example.json。代码与数据表里不写死任何主机路径、
端点或密钥,tools/*.mjs 里有断言专门守这条。
参与贡献
欢迎提 issue 与 PR——见 CONTRIBUTING.md。两条承重规则:技能正文是唯一真相源
(永远不要手改生成物,例如 INSTRUCTIONS.md);任何对判据层或路由表的改动都必须重跑回归,并把新数字
写回 MEASUREMENTS.md。
许可
评论
评论存放在 GitHub Discussions。用 GitHub 账号登录后可发表评论或点表情。