Chuyển đến nội dung chính

dsh-rigorquant

Đã xác minh

dsh-rigorquant · v0.7.0 · MIT · Giao diện web

RigorQuant for DeepSeek Harness: session-scoped unattended, context-isolated multi-agent research for empirical/computational mathematics with a four-part pre-implementation check battery and a jacobian/Lean escalation lane.

Cài đặt

dsh plugin add dsh-rigorquant

Xác nhận layer đã áp bằng dsh --profile default --dump-config — xem hướng dẫn cài plugin.

Mã nguồn

Phát hành lên npm mà không có repository công khai. Hãy kiểm tra nội dung package trước khi cài.

Thẻ

Tác giả

Readme

dsh-rigorquant

English | 简体中文

Edgeworth box with contract curve and Pareto optimum

埃奇沃思盒 — 由 TikZ 手绘,非 AI 生成图

面向 DeepSeek Harness 的 会话内无人值守、长时运行的实证/计算数学研究框架——覆盖经济学、金融、组合 构建与优化、模拟、计算经济/金融等领域。

RigorQuant 是一个 Agent preset + 内置技能,把一次 DSH 会话变成一个上下文隔离的 多智能体研究实验室:

  • 并行探索者提出候选方法(explorer-<n>,空白上下文)。
  • 离网思考者(OffGridThinker)(offgrid-<n>)在路线需要隔离时上 场:只凭模型自身的推理加上计算工具(sympy、numpy、mpmath、Lean 校验器) ——无网络、无文献、不使用他人的结果。
  • 真值轨道独立重推导简化情形下的解析闭式解、不变量与界——用两种不同手段 各推一遍(两个独立的全新 doublechecker-<n> 队友)。
  • 对抗者只凭反例淘汰路线。
  • 四项检验(闭式解相等、精确不变量、解析界、统计强化)在数值实现 之前运行。
  • 元校验器(rq_check.py)会拒绝证据缺失的 PASS:阶段产物为空、 derivations/ 为空、registry 中没有带审计引用的 passed 路线、交付物无法 编译等。其证据检查只读审计记录,不读 study.json——研究不能为自己作证。
  • 随机工作采用固定种子 + 大数定律约定。
  • jacobian MCP 升级通道(opt-in;Lean 作为手动外部通道)在实现前解决证明 关键性断言。
  • PASS → 自动实现并继续;BLOCKED → 同一缺口连续 3 轮 → 交付最强推导 + 精确 缺口;BUDGET → 5 轮 → 存档 + 报告。

运行范式改编自金山木医生攻克 Crouzeix 猜想的过程 (提示词、 Lean 审计) 与陶哲轩的 blueprint/等式理论项目,并落到数值工作。完整设计记录: docs/architecture.md。

"无人值守"的准确含义:框架在单个会话内无人值守运行;跨会话边界会解除 goal,需要一次人工回合("continue")重新武装;它不会跨重启自主续跑。

研究团队——以及它如何运作

一个枢纽周围的八个角色,每个都是编排者按角色创建、带自己 persona 与工具预算的队友。编排者是唯一能看到所有汇报的角色——队友之间无法互发消息、无法列出花名册、也读不到整个看板——因此这种分离是被强制的,而不是靠约定,生产者绝不自查自己的成果:一个想法只会死于具体反例,绝不因风格或感觉而死。

Orchestrator

编排者 · root persona——扇出工作、综合结果并写状态。受四条铁律约束:生产者≠检查者、只凭反例淘汰、随机运行必记种子、承重命题不许空谈。


Explorer

探索者 · explorer-<n>——白纸上下文、刻意发散。给出引理、方程、构造与带精确陈述的候选方法;拒绝状态汇报式输出。


OffGridThinker

离网思考者(OffGridThinker) · offgrid-<n>——离网通道。只凭模型自身的推理加上固定的计算通道(sympy、numpy、mpmath、cvxpy、hypothesis、jax;已配置时还有 Lean 校验器)——除此之外什么都没有:无联网、无技能、无委派、不使用他人的结果。它是独立的智能体,不是探索者的变体:隔离即身份。


DoubleChecker

双重复核(DoubleChecker) · doublechecker-<n>——盲态(无联网、无技能、无委派、无草稿)。从第一性原理把关键命题重推两遍,方法各异。


Adversary

对抗者 · adversary-<n>——执行检验组、专找反例。以裁决收尾:PASS 或 NEEDS-EDITS。


Literature

文献线 · lit-line-<n> · lit-adversary-<n>——封闭式引文图遍历,再由独立对抗者重取每条主张,确认其真实且不过时。


