dsh-fact-check
Verifieddsh-fact-check · v1.3.0 · MIT
Fact-checking skill for DeepSeek Harness: verifies claims against the open web instead of model memory, cross-checks independent sources across domestic and international search ecosystems, and can route three factual judgements (does the evidence support
Install
dsh plugin add dsh-fact-check Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Readme
dsh-fact-check
DeepSeek Harness 用的事实核查技能:不轻信模型自己的记忆,一律去公开互联网核实——多源交叉、 国内外信息生态并行、对抗性反查,最后交出一份结论先行、每条论断都可溯源的核查报告。
English → README.md
目录
它是什么
一个事实核查技能。给它一条传闻、一个数字、一则新闻或一句「这是不是真的」,它交回一份核查报告。 它与「直接问模型」的区别在于五条不允许跳过的铁律:
- 知识库禁用:即便模型「认为」自己知道答案,也必须先用搜索工具从互联网核实。搜索不可用时 如实报告「无法核实」,绝不用记忆顶替。
- 多源交叉:每个事实点至少要有 2~3 个相互独立的来源。多家媒体转载同一篇原始报道只算一个 来源,不是三个。
- 国内外并行:同一核查对象同时从国内、国外两套信息生态取证并分别呈现——很多信息只在某一侧出现。
- 对抗性核查:结论初步成型后,主动用反向/质疑关键词再搜一轮。找不到反证才给高置信度。
- 全部可溯源:每一个论断、数字、日期、引述都带完整 URL + 出处名称 + 具体引用位置。
输出是结论先行的报告,来源进编号附录;部分核实的内容被物理分档——「未证实」「无法裁定」 不会和「已证实」排在同一段里,所以一条没查清的东西没法被当成已定论引用。
运行前提
| 必需 | 一个能搜索公开互联网并且能抓取页面正文的 agent(抓取链任意一条可用即可)。没有搜索能力时,技能会报「无法核实」而不是猜。 |
| 推荐 | 批量/多引擎搜索、存档服务(Wayback)、用于并行取证的子代理机制。 |
| 可选 | Node.js ≥ 18(两个自带工具需要);TypeSafe Jev 密钥(判据层需要)。 |
技能正文不绑定任何产品、主机或工具链:它只写能力名,由 ADAPTING.md 把能力
落到你的环境里。
安装
作为 DSH 插件
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。