Utopia决策台账完全指南:谁在何时改了什么,合规级可追溯性如何实现
【免费下载链接】utopia首个开源企业世界模型项目地址: https://gitcode.com/deeplethe/utopia
Utopia 是首个开源的企业世界模型,它的决策台账(Decision Ledger)把每一次确认、合并、驳回、删除都写成一条只增不改的审计记录,让"谁、在何时、对当时长什么样的对象、做了什么"永远可查。配合双时钟知识图谱,你既能回答"现在的事实是什么",也能回答"三月份我们当时信的是什么"——这正是合规级可追溯性的核心。
一、合规审计的三连问,台账逐一回答 🧾
审计师拿到一个知识库时通常只问三件事:
| 问题 | Utopia 的回答 |
|---|---|
| 谁做的? | 每条记录带操作者身份快照,用户停用后记录依然认得出人 |
| 何时做的? | 精确到时间戳,且区分"世界时间"与"记录时间"两个时钟 |
| 当时对象长什么样? | detail字段存变更前后的名称、类型、分数等要点 |
台账落在audit_events表里。三个设计细节决定了它的"合规成色"(见 0007_audit.sql):
- 裸 UUID,没有外键:删掉一个知识库或停用用户,不会连带抹掉审计历史——"删除"本身恰恰是最需要留痕的动作;
- 记录 IP 与 User-Agent:对齐 ISO 27001 A.8.15 对日志覆盖 Where/How 的要求,账号被盗用后能按来源 IP 排查异常活动;
- 数据库级触发器拦截 UPDATE / DELETE / TRUNCATE:台账只增不改,任何绕过应用的改库尝试都会直接报错。审计不可变性一旦有开关,就等于没有。
写入逻辑集中在 audit.rs,其中record_opt还会顺手拍下操作者的邮箱快照(actor_label),保证台账自包含:即使人员账户日后被停用,历史记录也不会退化成一串 UUID。
二、第二时钟可回拨:不只记录现在,还能"时光倒流" ⏱️
普通系统只留"现在的事实"。Utopia 给每条事实装了两个时钟:
- 世界时钟(
valid_from/valid_to)——这件事在真实世界何时成立; - 记录时钟(
recorded_at/invalidated_at)——系统何时知道、何时撤回了它。
修正一条事实从不覆盖,而是插入新行并指向旧行;撤回只是打上失效时间戳。读取侧的统一谓词held_at(T)(recorded_at <= T AND (invalidated_at IS NULL OR invalidated_at > T))让任何查询都能回拨到历史任意时刻——"2024 年 3 月我们信的是什么"从此有答案。完整设计见 0019-the-second-clock-can-be-rewound.md。
连"删除"都不是减法:删除文档只是打墓碑并作废对应事实,作废清单原样存档,撤销时按名单精确复活,见 0022_deleting_is_an_event.sql。
三、台账不只是给人看的:机器也读它 🤖
这是 Utopia 台账最有意思的一点——它是治理的输入,而不只是审计的输出:
- 先读台账,再做决定:自动裁决 Agent 合并实体前,会先查询"人在这两个名字上做过什么决定",只统计人类写下的记录,避免模型引用自己、越滚越自信。详见 0025-governance-reads-the-ledger-before-it-decides.md;
- 每个决定都带上"为什么":人工决策可填理由(
rationale),它同时写入台账事件的detail.why,之后的模型裁决会把理由原文引用进提示词。见 0026-a-decision-records-why.md; - 熔断机制:一周内 Agent 的合并被人工回退两次,自动化开关自动关闭并写入台账与告警——机器犯错,系统自己刹车,且这个"刹车动作"本身也在台账里。
四、审计师不用我们的 API 也能读:RDF 导出 🔓
台账数据的最终去处是导出。Utopia 支持把整个知识库流式导出为 RDF(Turtle / JSON-LD):
GET /api/v1/kbs/{id}/export?format=turtle|jsonld- 每条事实导出为带两个时钟、置信度、证据引文的语句;
- 血缘关系用标准 PROV-O 词汇表达,能从结论一路走到源文档的句子;
- 已失效、被撤回、被修正的历史版本恰好各出现一次,绝不会出现"看起来干净自信、实则一半事实三月已撤回"的误导性图谱。
设计理由完整记录在 0020-an-auditor-reads-it-without-us.md。
五、三分钟上手:跑起来并翻到你的第一本台账 🚀
获取 Utopia 源码后,只需一个二进制加一个 Postgres:
docker compose --profile app up -d打开http://localhost:1516,注册第一个账号(自动成为管理员)即可。之后:
- 上传文档、等待抽取,进入Review处理重复与低置信事实;
- 每次"保留 / 合并 / 确认 / 回退"都会留下一条台账事件;
- 在知识库的历史(History)页面翻页、按动作类型 / 操作者 / 时间段筛选——筛选能力由 list_for_kb 提供:前缀匹配动作族(如
entity.捞出一整族动作)、按人查操作、按时间窗复盘事故。
六、关键文件速查 📚
| 想了解 | 去看 |
|---|---|
| 台账表结构与不可变触发器 | migrations/0007_audit.sql |
| 台账写入与分页筛选 | crates/utopia-store/src/audit.rs |
| 双时钟与历史回拨 | docs/decisions/0019-the-second-clock-can-be-rewound.md |
| 治理读取台账 | docs/decisions/0025-governance-reads-the-ledger-before-it-decides.md |
| 决策理由与熔断 | docs/decisions/0026-a-decision-records-why.md |
| 审计师视角的 RDF 导出 | docs/decisions/0020-an-auditor-reads-it-without-us.md |
| 台账总体设计 | docs/design/ledger.md |
一句话总结:Utopia 的决策台账 = 只增不改的审计事件流 + 可回拨的第二时钟 + 机器可读的治理依据 + 标准 RDF 导出。谁在何时改了什么、为什么改、改之前是什么样——每一个问题都有留痕的答案。
【免费下载链接】utopia首个开源企业世界模型项目地址: https://gitcode.com/deeplethe/utopia
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考