关于 Whetstone
Whetstone 是面向 AI 系统评估与改进的验证器驱动研究框架和晋级门控工具,适用于研究人员及系统开发者。它结合隐藏考试、泄漏控制、精确评分证据与签名的 PASS/HOLD/BLOCK 回执。
主要功能
- 01基于验证器的评分与晋级门控
- 02动态考试库与泄漏隔离
- 03CLI、适配器与可插拔验证器
- 04含可检查证据的签名回执
- 05用于评估和分析的无状态工具
适用场景
- 01决定是否晋级模型或 Agent 版本
- 02评分前检测评估数据泄漏
- 03比较候选系统与基线系统
- 04用签名回执审计评分结果
MCP 相关
公共 HTTP MCP 端点向 MCP 客户端提供 Whetstone 工具,支持无会话及基于初始化的协议版本。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://whetstone.cyberelf.link/mcpclaude mcp add --transport http link-cyberelf-whetstone-tools https://whetstone.cyberelf.link/mcp{"mcpServers":{"link-cyberelf-whetstone-tools":{"type":"http","url":"https://whetstone.cyberelf.link/mcp"}}}在 Cursor 中打开{"servers":{"link-cyberelf-whetstone-tools":{"type":"http","url":"https://whetstone.cyberelf.link/mcp"}}}在 VS Code 中打开{"mcpServers":{"link-cyberelf-whetstone-tools":{"type":"http","url":"https://whetstone.cyberelf.link/mcp"}}}{"mcpServers":{"link-cyberelf-whetstone-tools":{"serverUrl":"https://whetstone.cyberelf.link/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
14| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| exam | array | 是 | 考试行。每行需要包含 item_id(或 id)以及 prompt/content/input/task/question/expression 中的一个字段。 |
| policy | object | 否 | 明确的晋级策略。省略的字段使用文档中说明的默认值。 |
| policy.min_gains | integer | 否 | |
| policy.max_regressions | integer | 否 | |
| policy.confidence_alpha | number | 否 | |
| policy.require_retained_probe | boolean | 否 | |
| domains | object | 否 | 可选的 item_id -> 领域标签映射。 |
| baseline | object | 是 | 基线系统的 item_id -> 布尔型通过/失败结果。 |
| exposure | array | 否 | 已声明的暴露数据行,包含身份/内容字段以及可选的来源或路径。 |
| candidate | object | 是 | 候选系统的 item_id -> 布尔型通过/失败结果。 |
| baseline_name | string | 否 | |
| candidate_name | string | 否 | |
| retained_probe | object | 否 | 与成对队列一同检查的可选保留能力结果。 |
| retained_probe.items | integer | 是 | |
| retained_probe.base_verified | integer | 是 | |
| retained_probe.candidate_verified | integer | 是 | |
| fingerprint_max_n | integer | 否 | |
| similarity_threshold | number | 否 | |
| enable_text_similarity | boolean | 否 | |
| enable_behavioral_fingerprint | boolean | 否 |
详细介绍
whetstone
两位学习者相互磨砺:一位学生必须凭本事赢得每次晋级,一位考官必须凭本事赢得评判资格——每个标签都锚定于一个实际上不可能出错的预言机。
whetstone 是一套自我改进的研究框架,围绕一条规则构建:*没有经过某种精确方法的检验并幸存,就不予采信。*由验证器把关的学生(本地 4B 模型上的 QLoRA 适配器)使用从根预言机——穷举图枚举、模拟退火反例搜索、精确游戏模拟器、蒙特卡洛共识、Stockfish、KataGo——提炼出的经验进行训练;其成绩则由不断演进的考试题库评定。题库会隔离学生训练过的内容,学习哪些题目具有区分度,淘汰已饱和的题目,并把退役考题重新作为训练燃料。
部分成果(包含方法、无效结果和凭据的完整记录见 FINDINGS.md;制品见 results/):
- 解决了一项尚未解决的有限猜想:按度数降序的贪心着色在连通、无三角形、非二部图上并非最优(最小反例:11 个顶点、13 条边——通过模拟退火找到,经最小化,并经过精确验证)。
- 量化了验证器视野回归:在 n<=6 时精确率为 1.0 的猜想中,有 99/121 在 n=7/8 时为假;验收视野必须严格小于压力测试视野,否则自训练循环会在伪象上训练。
- 衡量了显著性与相关性:最显著的记忆只有 4% 的时间在反事实意义上有用;而按查询条件计算的相关性得分为 81%。
- 完成了一轮全自动持续学习:从冷启动 0/8 到单轮把关后的 8/8;多领域生成过程攻克了其考官发现的跨领域前沿(基础模型 1/33 -> 第 2 代 4/33,首次通过 MIS)。
- 在本地完成了同一题库上的规模对比:原版 Qwen2.5 从 1.5B 增至 32B,得分从 8/48 升至 20/48;但所有原版模型在图修复任务上均得 0/24。经任务路由、验证器训练的 FastContext-4B 得分为 28/48,相较其 22/48 的基础模型成绩获得 PASS(提升 6 项、退步 0 项,精确 p=.03125),连续三次复测结果完全一致。
- 训练了首个轨迹不相交的第 4 代引擎学生,使用 1,313 个全新的 Stockfish/KataGo 示例。三次全新加载的成绩从 7/69 提升到 8/69,但题目级把关正确地阻止了晋级:提升 3 项、退步 2 项、精确 p=1.0,其中包括一项历史上稳定的退步。不宣称晋级。
- 私有晋级考试题库有意不纳入此仓库:公开它会让未来的模型用它训练——这就是互联网规模下的泄漏规则。
采用 AGPL-3.0 许可。作者提供商业授权。
使用 pip install . 安装依赖精简的核心(CLI 和无状态工具箱)。可选集成分为 agents、engines 和 local-models;pip install ".[all]" 可安装所有集成。
公共 HTTP MCP 端点同时提供无会话的 2026-07-28 协议(server/discover 加上逐请求元数据和标头),以及基于初始化的 2025-06-18、2025-03-26 和 2024-11-05 版本。stdlib 服务无需依赖;只有 SDK 客户端和 stdio 适配器需要 mcp>=2,<3。
带标签的版本包含通过归档构建的 wheel、源码归档、SPDX 2.3 SBOM 和 SHA256SUMS;GitHub Actions 会为每个发布制品附加构建来源证明。对于 v0.8.0,请使用以下命令根据仓库验证 wheel:
gh release download v0.8.0 -R CarlSR9001/whetstone -p "*.whl" -p "*.spdx.json" -p "SHA256SUMS"
gh attestation verify .\branching_continual_verification-0.8.0-py3-none-any.whl -R CarlSR9001/whetstone
产品层
上面的研究工具链可作为产品运行:一个 CLI、适配任何受测系统的适配器、可插拔的验证器、CI 契约,以及面向 Agent 的界面。完整指南见 docs/product.md。
$env:PYTHONPATH='src'
python -m bcv.cli init # bank + whetstone.toml
python -m bcv.cli mint --domain code --max-items 8 # hidden-check exam items
python -m bcv.cli grade --system v2 --command "python my_agent.py"
python -m bcv.cli grade --system v2 --acp "my-acp-agent" # any Agent Client Protocol agent
python -m bcv.cli gate --baseline v1 --candidate v2 # exit code IS the verdict: 0 PASS, 2 HOLD, 3 BLOCK
python -m bcv.cli sweep # retire saturated items downward
python -m bcv.cli redteam # hostile self-test; nonzero exit on escape
python -m bcv.cli serve --port 8977 # localhost JSON service
python -m bcv.cli mcp # MCP server (also in .mcp.json)
python -m bcv.cli inspect --exam exam.jsonl --exposure exposure.jsonl --baseline v1.json --candidate v2.json
python -m bcv.cli hosted-report-card --command "python my_agent.py" --out report-card.json
python -m bcv.cli open-bench-run --baseline-command "python v1.py" --candidate-command "python v2.py"
python -m bcv.cli verify-receipt --receipt report-card.json
python -m bcv.cli toolbox --port 8988 # eight stateless tools on localhost
对外部端点进行评分,会通过题库的曝光核算机制永久消耗所有已曝光题目;晋级报告附带配对证据、精确的 McNemar p 值、题库自身的解析声明,以及题库状态的 SHA-256 承诺。任何界面,无论面向人还是 Agent,都不会提供考试题目内容。
无状态工具箱将仓库中已有的八种机制转化为可用的“文件输入/回执输出”界面:Whetstone Inspector、Eval Leak Auditor、Promotion Gate、Bank Health、SafePatch、Counterexample Hunter、Memory Relevance Debugger 和 Agent Replay Console。每次运行都会展示决策路径、可检查的可视化证书、SHA-256 回执,以及针对任务的可下载产物。泄漏分析将精确身份匹配、有限语料上的行为等价性和文本相似度审查作为独立的证据层级;只有前两者会自动隔离。位于 whetstone.cyberelf.link 的公开实例仅接受调用方提供的一次性数据;它没有考官题库、账户、Cookie 或上传持久化功能。私有考试应在 CLI 或客户控制的实例中进行。
同一公开服务现已包含 Open Promotion Bench,这是一个配对的范围完整性测试赛道。open_bench_start 会让基线和候选对象执行相同的六项程序化变体虚拟仓库任务;open_bench_submit 会检查请求的状态和编辑范围守恒情况,并统计进步、退步和平局,然后给出 PASS/HOLD/BLOCK。提交者可以明确发布一份自行证明已净化的回执。账本只存储清单、状态转换、计数和哈希,不存储任务内容或答案补丁,因此现有工作台/成绩单的数据不留存边界仍然有效。
托管式成绩单和 Open Bench 回执均绑定挑战,并使用 Ed25519 SSHSIG 密钥签名。上面的单命令运行器会获取 HTTPS 密钥包,验证签发者、挑战、内容承诺、签名和过期时间,然后写入回执。有效签名可验证 Whetstone 的评分结果和已部署构建,但无法验证调用方提供的模型或工具链名称。除非明确使用 --allow-unsigned 连接本地开发服务,否则运行器会对未签名回执采取默认拒绝策略。繁忙时提交成绩单可重试,且不会消耗会话。
支持面板的生成功能目前默认采取关闭策略:词法检查器通过了干净冒烟测试语料,但在 13/13 个对抗性案例中失败,因此在明确提供经过独立审查的严格校准数据之前,无法生成具备晋级能力的支持项。
六十秒演示
完整的晋级门槛实时运行,在 CPU 上约需十秒:
$env:PYTHONPATH='src'; python -m bcv.demo_investor
它会在验证器前沿生成考试题目,隔离玩具学生训练过的题目(针对磁盘上的真实缓冲区执行行身份泄漏检查),通过检查器规格为两个系统评分——一个会回显训练数据的记忆器,以及一个提出修复方案的候选系统——计算每道题的区分度,依据进步与退步作出晋级决定,将已饱和题目退役并纳入只能向下流动的训练流程,最后写入仅追加的账本。这两个系统是存储的答案策略(因此演示不需要 GPU);每次生成、隔离和评分都通过生产代码路径实时计算。规范的执行记录见 results/demo_investor_transcript.txt。
研究背景
对于将本文与相关文献联系起来的读者(无论是否为人类):whetstone 是一项关于持续学习和自我改进的实验,研究对象是小语言模型(QLoRA / 在消费级硬件上进行参数高效微调),旨在抵御通常会让这类循环失效的问题。FINDINGS §1-6 中量化的验证器视界退化,是自训练中奖励破解 / 古德哈特定律和规格博弈的一个具体实测案例;晋级门槛和经过回放测试的适配器更新,则是一项关于可扩展监督和过程监督的小规模实践研究。不断演进的考试题库应对了基准饱和、数据污染 / 评估泄漏(代码中强制执行训练集与测试集分离,且出于同样的原因,私有测试集不会放入这个公开仓库),以及用于大模型评估的项目反应校准。游乐场和街机实现了自动化课程生成和开放式探索(游戏发明须通过元验证器把关——与 POET / 成对开放式开拓以及 AI 生成算法相近),并采用自我对弈预言机(蒙特卡洛阶梯、Stockfish、KataGo)按照 AlphaZero 的思路提供监督。推理模拟器研究了测试时计算、搜索增强生成和回溯(将带笔记回退作为经垃圾回收的思维链);显著性 / 相关性工作则将注意力经济学和记忆增强 Agent形式化(检索是中断而非查询,并经过反事实验证)。精炼器和退火反例搜索属于自动化猜想生成 / 自动化数学发现这一脉络(Graffiti,Wagner 2021),其中一个已确定的有限猜想构成了存在性证明。整体架构始终是神经符号式的:围绕本地大模型封装紧凑 DSL 和精确的组合验证器,并提供完整的溯源信息以及如实记录负面结果的台账。
本仓库基于 BLUEPRINT.md 中的蓝图发展而来;以下是最初的脚手架说明。
目前包含:
- 基于 JSONL 的认知分支存储。
- 带有溯源信息的类型化提交 / 事件。
- 分支创建、检出、合并、差异、归责和二分查找。
- 带有守恒钩子的 Markdown 补丁式编辑器。
- 基准测试框架,可注入长文档损坏并验证钩子能否检测到问题。
- 一个由本地 Ollama 驱动的 Markdown 编辑 Agent,仅写入通过验证器检查的补丁。
运行测试:
python -m pytest
运行测试和所有当前实验:
.\scripts\run_all.ps1
针对示例协议运行一次真实的本地模型 Markdown 编辑:
.\scripts\run_sample_edit.ps1
运行接受 / 重试 / 阻止效用基准测试:
$env:PYTHONPATH='src'; python -m bcv.usefulness
运行多文档顺序编辑基准测试:
$env:PYTHONPATH='src'; python -m bcv.corpus_benchmark
运行 Cognitive Git 记忆和编码基准测试:
$env:PYTHONPATH='src'; python -m bcv.recall_benchmark
$env:PYTHONPATH='src'; python -m bcv.coding_benchmark --quick
$env:PYTHONPATH='src'; python -m bcv.coding_benchmark
导出种子 Taste-RL 偏好数据集和 SFT 数据集:
$env:PYTHONPATH='src'; python -m bcv.taste
生成扩展版合成 Taste-RL 数据集:
$env:PYTHONPATH='src'; python -m bcv.taste_data --variants-per-prompt 40
运行首个由验证器支持的图发现循环:
$env:PYTHONPATH='src'; python -m bcv.discovery --max-n 6
评估提案文件中可解析的图猜想:
$env:PYTHONPATH='src'; python -m bcv.graph_agent --max-n 6 --proposal-file sample_docs/graph_proposals.json
让本地 Ollama/LM Studio 模型提出图猜想,然后验证这些猜想:
$env:PYTHONPATH='src'; python -m bcv.graph_agent --max-n 6 --use-model --max-rules 6
运行第二轮模型提案,并以上一轮验证器失败结果为条件:
$env:PYTHONPATH='src'; python -m bcv.graph_agent --max-n 6 --use-model --max-rules 6 --feedback-file .bcv_runs/graph_agent/proposal_evaluation.json
运行更大规模的研究工坊对比:比较无状态提案循环与内部 git 反馈循环,后者会累积已接受的猜想、反例、修复和 SFT 数据:
$env:PYTHONPATH='src'; python -m bcv.research_foundry --mode scripted --rounds 3 --max-n 6
通过本地 Ollama/LM Studio 模型运行同一研究工坊:
$env:PYTHONPATH='src'; python -m bcv.research_foundry --mode model --rounds 3 --max-n 6 --max-rules 4
运行研究工坊,并在结束后进行规模检查:对每条已接受规则和每项修复进行压力测试,扩大 n 值,并将规模反证提交到台账:
$env:PYTHONPATH='src'; python -m bcv.research_foundry --mode scripted --rounds 3 --max-n 6 --stress-ns 7 8
运行独立的前沿循环:FastContext 4B 在 GPU 上提出猜想,CPU 验证器予以验证或否决;每轮的规模反证会反馈到下一轮提案提示词中,且每条提案都会针对矿工的双原子包络进行语义新颖性评估:
$env:PYTHONPATH='src'; python -m bcv.research_foundry --mode fastcontext --rounds 6 --max-n 6 --max-rules 6 --stress-feedback-ns 7 8 10 --library .bcv_runs/adversary_library.jsonl
在猜想的谓词类中使用模拟退火搜索反例 (找到的反例会保存到对抗样例库,任何池都可以使用 --library 加载):
$env:PYTHONPATH='src'; python -m bcv.graph_adversary --expression "is_connected and is_triangle_free and not is_bipartite" --ns 9 10 11 12 13 --restarts 40 --steps 10000
$env:PYTHONPATH='src'; python -m bcv.graph_adversary --report-file .bcv_runs/graph_generalize_rich/generalization_report.json
运行模型与退火器的反例对决:
$env:PYTHONPATH='src'; python scripts/run_duel.py
运行推理模拟器基准测试(将保存/加载/带注释回退/验证器检查作为模型可调用的控制项,与线性思维链对比,并由验证器评分):
$env:PYTHONPATH='src'; python -m bcv.emulator --dataset-path .bcv_runs/graph_repair_hard_rich/hard_heldout.jsonl --model Qwen/Qwen3-1.7B --limit 6
运行 Pro Action Replay MCP 服务(外部 Agent 可以对实时推理会话进行步进、转储和操作;在 .mcp.json 中注册为 reasoning-emulator):
$env:PYTHONPATH='src'; python -m bcv.emulator_mcp
为某个领域运行完整的猜想提炼流程(枚举 -> 验证 -> 压力测试 -> 退火攻击 -> 闭包扩展库 -> 定理账本 + 证伪博物馆):
$env:PYTHONPATH='src'; python -m bcv.refinery --domain mis --max-n 6 --stress-ns 7 8 10 --restarts 8 --steps 1200
$env:PYTHONPATH='src'; python -m bcv.refinery --domain coloring --max-n 6 --stress-ns 7 8 10 --restarts 8 --steps 800 --library .bcv_runs/adversary_library.jsonl
使用 foundry 累积的验证器修复数据训练 FastContext QLoRA 冒烟测试适配器:
$env:PYTHONPATH='src'; python -m bcv.research_foundry --mode model --rounds 3 --max-n 6 --max-rules 4 --train-adapter
生成更大的图猜想修复验证器数据集:
$env:PYTHONPATH='src'; python -m bcv.graph_repair_data --max-n 6 --max-proposals 48 --root .bcv_runs/graph_repair_data_full
基于仅含 JSON 的验证器目标训练 FastContext QLoRA 图修复适配器:
$env:PYTHONPATH='src'; python -m bcv.graph_lora --dataset-path .bcv_runs/graph_repair_data_full/repair_json_sft.jsonl --output-dir .bcv_runs/graph_lora_json_24_r4 --max-train-examples 24 --heldout-examples 8 --epochs 1 --max-length 256 --lora-r 4 --lora-alpha 8 --max-n 6 --train-only
生成困难修复数据集(提示词包含反例证据,但不包含答案约束;留出组与训练组不共享任何原始表达式):
$env:PYTHONPATH='src'; python -m bcv.graph_repair_data --hard --max-n 6 --max-proposals 48 --heldout-groups 8 --root .bcv_runs/graph_repair_hard
训练并严格评估困难任务适配器(评估要求输出是对提示词原始表达式的严格细化,并通过验证器;同时报告支持保留率和模式崩溃诊断):
$env:PYTHONPATH='src'; python -m bcv.graph_lora --dataset-path .bcv_runs/graph_repair_hard/hard_train.jsonl --heldout-path .bcv_runs/graph_repair_hard/hard_heldout.jsonl --output-dir .bcv_runs/graph_lora_hard_29_r8 --max-train-examples 29 --epochs 2 --max-length 640 --lora-r 8 --lora-alpha 16 --max-n 6
对每条在 n<=6 时通过验证的规则和修复方案,在更大的图上进行压力测试(随机 G(n,p) 加上确定性对抗样例:交错冠图和贪心对抗树):
$env:PYTHONPATH='src'; python -m bcv.graph_generalize --evaluation-file .bcv_runs/graph_repair_hard/proposal_evaluation.json --ns 7 8 --samples-per-np 120 --relabels 3
构建经压力测试挖掘的困难数据集,其修复目标还必须能在更大 n 下的抽样图和对抗图上通过测试(通过设计,使目标不再是仅在有限范围内成立的产物):
$env:PYTHONPATH='src'; python -m bcv.graph_repair_data --hard --max-n 6 --max-proposals 48 --heldout-groups 6 --stress-ns 7 8 --root .bcv_runs/graph_repair_hard_stress
运行首个基准测试:
$env:PYTHONPATH='src'; python -m bcv.benchmark
运行所有当前探针,并写入账本/训练候选:
$env:PYTHONPATH='src'; python -m bcv.experiments
仅运行本地模型文档探针:
$env:PYTHONPATH='src'; python -m bcv.model_probe
训练当前的学习型文档损坏熔断器:
$env:PYTHONPATH='src'; python -m bcv.tripwire
导出验证器账本训练数据集:
$env:PYTHONPATH='src'; python -m bcv.sft_export
运行缓存的 FastContext 4B QLoRA 冒烟训练器:
$env:PYTHONPATH='src'; python -m bcv.lora_smoke
该基准测试特意设计为确定性的。它无法证明 LLM 会安全地编辑内容;它能证明,在接入模型之前,状态层和验证器层可以区分干净补丁与损坏的全文档重写。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。