Skip to content

Latest commit

 

History

1,420 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

司衡引擎

如果你让 AI 写过代码,一定体会过一件事:它太快了。

快不是优点。当做出来的速度超过人能看懂、能核账的速度,项目里就会出现一条「缝」——AI 每快一步,缝就大一分。最后你得到一堆能跑的东西,但说不清进度到哪、哪里可靠、哪里埋了雷,甚至说不清它当初为什么那么做。

司衡(司,是执掌;衡,是秤杆)就是放在你和 AI 之间的一层「质检加记账」。AI 不因此变慢,它也不替你思考,它做三件事:

  • 开工前,逼 AI 把「怎么算做完」说清楚;
  • 干活时,由另一套程序(不是 AI 自己)检查每一步动没越界;
  • 干完后,把发生过的事记进一本改不掉的账。

你不用看日志,不用逐条审查改动。你只看三样东西:定期报告、告警、以及系统拿不准、必须你来拍板的那几件事。

这页写给不细究技术的人。读完它,你就够格判断这东西值不值得用;要动手装的所有细节都在附录。

「盯紧点」为什么不行

遇到这类问题,人最常见的反应是:安排人盯紧点。我们试过,结果是写在记录里的:

规则书挂在它眼前 73 次,执行了 0 次。 我们给 AI 写过一份自检清单,要求它每次交付前过一遍。一个会话里,这份清单在它眼前出现了 73 次,实际执行了 0 次。追问时它第一反应是「我这次根本没读过这份清单」——核实之后,连这个说法都是假的。

「我保证」不是机制。 被指出问题后,它诚恳道歉,承诺「以后先查再写」。我们只问了一句「你如何保证」。它想了想,自己承认:如果「我保证」能解决问题,这个问题一开始就不会发生。承诺在说出口的那一刻是真的,在执行的那一刻不是。

它不翻手册,现场发明。 让它定一条规则,它现场发明了十个版本,全被推翻。而项目的手册里,早就有一页写着答案——它从头到尾没翻到那一页。

这类系统的第一版就是我们自己做的,验收全靠人:每份文档要人工审几十轮,最后审查速度追不上生成速度,整个东西报废重来。后台还有一个程序,悄悄跑了 12 天没人发现,找到它的时候已经占着端口跑满了期。前后废弃了六个版本,共同的原因是一条:每次都从工具开始建,而不是先想清楚问题是什么。

由此得到一个结论:AI 的自觉是状态,不是机制。唯一的出路是把约束移到 AI 外面——让程序检查,让程序记账,让人只看程序消化不了的那部分。

这些翻车的完整版在仓根的 RANTS.md——帖子体、emoji 管够,六个编号翻车加六废仓大结局,同样的材料,写得是给人解闷的。想看细节怎么翻的,先读它。

两路思想

这一版是从一套思想开始的,工具是最后才长的东西。思想写在独立的哲学仓里,逐条立过、核过。最重要的几条,用大白话说:

发散自-然,收敛必-为。(第一道) 放任不管,任何东西都会散:代码散、需求飘、文档旧。散是自动发生的,收拢必须有人刻意使劲。这个系统干的大部分活,就是那个「刻意使劲」。

意图先于代码。(第二道) 因果方向是意图到代码,反不过来。所以这系统开工前先问「怎么算做完」——因为事后的代码,反推不出你当初到底想要什么。

必有间隙,控制间隙。(第四道) 信息论早就证明了:任何写下来的规格,都不可能完美装下你全部的意图。要求和做出来的东西之间有间隙,是必然的,而且会随时间越长越大。所以这系统不追求百分之百对齐,只做两件事:定期量间隙,间隙大了就压回去。

做的不等于验的。(鉴) 让 AI 自己验收自己的活,它永远打满分。这里所有的核验都由另一套确定性程序做:只看事实,不看是谁做的,把「实际发生了什么」和「它认为这意味着什么」分开说。AI 的自我报告是证据,不是结论。

注意力是最稀缺的。 人的注意力是固定预算,摊在每一处改动上就到处稀释,越看越没用。所以设计规则是:系统自己消化绝大多数操作,人只在收到告警时出手。

有了它,AI 干活长什么样

拿「让 AI 加一个功能」举例,一件活走五步:

一、先立验收标准(三问)。 开工前把「我要什么」拆成一条条能核对的问题,拆到能回答「怎么算做完」为止。标准写进账本,事后不能改。做完之后说「我本来想的是另一个意思」,不算数。

二、开工单(租约)。 动任何东西之前,先申报:这次改哪些文件。系统把这些文件锁住,别的 AI 会话想动同一批文件,要么排队要么被拒。收工时逐文件对账:账上没有、文件里多出来的改动,会被点名。多个 AI 不互相踩脚、越界的动作被抓出来,靠的都是这张工单。