Validator

校验器 · rq_check.py + schemas——证据缺失即拒绝 PASS。只读审计记录,绝不读研究自称的主张——研究无法为自己作保。


Document adversary

文档对抗 · doc-adversary-<n>——一个独立智能体,逐一审计每份交付物的自足性(约九成 AI 生成内容恰恰会省略这点):文档用到的每个专业术语、符号与缩写,都必须在文档自身或受众规范的符号表中有定义。返回 VERDICT: PASS / VERDICT: NEEDS-EDITS;NEEDS-EDITS 是阻塞性缺陷,校验器在缺失时会拒绝 PASS。


团队实时视图——原生团队视图

一项 study 跑在 Harness 自带的 Agent Teams 界面上,没有自定义面板要学: RigorQuant 会话运行期间,点开会话头部的团队动作,就能看到花名册(名字、 角色、状态)和本轮的任务看板及其阻塞边——要盯的就是这两样。花名册的模型列 显示的是该成员的模型选择,而不是 rq-model-router 实际把其请求路由到的模型 (决策 16),因此某个角色的路由要去 插件 → dsh-rigorquant 卡片上看, 不要在花名册上读。花名册里每位队友占一行:点开任意一位,打开的就是它自己的 会话,于是你可以在它运行的同时读它的推导或审计(直接对话就是普通会话,会打断 该队友的空白上下文——这一点会被记录,但不被阻止)。

拓扑是枢纽-辐条(hub-and-spoke),而且由守卫强制成事实而非约定: 队友的消息要么到编排者、要么发不出去;队友无法列出花名册或整个看板;只能读取或 更新没有被其他队友占有的任务(也就是它简报指定的那一条,由它 claim)。

署名。 hero 横幅(docs/figs/agent-team-hero.svg)改自 dsh-agent-teams 的 hero 图,作者 NanmiCoder(程序员阿江 / Relakkes)—— Copyright (c) 2026,MIT 许可证。角色头像为本仓库 docs/figs/ 自有资源。

五步循环。 每轮=扇出 → 求真 → 对抗 → 综合。

  1. 承诺——逐字记录原始问题,拆成带明确判据的子问题,挑手算可验的简化情形,钉死种子、容差与 schema/校验器摘要。
  2. 扇出——白纸上下文的探索者与文献线并行运行;大多数不会被告知偏好的路线。
  3. 求真——盲态的 DoubleChecker 不看草稿地重推承重命题;凡研究赖以立足之处,必须有两份独立推导。
  4. 攻击——对抗者先跑四关检验,再找反例;分歧的轨道先排成一份裁定案卷。
  5. 认证并交付——校验器确认无遗漏;论文与幻灯由已验证记录装配,绝不现写。

检验组,任何数值实现之前运行:A 闭式等价 · B 精确不变量 · C 解析界 · D 统计加固(固定种子 + LLN 按 ≈ C/√N 收缩)。

**有据可查:**一次硬核运行中,21 个错误全部被特定机制捕获、无一靠运气(其中 11 个出自编排者自己);81 条文献主张中仅 35% 通过独立验证;诚实闸门本身也经测试——一份伪造研究必须失败。

安装

需要 DSH >=0.2.0-rc.2 <0.2.1(决策 26, docs/adr/0003-rigorquant-on-dsh-0.2.0.md)。preset 是一个声明式的 @deepseek-ai/dsh-agent-preset 行,路由是路由器那一行自己的 profile 配置,卡片 通过插件页的配置表单编辑它们,无人值守的入口提问使用宿主 ask_user_question 的 定时模式——更早的宿主上这些都不存在,安装脚本会直接拒绝。 0.6.1 是支持 0.1.7-rc.2 宿主的最后一个版本:不做任何回移,暂时无法升级宿主 的话,请留在 0.6.1。

这个版本范围是预发布版,团队层还是实验性的:本版本只跑在宿主以 Beta 卡片形式提供的 Agent Teams bundle 上——即 插件 → 官方 下带 Beta 标记的 智能体团队(Agent Teams) 卡片。你可以在那里自行开启,也可以交给完整 安装去做(见下)。

