dsh-fact-check

skilltested: passnpmMIT

Skill that fact-checks a claim against the open web rather than model memory: it splits the claim into independently checkable fact points, routes each point to the primary-source ladder for its domain (policy, academic, medical, financial, disaster and accidents, food safety, science, education, sp

下载量 / Downloads
2,686
依赖体积 / node_modules
0.36 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-fact-check

Sandbox test results

StageResult
1 install✓
2 list✓
3 mount✓
4 boot—

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

dsh-fact-check

![version](https://github.com/7starsseeker/dsh-fact-check/tags)

![npm](https://www.npmjs.com/package/dsh-fact-check)

![npm downloads](https://www.npmjs.com/package/dsh-fact-check)

![selftest](https://github.com/7starsseeker/dsh-fact-check/actions/workflows/selftest.yml)

![license: MIT](./LICENSE)

![node](https://nodejs.org)

![DSH plugin](https://github.com/deepseek-ai/deepseek-harness)

![Awesome DSH Plugin](https://awesome-dsh-plugin.com)

![dependencies: 0](./package.json)

![last commit](https://github.com/7starsseeker/dsh-fact-check/commits/main)

![stars](https://github.com/7starsseeker/dsh-fact-check/stargazers)

![issues](https://github.com/7starsseeker/dsh-fact-check/issues)

![PRs welcome](./CONTRIBUTING.md)

![](https://github.com/deepseek-ai/deepseek-harness)

DeepSeek Harness 用的事实核查技能:不轻信模型自己的记忆,一律去公开互联网核实——多源交叉、
国内外信息生态并行、对抗性反查,最后交出一份结论先行、每条论断都可溯源的核查报告。

English → [README.md](./README.md)


目录

  • [它是什么](#它是什么)
  • [运行前提](#运行前提)
  • [安装](#安装)
  • [工作方式](#工作方式)
  • [可选的 Jev 判据层](#可选的-jev-判据层)
  • [自己验一遍](#自己验一遍)
  • [目录结构](#目录结构)
  • [配置](#配置)
  • [参与贡献](#参与贡献)
  • [许可](#许可)

它是什么

一个事实核查技能。给它一条传闻、一个数字、一则新闻或一句「这是不是真的」,它交回一份核查报告。

它与「直接问模型」的区别在于五条不允许跳过的铁律:

1. 知识库禁用:即便模型「认为」自己知道答案,也必须先用搜索工具从互联网核实。搜索不可用时

如实报告「无法核实」,绝不用记忆顶替。

2. 多源交叉:每个事实点至少要有 2~3 个相互独立的来源。多家媒体转载同一篇原始报道只算一个

来源,不是三个。

3. 国内外并行:同一核查对象同时从国内、国外两套信息生态取证并分别呈现——很多信息只在某一侧出现。

4. 对抗性核查:结论初步成型后,主动用反向/质疑关键词再搜一轮。找不到反证才给高置信度。

5. 全部可溯源:每一个论断、数字、日期、引述都带完整 URL + 出处名称 + 具体引用位置。

输出是结论先行的报告,来源进编号附录;部分核实的内容被物理分档——「未证实」「无法裁定」

不会和「已证实」排在同一段里,所以一条没查清的东西没法被当成已定论引用。

运行前提

必需 · 一个能搜索公开互联网并且能抓取页面正文的 agent(抓取链任意一条可用即可)。没有搜索能力时,技能会报「无法核实」而不是猜。

推荐 · 批量/多引擎搜索、存档服务(Wayback)、用于并行取证的子代理机制。

可选 · Node.js ≥ 18(两个自带工具需要);TypeSafe Jev 密钥(判据层需要)。

技能正文不绑定任何产品、主机或工具链:它只写能力名,由 [ADAPTING.md](./ADAPTING.md) 把能力

落到你的环境里。

已验证宿主:DSH 0.1.7-rc.2、0.2.0-rc.2、0.2.1-rc.2、0.2.1-rc.3 与 0.2.1-rc.5。 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](./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](./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 0.2.1-rc.2 于 2026-10-17 完整跑过一遍(Node 24.21.0,Windows)。注册表的实现(@deepseek-ai/dsh-skill 的 lib/index.js)在 0.2.0-rc.2 与 0.2.1-rc.2 之间内容没有变化 —— diff 只有换行符与版本号(package.json 把 peer 依赖抬到 cordis ~4.0.5、加了一个 ./locale/*.json 导出)—— 所以不需要任何 API 适配。变的是 provider 能拿 control 做什么,本包两样都用上了:候选带上 path(指向绝对的 SKILL.md,摘要会保留它);provider 监听 SKILL.md,保存时调 control.invalidate(),改正文不必重启就会刷新会话里的技能目录(150 ms 去抖;control.signal abort 或上下文销毁时收尾,宿主不传 control 时退化为「改完重启生效」)。证据:插件分别挂到宿主自己那套 0.2.1-rc.2 注册表代码(从已发布的 asar 里取出,配宿主自带的 cordis 4.0.5)与已发布的 0.2.0-rc.2 包上,各 21/21 项检查通过:snapshot.complete === true、get() 交出的正文与 SKILL.md 逐字一致、provider.list() 的 rank 为 600,两轮「改文件 → 目录自动刷新」都观察到了;npm run selftest 27/27、25/25、37/37 与 route.mjs regress 26/26 均在 Node 24.21.0 上复跑。

DSH 0.2.1-rc.3 于 2026-10-24 完整跑过一遍(Node 24.22.1,Windows)。注册表契约没有位移:@deepseek-ai/dsh-skill 0.2.1-rc.3 仍导出 BUNDLED_SKILL_RANK(600)、SkillRegistry、isSkillName、isModelInvocable 与 isUserInvocable,registerProvider() 交出的 control({ signal, invalidate })不变,invalidateCache() 仍推进缓存 revision 并广播 skills/change。插件挂在这套注册表上(取自随宿主发布的 app.asar,配宿主自己的 cordis 4.0.5)通过了 28/28 项检查:inject: ['skills'];候选带 source: bundled、rank 600 等于宿主导出的常量、绝对 SKILL.md 作为 path、包根目录作为 resourceBase、描述与 frontmatter 逐字一致;get() 交出正文(13,533 字符,frontmatter 已剥离,path 保留);control.invalidate() 让注册表 revision 从 1 到 2 并恰好广播一次 skills/change;拆卸后 provider 消失且 control.signal 已 abort。两处看着像失败、其实不是的细节也一并记下:宿主的 toSummary() 有意不在目录摘要里带 rank(它是同名仲裁的输入,不是展示字段);注册只在 ctx.plugin() 的 thenable 落定后可观测 —— 在 await 之前去看,即便挂载成功也看不到 control。同一次

…(truncated)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::5,最后更新 2026-11-05

Links

GitHub · Homepage · npm

Same category