Perslis 项目 · Perslis Floor
试点版 · 1.1.2基于你自己的数据,
给出精确答案。
只需提出一次问题:模型编写计算流程,Floor 验证它,由人工批准,你保留一个经过签名的工具。此后它在你的机器上离线、精确地回答,推理环节不调用任何模型。数据不足以支撑精确答案时,它会拒绝回答。
you> How much have we paid, by vendor region? → tools/call derive_demo_paid_by_region ← DERIVED · model_calls: 0 Central 11215.45 East 21576.59 South 4800.25 West 32996.02 rows → filter(status = paid) → join(vendors) → group_by(vendors.region) → sum(amount)
录制自 1.1.2 发行版的 MCP stdio 会话。演示数据为虚构数据,随下载包提供。
为什么构建它
关于数据的大多数问题,其实是算术。
我们在每个区域付了多少钱?前三大供应商是谁?有多少发票没有采购单号?这些都不是推理问题,而是对你已经掌握的数据进行计数、筛选和求和。把它们交给模型,意味着每次调用都要付费,得到的却是一个无法核对的数字——而这个答案本来就是可以核对的。
Perslis Floor 只在模型真正有用的地方使用它:读懂一次问题,从封闭的词汇表中组合出计算流程,绝不编写代码。此后,你机器上的小型运行时每次都会精确执行该流程,并展示计算过程。它源自我们的符号地板研究。
清晰可见的流程
提问、组合、验证、批准、运行。
- 你的问题用你自己的话提出:“我们在各供应商区域分别付了多少钱?”
- 规格,而非代码模型组合出一条流水线:筛选 → 关联 → 分组 → 求和。
- 准入关卡八项检查:列真实存在、数据可信、结果确定、有据可依,并且验证器必须拒绝错误答案。
- 人工审核审核人阅读工具计算内容的文字说明,以及它在真实数据上的答案,然后决定是否批准。
- 你的机器签名后的工具通过 MCP 在本地运行。无网络、无密钥、无模型。
status = open 的规格,能通过所有机械检查。因此,在有人阅读并批准之前,任何工具都不会发布,而且这份批准会被签名进工具中。事后修改工具、它所读取的表或审核记录,批准即告失效。构建过程中的发现
那些看起来像答案的失败。
关卡能证明流程,却证明不了含义。
一次对抗性审查发现:一个标注为“已付款发票总额”、实际却在累加未付款发票的规格,通过了全部自动检查。因此现在每个工具都必须带有经签名的人工批准;工具、数据表或数据快照一旦改变,批准即告失效。
最初的“有据可依”检查拒绝了正确的工具。
在一万行贴近真实的数据上,我们尝试的四个正确规格全部被拒绝:检查只扰动前 25 行,而匹配的行在更后面。现在它扰动真正参与计算答案的行,并且针对每一类问题都在这一规模上做了测试。
浮点数与静默丢弃:看起来对,其实错。
9,007,199,254,740,992 加 1,结果没有变化。一次关联操作静默丢掉了一张 900 美元的发票,报告为 100 美元。现在运算采用十进制精确计算;无法匹配的行会被拒绝,除非工具明确规定了处理方式。
下载旁边的校验和,什么也证明不了。
能替换压缩包的人,也能替换它的校验和。现在发行版使用 Perslis 发布密钥签名,该公钥在两个地方公开;安装脚本拒绝任何验证失败的文件——我们用一个被篡改的镜像测试过。
构建状态 · 2026 年 9 月 26 日
今天可以测试什么。
| 能力 | 当前证据与限制 |
|---|---|
| 运行时与 MCP 服务器 | 标准库 Python 3.9+,无依赖、无网络代码。300 多项自动化测试在 Python 3.9 与 3.13 上通过;一次真实的 Claude Code 会话调用了构建好的工具包,返回了精确答案,并把无法回答的问题记录为缺口。 |
| 数据 | 支持 CSV、TSV、JSON、JSONL、SQLite 或包含它们的文件夹;数据变化时自动重新读取。在 50 万行(18 MB CSV)上实测:加载约 1.3 秒,内存约 400 MB,首次查询约 2.3 秒;重复查询使用缓存。默认上限 100 万行。 |
| 准入与审核 | 八项检查的准入关卡,之后由审核人用自己的密钥签署人工审核;运行时会拒绝任何缺少有效审核签名的工具。9 月 26 日经过四轮对抗性审查;1.1.2 修复了全部发现,每一项都由回归测试固定。 |
| 签名与发行 | 工具使用 Ed25519 签名,运行时只能验证。发行版校验和经过签名,可用 ssh-keygen 验证;构建可逐字节复现。 |
| 尚未支持 | 相对日期(“最近 30 天”)、带参数的工具、直接数据库连接,以及自助式准入关卡。针对你的数据的工具目前通过试点提供。 |
试用
先验证,再安装,从演示开始。
在发布签名核对通过之前,不运行任何代码。先下载安装脚本与签名的校验和,用下方的 Perslis 发布密钥验证(GitHub README 中公开的是同一把密钥——请对照两处),然后再运行安装脚本:它会下载压缩包、再次验证、解压到 ~/perslis-floor,并运行演示——虚构的发票与供应商数据,附带六个经过审核和签名的工具。
V=1.1.2; B=https://github.com/AgewellEPM/perslis-floor/releases/download/v$V
curl -fsSL -O "$B/install.sh" -O "$B/SHA256SUMS" -O "$B/SHA256SUMS.sig"
echo 'releases@perslis.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJfmXcRm2o52skHrajOCntbGMwPIB13CWnzt/tRGxXxd' > perslis_signers
ssh-keygen -Y verify -f perslis_signers -I releases@perslis.com -n perslis-release -s SHA256SUMS.sig < SHA256SUMS
grep ' install.sh$' SHA256SUMS | shasum -a 256 -c -
bash install.sh
我们不提供 curl … | bash 形式的命令:从某个分支直接管道执行脚本,会在任何验证之前就运行它。安装完成后,将其连接到 Claude Code,用自然语言提问:
claude mcp add perslis-floor-demo -- python3 ~/perslis-floor/floor-serve.py \
--data ~/perslis-floor/demo/data --tools ~/perslis-floor/demo/tools
针对你的数据
发送数据导出与你的问题,换回一个工具包。
准入关卡与签名密钥保留在 Perslis,这是有意为之:一个被错误签名的工具会自信地、离线地、永久地给出答案,而再也没有任何环节去复查它。试点流程是:你发送数据导出(CSV、JSON 或 SQLite)和你的问题;我们构建每个工具、逐一审核并签名;你得到运行时、你的工具,以及一份五分钟即可读完的指南。需要判断而非算术的问题,会被标注为“需要模型”——绝不会以猜测作答。
所依据的标准
以下为协议与密码学参考,并非背书。
- Model Context Protocol 规范(stdio 传输)
- RFC 8032 — Ed25519 签名(运行时的验证器以 RFC 测试向量固定)
- ssh-keygen -Y 签名与验证(发行版签名)
更多 Perslis 项目:Jira Monkey · 全部工具。