从 0.6.1 升级——或从任何 0.5.x 升级,安装脚本仍会处理那些版本留下的迁移 (见下)——是一次性切换,要在 0.2.0 第一次启动之前完成。先把进行中的 RigorQuant 研究完成或归档:在 0.1.7 宿主上开始的会话,不保证能在新版上恢复。然后:

  1. 停止 dsh(所有正在运行的进程,包括 web 应用)。

  2. 安装钉在本版本范围所测试版本上的宿主:

    npm i -g @deepseek-ai/[email protected]
    

    npm 的 latest 现在也指向 0.2.0-rc.2,所以不带版本的安装恰好会落到这个 core 上;钉住版本才是让它留在那里的保障。

  3. 在启动 dsh 之前运行 ./install.sh(或 npx dsh-rigorquant)。它会把你在旧 settings.yaml 里保存的路由,以及保存过的 RigorQuant 默认 preset 迁移过来。 若 dsh 已经启动过一次,重新运行它会从 settings.yaml.imported 中找回它们。

  4. 启动 web 应用,在新会话选择器里选 RigorQuant。若选择器不见了,请在通用 设置中重新打开 代码工作工具(Coding Tools):它是选择器唯一的开关,默认 开启,只有你自己或桌面端引导把它关掉时才会关闭。

bundle 卡片本身现在带有宿主的原生展示元数据:locale/en.json 与 locale/zh.json 为插件页和设置里的插件清单提供标题与描述,icon.svg 提供图标 ——这些都直接从 manifest 读取,无需激活插件。

扇出受宿主限制:每个 root 同时最多 8 个存活子代理(maxActiveSubagents, 插件 → Subagent)。文献密集的研究若要让 4 条文献线与探索者并行,可在那里调高。

完整安装会打开那张 Beta bundle——即插件页 官方 分组下的 智能体团队(Agent Teams) 卡片——条件是目标 profile 尚未启用它,且会钉到 core 自身的版本上(若 profile 记录的是别的版本,则改钉回 core 的版本;你自己 启用、没有记录版本号的 bundle 不会被碰)。它总会移除 0.5.0 的 profile 里那个 独立的 智能体团队 Web UI bundle,并用一行说明原因:DSH 0.1.7 已把该面板并入 唯一的 bundle,也没有为这个 core 发布 web bundle;移除失败则安装中止。它还会在 profile 的用户补丁($DSH_HOME/profiles/<profile>/cordis.patch.yml)中追加一段 带 dsh-rigorquant 标记的配置块,把团队服务的成员数量上限提高到 64,并打印它 写入的每一行。装好之后重复运行不会再有变化;--uninstall 只会移除它在该标记块里写入的那几行(之后宿主存进标记之间的设置会保留), 并且只在该标记块记录了"是安装脚本启用的"时才关闭该 bundle——你自己手动启用的 bundle 不受影响。若 PATH 上没有 dsh,这一步会打印警告后跳过,其余安装步骤 照常进行——那张 Beta 卡片就留给你在插件页自行开关(参见 docs/adr/0001-rigorquant-on-agent-teams.md)。

两种安装形态:

Bundle(一条命令)——仓库声明了 dsh.bundle manifest,它自己声明 rigorquant preset,其中的 rq-lane-sync 行会在 profile 下次启动时,把计算通道 落盘到 $DSH_HOME/share/rigorquant/,因此生态的 dsh plugin add 安装路径即可获得 完整框架(设计记录:docs/architecture.md 决策 22 与 25)。这条路径既不开启 Agent Teams,也不迁移保存过的路由;这两件事由安装脚本完成:

dsh --version                 # 必须 >= 0.2.0-rc.2 且 < 0.2.1
dsh plugin --profile web add github:linxichen/dsh-rigorquant

启动同步是幂等的(字节一致的目录不动;.venv 等派生状态既不复制也不清除)。 它还会删除 0.6.0 之前的版本复制到 $DSH_HOME 下的目录式 preset,但仅当该目录 的 .rq-sync.json 表明是本包放置的。DSH 的插件 CLI 没有卸载钩子,因此计算通道 的移除始终是显式操作(./install.sh --uninstall)。

安装脚本(完整框架)——计算通道,以及插件(声明式 preset、角色模型路由器及其 插件页卡片):

git clone https://github.com/linxichen/dsh-rigorquant
cd dsh-rigorquant
./install.sh                    # 安装计算通道 + 插件,开启 Agent Teams,迁移保存的路由
# ./install.sh --skill-only     # 或只安装技能(rigorquant、arxiv、academic-paper-search)
# ./install.sh --uninstall      # 移除技能、共享通道与插件

启动一个新的 DSH 会话并选择 RigorQuant preset,然后说:

rigorquant:为 [问题] 推导并验证一个方法,先在简化情形上验证,再做数值实现。

部署须知

