Rulith 是什么
给智能体一份可以核对的记忆:它记下的材料、立下的规则、得出的结论,每一条都写着依据。算不准的地方它会失败,不会含糊过去。
它解决的问题
智能体开始真的替你办事之后,三个问题就躲不开了:
- 它报的数可信吗? 你无法分辨一个数是算出来的还是顺口说的;
- 它说做完了,是真做完了吗? "我已经完成"是它的自我评价,不是一个可检查的事实;
- 出了错,能定位到哪一步吗? 过程散落在对话里,回头找不到当时它凭什么这么判。
这三个问题有同一个结构:再好的模型,也不能为自己作证。 加长提示词、要求它"一步步想",改善的是概率,不改变这件事的性质——过程仍然不可检查。答案只能来自模型之外。
Rulith 换一种分工:模型提出,板判定。
模型把材料与规则放到一块"板"上,板负责推导、检查一致性、做精确计算。模型仍然做它擅长的事(读懂你的意思、提出该记什么该立什么规则),但"这个结论成不成立"不再由它自己说了算。
结论的三种身份
板上每一条内容都有明确来源,而且互不混淆:
- 材料(asserted)——你或智能体断言的事实。它就是原始输入,不假装是推理结果。
- 结论(derived)——闭包推导出来的。板会告诉你依据哪条规则、用了哪几项材料,这条链可以一路点下去到最底层的材料。
- 动作产物(effect)——某个动作真的被执行后留下的。
这三者不可混同,是整个系统的命门。一个模型说"测试通过了",与一个真实运行器留下的记录,在板上是两种东西——前者进不了需要背书的那道门。
一个具体例子
假设你让智能体核对一张采购单。它在板上记下:
材料 line(item=钢筋, unit=3850, qty=12)
规则 金额 = 单价 × 数量
板推出:
结论 cost(item=钢筋, total=46200)
依据:按规则「金额 = 单价 × 数量」,从你提供的 1 项材料推导得出
关键不在于undefined这个数对——而在于你能问"凭什么",并且得到一个可以继续追问的答案。如果单价填错了,你顺着依据链一眼看到是哪条材料的问题;如果规则写错了,你看到的是规则本身。模型没有机会把"我觉得差不多是这个数"混进来。
三件让它区别于"给模型加个数据库"的事
精确算术:算不准就失败
±253 内精确;越界、无穷、非数一律报错而不是悄悄舍入。
一个会静默给出错数的系统,比一个会报错的系统危险得多——错数会被你当成对的用下去。
目标带反绎提示
你声明"什么算做完",板在每一步告诉你还差哪几件事。不是泛泛地说"继续努力",而是:
G1: priced(item=steel) [open]
needs via AX_PRICED: checked(item=steel)
缺口具体到可以直接动手。而目标只有在闭包真的支持它时才翻成"已满足"——智能体说做完了不算做完。
缺席不等于通过
"没有人反对"不是"已经批准"。
板用 naf(无法被证明)表达缺席:没有签字就挂在待签,不会因为时间久了、没人提出异议就算通过。这条纪律写在领域能力的判据里,不靠人自觉,也不靠模型的好意。
它是服务,不是你要维护的软件
浏览器登录 console.rulith.com,在客户端(Claude Code / Codex 等)加一行接入命令,智能体就有了这份记忆。换电脑、换会话、换客户端,记忆都还在——因为它住在板上,不在对话里。
接着给它装领域能力:你这一行的词与判据。现成的不够用,自己写。
对组织:这套纪律有完整形态
你在这份文档里遇到的每条纪律——结论只能推导、材料与结论永不混淆、收工要过闸、缺席不滑向通过——都是同一套治理结构的自助小号。
它的完整形态还包括:敏感动作的授权闸门(人不点头,动作不存在)、多智能体协作的委托链与验签、争议的独立仲裁、全程证据链的整体回放与审计包导出。这部分面向审批、金融、政务这类强问责场景,支持内网与本地部署,不在云上自助版里。
组织视角的完整介绍见 www.rulith.com。
content/*.md;能力清单、工具清单、字段矩阵由生成器从实现代码抽取
(快照在 facts.json)——改了实现而忘了改文档,校验会自己发现。