Skip to content

dsh-fact-check

Verified

dsh-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

version selftest license: MIT node DSH plugin dependencies: 0 last commit stars issues PRs welcome

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

English → README.md


目录

它是什么

一个事实核查技能。给它一条传闻、一个数字、一则新闻或一句「这是不是真的」,它交回一份核查报告。 它与「直接问模型」的区别在于五条不允许跳过的铁律:

  1. 知识库禁用:即便模型「认为」自己知道答案,也必须先用搜索工具从互联网核实。搜索不可用时 如实报告「无法核实」,绝不用记忆顶替。
  2. 多源交叉:每个事实点至少要有 2~3 个相互独立的来源。多家媒体转载同一篇原始报道只算一个 来源,不是三个。
  3. 国内外并行:同一核查对象同时从国内、国外两套信息生态取证并分别呈现——很多信息只在某一侧出现。
  4. 对抗性核查:结论初步成型后,主动用反向/质疑关键词再搜一轮。找不到反证才给高置信度。
  5. 全部可溯源:每一个论断、数字、日期、引述都带完整 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。

许可

MIT