四件需要研究型部署自行决定的事。它们都不是 RigorQuant 自己的机器,安装 RigorQuant 也不会改变其中任何一件:

  • DeepSeek 会话日志默认开启。 base bundle 以 enabled: true 挂载 session-log-deepseek:每个会话的规范事件日志都会作为请求元数据上传到 DeepSeek 官方 API——不占模型输入 token,但整个运行会离开本机。要关掉它, 在 profile 的用户补丁 ($DSH_HOME/profiles/<profile>/cordis.patch.yml)中覆盖该行,然后重启 profile——改动在下次启动生效:

    - id: session-log-deepseek
      config:
        enabled: false
    
  • 目标轮驱动器(goal-round-driver)是宿主的,而且已经挂好。 goal 服务与 goal-round-driver 是随附 base bundle 的宿主平面行 (@deepseek-ai/dsh-base);preset 只重新挂载人工的 /goal 命令与面向模型的 goal 工具——这两个在 host 平面上被 web bundle 关掉。本仓库不发布、不挂载、 也不武装这个轮驱动器:"无人值守"是原生契约,跨会话边界仍会解除 goal,直到 一次人工回合重新武装它(决策 10)。

  • workspace-changes 卡片是"编辑"这件事人类可见的见证。 web bundle 的 workspace-changes 行按 git 工作区快照记录每个顶层回合改动的文件,并在该回合 下方渲染变更卡片——于是判决之后才落地的编辑,就在它发生的地方、发生的时间被 看见,这正是决策 19 的冻结写入规则需要人类能看到的东西。认证本身只读研究记录, 从不读会话(docs/architecture.md 决策 19)。

  • 定时任务既不使用,也不受守卫约束。 DSH 0.2.0 把定时任务放进可选的实验性 bundle,标准 profile 不会挂载它。RigorQuant 不使用它们,它的逐次调用守卫也不 覆盖它们:你自己安装并开启的定时任务会跑在团队的枢纽-辐条规则之外。

计算通道(一次性)

每项研究都带着自己的固定 uv 通道。install.sh 或插件的 boot-sync 行会在 $DSH_HOME/share/rigorquant/env 放一份模板(两者写入的字节一致;见 env/README.md)。立项时,编排者把其中的 pyproject.toml 与 uv.lock 复制到研究的 env/,随记录一起提交,并在研究的 interim/(已被 gitignore)下一次性建好 venv——venv 与 uv 缓存都放在那里,这也是 workspace-write 沙箱唯一允许它们写入的地方。因此即便之后的版本替换了模板, 研究的克隆也能重建完全相同的环境;需要额外包的研究把它加进自己的通道。缺少研究 自己的 env/uv.lock 时,校验器拒绝 PASS。每项进行中的研究约需 1 GB 给 venv 与 缓存,收尾时删除:沙箱使各研究无法共用 uv 缓存。jacobian 升级通道已固定版本 ([email protected]),它不再是 preset 的一行,而是在运行时挂载:当某个论断需要时, 编排者无需询问就调用 rq_escalate,挂载到自己或它点名的某个队友身上,jacobian 工具从下一次请求起出现,直到会话结束。框架在一次性配置前仍会请求批准 (npx -y [email protected] upgrade,或通过技能内的 scripts/provision-lean.sh 安装 Lean 工具链)。详见 mcp/jacobian.md。

角色模型路由(rq-model-router)

内置插件为每个 RigorQuant 角色制定模型与推理强度策略,每个角色各有一个 回退模型。角色身份来自 Team 成员的名字(<role>-<n>;Lead 即编排者)—— 路由器自身携带已发布的层级矩阵(DoubleChecker 与 adversary 默认使用 deepseek-v4-pro @ high),并把保存过的路由覆盖在上层。 配置入口:插件 → dsh-rigorquant (该 bundle 自己的页面,位于其描述之下):只有“保存”才会写入,保存的路由就是 路由器那一行在 profile 的 cordis.patch.yml 里的配置,从下一次请求起生效; 离开页面会丢弃未保存的修改。默认配置:

角色 主选 回退
双重复核(DoubleChecker) deepseek-v4-pro @ high deepseek-flash @ low
对抗审计 deepseek-v4-pro @ high deepseek-flash @ low
根编排者、探索者、离网思考者、文献/文档角色 继承(root 跟随聊天框选择器) —

主选路由遇到终止性失败(无适配器 / HTTP 4xx;包括官方额度响应 1308 / “Usage limit reached”)时,该角色降级到自己的回退模型并强制重试一次;下一次成功或 10 分钟后恢复主选。不属于 RigorQuant 团队的智能体 (其他 preset,或完全没有 Team 成员身份)一律不受影响。