三、执行与评审(得一)。 AI 在工单范围内干活。遇到需要技术判断的地方(比如选哪个方案),系统让模型独立作答五遍,答案一致才放行,判定由程序按事先定好的规则执行;不一致就交给人,不让它自己掷骰子。你不用看懂方案细节,也能拿到一个不靠单次运气的结论。

四、收工对账(闸门)。 干完了,程序机械地查:规格是不是先立了?测试有没有?改动有没有出范围?没有一项靠 AI 自评。不懂编程的人照着模板走,也能做出流程、规格、测试、记录齐全的活——但代码本身写得好不好,这系统不保证。

五、记账(书简)。 谁、什么时候、改了什么、为什么,全进账本。账本是一本「哈希链」:每一页和上一页咬合,改任何一页,重算整本账立刻露出来。多个 AI 协作的依据不再是互相盯着,是对着同一本账核对。

两件事不在流程里,全程都在跑:

定期体检(巡检)。 程序定期回算项目的现状:做完了什么、在做到哪一步、什么烂尾了,给你一份报告。你只看报告,不翻日志。

入职翻档(温故)。 所有决策、所有变更、所有原因,可以按主题、用词、事件、时间去查。新接手的 AI 会话靠翻档了解项目,不靠你从头讲一遍。

「问五遍看一致」为什么不是玄学

看到「独立答五遍,一致才放行」的人都会问:这不就是掷骰子吗?

这系统旁边有一个数学仓。每一个看起来像仪式的判定,都有推导在案,每一条结论都能由程序重新算出来:

  • 为什么问五遍等一致——概率论里,独立多次采样会收敛到正确答案。它压的是单次运气的随机误差,不是系统性的错;所以不一致时交给人,不让它继续掷。
  • 为什么必须定期体检——数学把「规格和实现之间的间隙」建模成随时间增长的东西,越长越大。所以不能「最后查一次就完事」,必须定期量。
  • 为什么人只看告警不看日志——信息洪流会结构性地稀释人的注意力预算,日志看得越多,有效注意力越少。
  • 为什么锁不会死锁——多文件加锁按一个数学上证明过不会死锁的方案分配。

所以在这系统里,「机器说没问题」不是 AI 说没问题,是程序重新算出来的结论。这页正文里的说法也一样:装好之后,两条命令就能亲自把账本和现状重算一遍,附录 A。

丑话

说清楚:这套东西约束的是「走门」的 AI——通过标准工具接口接入系统干活的 AI。

  • 不走门、直接动手改文件的 AI 或程序,拦不住。
  • 门内的坏动作(比如申报范围内偷偷删掉一道检查),不保证当场被识破。

但拦不住不等于看不见:

  • 没过闸的改动,下次定期体检会被点名,叫「无主改动」。
  • 历史被篡改,重算账本,整本露出来。
  • 走了门的每一步,都留了改不掉的痕。

要防机器被砸,那是文件权限和备份的事,另一层的活。

什么时候不需要它

  • 玩具项目,写坏了扔了重来。治理的手续成本会超过好处。
  • 你不在乎「谁什么时候改了什么、为什么」。
  • 你想让 AI 天马行空地探索原型。这套东西约束的是严肃交付,不加速探索。

它给的是:错误代价高、且「说得出历史」本身就是要求的项目。不在这条线上的,关掉这页,省你功夫。

你要做的事

三件:

  1. 拿到程序。 一条编译命令,之后全部跑在你自己机器上,不依赖云服务。
  2. 指向你的项目。 在你的 AI 客户端设置里加几行:程序在哪、管哪个项目。第一次连接时它会自动在该项目里建一个「治理空间」——做了什么会当场在终端里说明白,不藏;治理数据不进你项目的版本管理,公开项目也能用。
  3. 照常干活。 你像平时一样跟 AI 对话。立标准、开工单、对账、记账都自动发生。你看到的是:报告、告警,和偶尔必须你拍板的事。

具体配置和验证命令在附录,懂技术的人十分钟装完。


附录:给要动手的人

A. 安装与验证

git clone <仓库地址>
cd sih-engine
cargo build

工具全在 target/debug/ 下。两条验证命令:

# 验链:把最近一天的治理链整条复算,status valid 即完整未篡改
latest=$(find sih/event/trail -name '*.ndjson' | sort | tail -1)
target/debug/scribe verify --trail "$latest"

# 巡检:按六个判据回算当前治理状态(达成/在飞/沉底)加未决事项路由
target/debug/critsweep --at $(date +%F) --root ..

critsweep 的 --root 指工作区根;只克隆了单仓的话,在飞面降级并如实显示,不假装正常。要看系统治理一个真实项目的完整样子,读 doc/guide/user-guide-v1.md,半小时跟完一个真实批次。

B. 接入你自己的项目

司衡治理研发流程,不接管代码。在 AI 客户端的 MCP 配置里加这段(路径换成你机器上的绝对路径):

