dsh-data-curation:契约驱动的 DSH 数据核对与清洗

前言

在 DeepSeek Harness(DSH)里做表格或文档型字段抽取时,常见做法是:让模型直接改 CSV、或在对话里「合并两个来源」后再写表。一旦源文件被覆盖、冲突被静默抹平、或交付表缺少逐格证据,后续很难回答「这一格凭什么」。社区维护者 Antigen-1 的 dsh-data-curation 把「立项 → 签署口径 → 多通道采集 → 比对 → 落表 → 验收 → 导出 → 打包」拆成固定阶段,用工具约束 原始数据不可变、多通道独立、逐格留痕、未决不自动改表,而不是依赖模型自觉。下面介绍它是什么、核心机制、如何安装,以及 README 中的可复现流程。

这是什么

dsh-data-curation 是运行在 DSH 上的插件(当前版本 0.18.0,MIT 许可证)。定位是「契约驱动的数据核对 / 清洗模式」:一个项目由 只读源材料 + 单一工作区 SQLite(默认 .curation/project.sqlite)组成,使用 Node 内置 node:sqlite,不引入第三方数据库依赖;要求 Node >= 24(package.json 的 engines 已声明)。

pin、通道提交、裁定结论、逐格 ledger、curated 交付表与注册的导出器都落在该库中;导出文件只是派生物。多通道各自独立提交,只有当 pin 里声明的比对策略判定 至少两个有效通道一致 时,单元格才会被接受;落表前用 VACUUM INTO 备份,单事务 upsert 并回读;curation_verify 是项目级与各表统一的 PASS / CONDITIONAL / FAIL 门禁。本地文件读写,无网络、无遥测。

插件通过 cordis.patch.yml 向 DSH profile 插入一行插件配置(stateDir: .curation),注册 data-curation 技能族、/curation* 命令与 curation_* 工具,并注入 Web 客户端 UI slot;不单独拉起外部进程。

它解决什么问题

README 归纳的四类典型事故与对应机制如下:

  1. 原始数据被顺手改掉 —— curation_init 对源文件做 sha256 基线;验收检查 manifest_intact。
  2. 单通道冒充多通道 —— 各通道必须独立 curation_submit,禁止先合并再提交。
  3. 冲突被静默抹平 —— curation_compare 逐格写入结论;不一致进入待裁定,不会自动写表。
  4. 验收只看结果不看过程 —— ledger 逐格留痕;curation_verify 用 SQL 复算覆盖、双通道、留痕与交付一致性。

核心功能

单一 SQLite 工作区

工作区默认目录 .curation/:project.sqlite 为权威状态;manifest.json 记录源基线;pin.json / pin.sha256 为人读镜像与封印(库内 pin 行为权威)。崩溃后只会是旧表或新表完整状态,不会出现「半张表」。归档时用 curation_pack 将工作区快照、pin、导出器、基线与被引用的项目内脚本打成 zip,可在别处解开继续核对漂移。

两层 pin(v5)

pin 是项目口径快照:defaults 提供通道、归一化、证据、门禁与裁定策略默认值;tables[] 按交付表声明主键、字段、记录来源与表级覆盖。签署时计算 pin_hash = sha256(canonical-json) 并封印;改口径需 curation_pin 带 force: true 重签,decision 绑定 pin_id / table_pin_id,旧结论与新 pin 不混用。

可选 rules 块支持 JSON 规则 DSL(validate / merge / decision / verify);0.18.0 起还可用 R6RS 风格 Scheme 子集编写规则,经 lowering 到同一 v1 AST,详见仓库 docs/RULES.md。

八阶段与工具面

README 将流程固定为下列阶段(含立项前的导入、归一与 pin 草稿可选步骤):

0 立项    curation_init
0b 导入   curation_records_import
0c 归一   curation_identity
0d 草稿   curation_pin_draft
1 签署    curation_pin
2 采集    curation_submit(规模化可用 curation_job)
3 比对    curation_compare
4 落表    curation_apply
5 验收    curation_verify
6 导出    curation_export
7 打包    curation_pack
8 汇报    curation_status / curation_query / curation_note

文档表格列出 19 个 curation_* 工具及主要参数;长任务可用 curation_progress 在 Web UI 输入框上方挂进度条(纯数据,不参与门禁)。

规模化提交(0.16.0):curation_submit 与 curation_job 支持 from 指向 CSV/JSONL 文件或目录;curation_query({ what: "coverage", table: "..." }) 按字段查看 submitted / accepted / pending。

