在你的技术栈某处,一个智能体已经生成了那个数字——某天它将出现在审计员面前。它计算出了这个数值,或者说生成了它;你或许并不清楚是哪种情况。有人将它粘贴进了一份演示文稿,文稿就此发出。数月后,每个生产级 AI 系统迟早都会面临这个问题:这个数字从何而来,今天重新运行还会得到同样的结果吗?
大多数团队的回答是一份对话记录。2026 年第一季度对 420 家在生产环境中运行 AI 智能体的组织所做的调查显示,仅有 17% 的组织能够在事后重建特定智能体任务背后完整的工具调用序列、输入与输出(AgentNode, 2026)。其余 83% 的组织要么日志不完整,要么根本没有日志,要么日志只记录了模型的推理过程,而非实际调用的内容。一份记录加上一种感觉。
记录正在成为法律
这曾是一个工程层面的尴尬。它即将成为法律层面的麻烦。
EU AI Act 要求高风险 AI 系统在技术上必须支持——内置而非事后附加——"在系统生命周期内自动记录事件(日志)"(European Commission, 2024)。人工记录无法满足第 12 条的要求。日志必须足以识别可能存在风险或重大变更的情形,支持上市后监控,并记录系统的实际运行方式。对于远程生物特征识别,该条款明确列出了最低要求:每次使用的时段、所查询的参考数据库、导致匹配的输入数据、核验结果的自然人身份。这不是"保留一些日志",而是重建决策过程。
时间节点已近在眼前。该法案于 2024 年 8 月 1 日生效;禁止性规定自 2025 年 2 月起适用,通用目的模型义务自 2025 年 8 月起适用——而高风险义务(包括第 12 条)自 2026 年 8 月 2 日起适用(Future of Life Institute, 2026)。距本文发布日期仅剩八天。嵌入受监管产品(附件一)的高风险系统则于 2027 年 8 月起适用。
留存期限也有下限。提供方必须将自动生成的日志至少保留六个月,第 26(6) 条对部署方规定了对等义务——如 GDPR 等其他法律有更长要求则从其规定,且在任何情况下均应与系统的预期用途相称,而非仅满足最低标准(artificialintelligenceact.eu, 2024)。
这一切并非凭空而来。GDPR 第 30 条自 2018 年起便要求以书面形式记录处理活动——目的、数据类别、接收方、删除期限、安全措施——并应监管机构要求随时提供(gdpr-info.eu, 2016)。SOC 2 的 CC7.2 要求监控系统组件的异常并分析发现的问题;CC7.3 要求评估某一事件是否损害了既定目标(AICPA, 2022)。在 Type II 审计中,这些标准须以覆盖整个审查期的日志证据加以验证——通常长达十二个月(AgentNode, 2026)——而非审计员到访当天的一张截图。
为何"多记日志"行不通
本能的应对是冗余记录:开启追踪、存储一切、购置仪表盘。但三个问题依然存在。
对话记录记的是说了什么,而非运行了什么。 聊天日志是模型对自身行为的叙述。在上述 83% 中,有一类情况正是如此:推理过程被记录,工具调用却没有。当叙述与执行不一致时,对话记录面不改色——计算所得与生成所得在页面上看起来别无二致,但二者并不相同。
无法重新执行的日志是证词,而非证据。 即便是记录了每次工具调用的团队,通常也无法重新运行并加以比对,因为没有任何东西固定了当时的运行环境。SQL 是当天即时生成的,针对的是此后已发生变化的数据库;算术结果是从一个本就不稳定的模型中采样得到的。将这些内容保留六个月乃至十二个月,不过是将声明存储得更久,而非使其可被核验。第 12 条的措辞十分精确:系统必须在技术上支持记录。未经设计内置的可重现性,无法通过日志库事后补救。
元数据不等于正确性。 最低可行的审计记录——六个核心字段,包括追踪 ID、时间戳和智能体身份(AgentNode, 2026)——确立了"谁"与"何时",却对数字是否正确、今天重新运行是否会得到相同结果只字未提。关于 LLM 智能体可观测性的研究也得出了相同结论:可追溯性必须覆盖整个智能体生命周期的产出物,而不仅仅是消息本身(CSIRO Data61, 2024)。
问题出在结构上。自由形式的执行——模型输出字符串,由其他组件运行——无论记录多少,都无法产生足够稳定的内容供记录之用。
将溯源作为结果的组成部分
SQAI 的解决方案是将记录作为执行的属性,而非日志的功能。每个已执行的结果携带四个哈希值,各自回答一个独立的审计问题:
contract_hash— 可以运行什么:当时生效的精确能力契约(sha256:79f1c5a6c716…)。plan_hash— 请求解析为什么:经过验证的计划,及其解析记录(decision_path: "exact_spec")。invocation_hash— 在什么条件下运行了什么:能力加上规范化后的输入,包含数据当时状态的input_hash。computation_hash— 输出了什么:与调用和值共同绑定。
这些构造采用域分离,因此任何产出物都无法冒充另一个:
invocation_hash = sha256("sqai:invocation:v1\0" + canonicalJson(identity))
computation_hash = sha256("sqai:computation:v1\0" + invocation_hash + canonicalJson(value))
哈希值之外还附有确定性信封——记录的执行环境:runtime_bundle_version 0.1.0 及其 sha256、平台与架构、precision_mode: float64、thread_count: 1,以及在需要时使用的随机种子。十个需要种子的模拟能力在未提供种子时拒绝运行——seed_required,而非静默地给出不同答案。所有可能影响数字的因素,要么被固定,要么被记录在案。
以下是这套机制的具体价值。三月,一个智能体计算了一个净现值:
finance.npv(0.1, [-1000, 300, 420, 560, 680])
→ 505.020148896933
computation_hash b74f67d0d7a594aa…
七月,审计员提出质询。你回放该调用——相同的类型化规范、相同的固定运行时——并比对哈希值:再次得到 b74f67d0d7a594aa…,逐字节一致。无论回放在 TypeScript 还是 Python 中运行,结果都不受影响。canonicalJson 与 canonical_json 是跨语言的序列化契约——键名排序、-0 规范化为 0、固定的 Unicode 转义——因此相同的值在两种语言中产生相同的字节,进而产生相同的哈希。确定性页面并排展示了两个相隔数月的信封。
而当回放不匹配时,这本身就是信号。数据源发生变化会以 schema_revision_mismatch 明确报错——引擎拒绝针对不同数据静默计算出不同数字,再将其归因于过去。不匹配的结果会指明是什么发生了变化。
将这一机制对应到合规义务上。在系统生命周期内自动记录:每个已执行的结果在构造上即自我记录——不存在未被记录的执行路径,因为执行面是 4,574 个具有类型化输入的只读能力,而非自由形式的字符串。六个月或十二个月的留存:存储结果信封;留存变成了一个存储决策,而非一场考古工作。覆盖 SOC 2 审查期的证据:产出物本身就是证据——对审计员的回答是一次回放,而非一次调查。同一条流水线为每个能力生成记录,持久化审计追踪随 SQAI 的 Pro 版本一同提供。
八天之后,以及此后的每一次审计
八月的日期正式约束欧盟境内的高风险系统。但这类截止日期为此后所有审查设定了模板——SOC 2 审计员、采购问卷、你自己的 CFO 在三月追问一月某个数字的来源。智能体将被要求像员工一样为其答案提供依据:以记录为凭。大多数技术栈无法做到这一点,因为生成的 SQL 和采样的算术结果没有留下任何足够稳定的内容可供记录——这个问题早在审计之前就已存在。
能够回放的答案,才是能够捍卫的答案。其他一切,不过是截图。