只用 DeepSeek 账号登录? 宿主把 DeepSeek 拆成 deepseek-official (API key)与 deepseek-account(账号登录)。当官方路由不可路由(没有 API key) 而账号路由可路由时,上表的默认配置会改用 deepseek-account 上同名的模型,这些 请求计入你的账号额度,而不是某个 API key。你自己保存的路由永远不会被改动。 设计记录见 docs/architecture.md 决策 16 与 25。

仓库结构

package.json                dsh.bundle manifest(支持 dsh plugin add)
cordis.patch.yml            bundle patch:技能层 + rq-model-router +
                            rq-team + rq-lane-sync 行
dsh/                        宿主半(角色路由、团队组合与逐调用守卫、
                            启动同步)+ 每角色一个 persona 文件,与 web 客户端包
                            (路由卡片)
agent-presets/
  rigorquant.patch.yml      声明式 `rigorquant` preset(persona + 子行)
  rigorquant/skills/        内置技能
    rigorquant/             SKILL.md + references/ + scripts/ + schemas/
  .../scripts/rq_check.py   元校验器(唯一正式副本)
  .../schemas/              study.json 与 registry.json 的 JSON Schema;
                            校验器直接加载它们,因此二者不会漂移
env/                        固定的 uv 计算通道(sympy/cvxpy/hypothesis/…)
mcp/jacobian.md             升级通道接线说明
docs/architecture.md        逐项确认过的设计决策记录 + 资料来源
docs/figs/agent-team-hero.svg       hero 横幅,改自 dsh-agent-teams
                            的 hero 图(见上方署名)
tests/                      校验器测试套件(见下方"测试")
studies/                    每项研究一个文件夹(Mode B;各 checkout 自己的
                            活跃研究,不随 bundle 发布)

测试

校验器自带测试套件,核心是一个伪造的 study:空的 derivations、空的阶段 产物、一行字的对抗者报告,以及正文写着"This paper says nothing."的论文。 它必须 FAIL。诚实性闸门若自身没有测试,就会为递给它的任何东西背书。

uv sync --frozen --project env
uv run --frozen --project env python -m pytest tests/ -q

组合校验针对的是已安装的宿主:各探针先从 RQ_HARNESS_MODULES 解析它,否则 用 PATH 上的 dsh。在没装宿主的机器上、或宿主版本不在本版本支持范围内时,这些 检查会说明属于哪种情况并跳过——并且有一个测试专门钉住"拒绝"这件事,所以绿色的 测试结果永远不会被误读成"已经对着错误的 core 校验过了"。要验证一个发布版本,请 安装它的目标 core(或把 RQ_HARNESS_MODULES 指向该安装的 @deepseek-ai 目录) 后重新运行上面的命令。

提交前覆盖率闸门(校验器 ≥95%)

仓库内的 .githooks/pre-commit 会在覆盖率模式下运行同一 整套测试;已发布的校验器(rq_check.py)低于95% 行覆盖率时拒绝提交。./install.sh 在 git checkout 中自动启用;已有 checkout 可显式执行:

git config core.hooksPath .githooks

校验器以子进程形式运行,因此覆盖率采用显式接线而非插件魔法:RQ_COVERAGE=1 让 tests/conftest.py::run_check 调用 coverage run --parallel;hook 合并子进程数据并 执行 coverage report --fail-under=95。CI 运行完全相同的闸门。单次绕过可使用 Git 的标准 git commit --no-verify。

tests/test_repo_consistency.py 负责另一半:唯一的校验器、唯一的 schema、 文档中可解析的命令、与文件系统一致的目录说明。

校验器通过意味着什么:声明的证据齐备、交付物可编译;它不意味着数学 是对的——那仍然由检验组、独立真值轨道与对抗者负责。

研究(Study)

一项 study 即用户的委托:一个自包含的工作单元,各处内部结构完全一致。 持久化成果位于 study 根目录(study.json、STUDY.md、registry.json、 journal.md、derivations/、audits/、artifacts/),应当提交;所有草稿 都在被 git 忽略的 interim/ 中。两种模式,由位置决定:

  • 一仓库一研究 — study.json 在仓库根目录。
  • 一仓库多研究 — studies/<slug>/study.json;清单即 studies/*/study.json。

启动时检测到已有 study 则静默续跑;新 study 只问一次(模式 + slug),之后不再 询问。详见 docs/architecture.md 第 12 条。

发布

本仓库是社区 DSH 插件发行物(bundle + preset + 技能形态):package.json 声明 dsh.bundle manifest,已打上 dsh-plugin 标签,可被生态内基于 topic 的索引发现——约定参见 dsh-find-plugins 与 awesome-deepseek-harness。

MIT License。