低门槛起步(0.15.0):字段未定时可先 curation_records_import → curation_identity → curation_pin_draft → curation_pin({ draftPath: ... }),详见 docs/INTAKE.md。

完整交付(0.17.0):curation_delivery_plan 与 curation_verify_delivery 生成交付包(curated 导出、pending.csv、review.md、delivery.json 等);业务门禁仍以 curation_verify 为准。字段可设 "protected": true,落表与部分验收项会跳过该列。

裁定策略由 pin 的 adjudication.compare / select 配置(内置 exact、numeric、ordered-groups 等,或项目内命令 / 批量 batch 模式),非零退出或非法输出时该格进入待裁定,不回落默认策略。

安装与启用

环境:运行 DSH 的机器需满足 Node >= 24。安装前请阅读 GitHub 仓库 源码与 MIT 许可证;插件以当前 DSH 进程权限读写项目目录,pin 中的 verifyCmd、裁定外部命令与项目导出器会执行你项目内的脚本,只应放入可信项目。

从社区目录安装: SkillHub 插件页 标注当前可安装版本为 v0.18.0(与仓库 package.json 一致)。该页给出的安装提示原文为(页面未提供独立的 shell 安装命令):

请安装 DSH 插件 Antigen-1/dsh-data-curation。先读取..

在 DSH 中按 SkillHub 与 DSH 文档约定完成插件安装后,profile 会通过 bundle patch 注册本插件;默认状态目录为 .curation。README 注明 0.18.0 尚未发布到 npm,以 GitHub / 目录分发为准。

典型用法

低门槛:从 CSV 到签署 pin

适合字段尚在迭代、尚未手写完整 pin 的场景:

curation_records_import({ path: "input/records.csv", key: "record_id" })
curation_identity({ path: "input/records.csv", rename: {...}, exclude: [...], fileMap: {...} })
curation_pin_draft({ recordsPath: ".curation/records/main.jsonl", table: "summary" })
curation_pin({ draftPath: ".curation/pin.draft.json" })

curation_records_import 支持 CSV/JSONL;Excel 需先导出为 CSV。

完整核对流程(README「真实项目里的用法」)

  1. 建项目:curation_init({ cwd, sources: ["raw/"], tables: ["esd_main"] })。
  2. 编写 pin:先 curation_pin({ ..., dryRun: true }) 核对 hash 与字段,再正式签署。
  3. 各通道独立抽取并提交,例如:
curation_submit({ table: "esd_main", channel: "text", batch: "B001", records: [...] })

不要把 text 通道结果再喂给 vision 通道。

  1. curation_compare({ table: "esd_main" });用 curation_query({ what: "pending" }) 查看待裁定。
  2. curation_apply({ table: "esd_main" })(建议先 dryRun)。
  3. curation_verify() —— PASS 之前不要宣称核对完成。
  4. curation_export({ format: "sqlite" }) 或按表导出 csv/jsonl/markdown。
  5. curation_pack() 归档;换环境后 manifest 仍可复算源基线漂移。

从文件批量提交

curation_submit({ channel: "text", batch: "B001", from: "input/text.jsonl" })
curation_job({ action: "start", channel: "text", batch: "B001",
               from: "input/text/", chunkSize: 200 })
curation_job({ action: "status", jobId: "job-..." })
curation_query({ what: "coverage", table: "summary" })

适用场景与注意

适合:需要从 PDF/文档/多模态通道抽取结构化字段、要求双通道一致才入库、需要可 SQL 复算验收与 zip 归档的核对项目;多表交付(每张表独立 tables[] 条目,数据按 (table_id, …) 隔离)。

注意:

  • 同一项目建议单写者(写操作持有 .curation/lock)。
  • 一次 pin 覆盖整个项目;不存在只改一张表而不重签的路径。
  • curation_verify 结论优先级为 FAIL > CONDITIONAL > PASS;仅有待裁定时为 CONDITIONAL。
  • 插件不加密工作区;通道同源检测、OCR 自动触发等能力 README 标明尚未内建。
  • DSH 生态是「一切皆插件」;SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-data-curation 把表格型核对从「对话里改表」拉回到 pin 契约 + 多通道证据 + SQLite 留痕 + 统一验收门禁 的可审计流水线。若要查看版本说明与安全策略,见仓库 CHANGELOG.md 与 SECURITY.md。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