问一次,答案归你。
软件内部的大多数决策并不是推理问题。有多少行符合条件?那一列的合计是多少?有多少条缺值?这些都是对你已经持有的数据做算术。把它们发给模型,意味着为本来就可核验的东西按 token 反复付费,并换回一个你无法验证的答案。
把问题描述一次。模型组合出一份规格,地板决定这份规格是否可准入。你保留下来的,是一个离线、免费、长期有效的本地工具,并且自带推导过程。
Python 3.9+ · 仅标准库 · 无网络、无密钥、无模型、无遥测
工作方式
1 · 你描述问题
用自然语言,例如「已批准发票的总金额」。工具会打印一段提示,其中带着你自己的列名和一套封闭的原语词汇表。
2 · 模型组合规格
不是代码,而是一条流水线:rows → filter(approved) → sum(amount)。模型只能在词汇表内组合,没有通往 Python 的逃生口。
3 · 地板准入,或拒绝
七项检查:是否确定性?所引用的列是否存在?校验器是否真的会拒绝错误答案?在缺乏证据时是否弃权?它是扎根于你的数据,还是模型背下来的一个常数?
4 · 工具归你
经签名、晋升,并从你自己的机器上通过 MCP 提供服务。model_calls: 0,长期如此。
一个答案长什么样
{"status": "DERIVED",
"value": 1290.49,
"model_calls": 0,
"derivation": "rows -> filter(approved) -> sum(amount)"}
这条推导不是日志,它本身就是答案的依据,而且与地板准入时的那条字符串完全相同。置信度分数无法这样被审视,流水线可以。
它拒绝做的三件事
它不会猜。当没有证据时返回 NO_EVIDENCE,而不是一个看起来合理的数字。一个永远有意见的地板不是地板。
它不会运行未经准入的工具。规格带有准入它的那个地板的签名。手工改动之后,运行时会拒绝它、指名它,并继续提供其余工具。
它不会凭空造出一个领域。地板无法核验的问题会被报告为不可映射。那个问题确实仍然需要模型,而如实说出来就是输出本身,不是失败。
下载
运行时是 303 行仅依赖标准库的 Python。运行之前请把它全部读一遍 —— 它之所以这么小,正是为此。
shasum -a 256 -c SHA256SUMS python3 -m floor_runtime.serve --data invoices.json --tools ./floor --list
SHA256SUMS · README · 可免费使用,包括商业用途
为什么准入门不在下载包里
准入门 —— 决定一份规格能否成为永久工具的那一部分 —— 不在这个包里。这是设计决策,而不是授权手段。
如果准入门随包发出,一份错误的规格就可以被手写、被加载,然后自信地、离线地、长期地作答,而回路中再没有模型能发现它。这比模型每次调用都出错更糟,因为不会有任何环节再去复查它。
因此准入门留在可被维护和审计的地方,而在你机器上运行的是一个执行器 —— 对执行而言是完整的,并且坦承自己仅止于此。运行时不含任何网络代码,你可以自己读一遍确认。
诚实的状态说明
PROTOTYPE。运行时、签名校验与 MCP 服务器都是真实且经过测试的。原语词汇表很小 —— rows、filter 和七个归约器 —— 数据模型是朴素的 JSON 行。任何需要词汇表之外能力的问题都会被如实报告为不可映射。
同一套架构在本库的其他地方也有测量: 真实 Atari ROM 上的习得式地板(在一个游戏上 +32%,在另一个上 −12%),以及一个符号魔方求解器,它会指名拒绝一个不可能存在的魔方。