{
  "mcp": {
    "servers": {
      "sih": {
        "type": "stdio",
        "command": "<引擎仓绝对路径>/target/debug/sihmcp",
        "env": {
          "SIH_ROOT": "<你要治理的项目根>"
        },
        "enabled": true,
        "timeoutMs": 60000
      }
    }
  }
}
  • 首次连接自动开域:SIH_ROOT 指向尚未治理的 git 项目时,自动签发标识(绑定治理空间,不是密码)、建 sih 治理树、开域上链并自验,全程无需浏览器,动作在 stderr 如实告知
  • sih/ 自动写入 .git/info/exclude,治理数据不进 git
  • SIH_ROOT 显式指项目根最稳;不写则从当前目录向上找标记
  • SIH_MCPLINE_CODE_ROOT 指引擎工作区,写面的书简与租约程序从这里解析;同源布局时可省
  • 多个项目多段配置,一个客户端对应一个项目
  • 手动开域:target/debug/sihmcp bootstrap <项目根> --by <事由> --token-id <短串>;或起本地管理台 SIH_TRANSPORT=http target/debug/sihmcp,浏览器开 http://127.0.0.1:8765/tokens
  • bootstrap --client-config 生成的是 HTTP 形配置(走 8765),stdio 照上面手写,两形不混用;多域接入与令牌管理台见 doc/design/DES-015

接入后按 doc/guide/agents-template-v1.md 模板裁剪会话启动项。日常运行无后台服务、无监听端口。一页纸走读在 doc/guide/adoption-guide-v1.md(其第二节「先签发后 init」为旧序列,已被现行签发闸取代,以本节为准;指南修订候裁)。

C. 工具清单

只读九个:chain_query(查链)、chain_verify(验链)、critsweep(巡检)、heartbeat(心跳)、locks_read(锁面读数)、retriever_recall(档案检索)、naming_guide(立名指引)、nomenclator_query(查词)、nomenclator_check(文档核查)。

写十个,全部要求先 lease_open 立会话,未立会话一律拒写:lease_openrecord_intentrecord_appendrecord_parklease_locklease_unlocklease_wait_turnlease_claimlease_commitlease_close。本地可信环境另有 record_directlease_unclaim 两个直写位。三个 record 是三类留痕:意图、事件、停泊。逐件契约见 doc/spec/SPEC-023。

D. 仓内地图

位置 干什么
src/ 引擎库:正文所述各机制加 MCP 服务端
src/bin/ 命令行工具:lease、scribe、critsweep、pendline(候裁处置编排)、identity 等
sih/event/trail/ 治理账本(哈希链),一天一文件,只经 scribe 写入
sih/state/parking/ 未决事项的停靠区;historic/ 存已办结归档
packs/ 规则、格式、路由的纯数据包
doc/ 治理文档;doc/guide/ 入门,doc/decision/ 决策档案

配套 sih-tools 仓已冻结为只读参照;正式工具全在引擎 target/debug/ 下。

E. 司衡的词,人话版

人话
租约 lease 一张工单的完整生命周期:申报开工、租内锁定、提交、收工对账
书简 scribe 账本上记事的唯一入口
泊界 parking 未决事项的有界停靠区,进出都记账
判据扫 critsweep 定期把项目现状回算一遍的机械体检
得一 attractor 多个独立评审,一致才放行,不一致交人
执契 tally 确定性核对与终签脚本,人和 AI 都不能代签
检词 nomenclator 术语登记册加文档用词核查
核阅 scrutinator 文档规则核验;程序本体不带规则,规则全在数据包里
围堰 先在引擎外孵化、验证后再并入的隔离区
红证 失败的测量、对自己不利的读数也入档,事后不删不改

F. 五条设计信念

  1. 治理操作只由确定性程序执行。LLM 只生成材料,没有写入权。
  2. 人的注意力是稀缺资源。生成与审查的速度差是结构性的,上一代系统用报废换了这个教训。
  3. 人只在收到告警时介入,不看原始日志。
  4. 所有写入可追溯、可机械校验,历史不可篡改。LLM 不可复现的输出不作为最终依据。
  5. 治理能力的方向是减少 LLM 参与,不是增加。不生成不等于不引导:引擎用前置约束、意图锚定、上下文加载锁定生成的方向。

完整正文在 doc/governance/BASELINE-v1.md,哲学推导在 sih-philosophy 仓,不读不影响使用。

G. 再往下读

  • 轻松版:RANTS.md,AI 结对编程翻车实录,吐槽体
  • 使用者入门:doc/guide/user-guide-v1.md;贡献者指南:doc/guide/contributor-guide-v1.md
  • 哲学仓 sih-philosophy/:正文「两路思想」的命题原文与推导
  • 数学仓 sih-math/:正文「问五遍为什么不是玄学」各条的推导档案
  • 决策档案:doc/decision/(MCP 载体 023、SDD 完备度闸 024、stdio 接入 026)
  • 失效案例全档:本工作区 ai-ex/(仓外),正文三个故事的出处

About

No description, website, or topics provided.

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages