ELAI S.r.l.

智能体执行中途换规则:更新的答案也可能不一致吗?

通过实际执行的流程区分一致性、新鲜度与授权:固定版本可防止混合结果,却不能授权使用过期规则行动。

智能体执行中途换规则:更新的答案也可能不一致吗?

问题不只是记住旧规则

智能体分两步准备请求:先检查数量是否允许,再用系数计算方案。两步之间规则库更新。每次读取都使用当时最新版本,却可能组合旧审批与新计算,得到任何完整规则版本都不会产生的答案。本文解释为什么“总读最新版”不等于“任务一致”。一个实际执行的小流程将帮助区分版本混合、规则过期与执行权限。

摘要。合成数量为900单位。v1允许最多1000且系数1,v2允许最多600且系数0.5。围绕两次读取枚举三种更新位置,比较读取当前版本与首次读取时复制快照。前者在三种时序之一产生混合结果,后者没有。这是构造时序的计数,不是实测错误率。另一个检查表明,即使版本一致,到行动时也可能已经失效。

正确有三种不同含义

读取一致性指任务使用相关规则的同一版本;新鲜度指与当前已发布版本的关系;授权决定在某时刻、某权限下是否可执行特定动作。三者不同:计算可以一致但陈旧,也可以使用新数据却组合错误。即使一致且最新,也可能因其他原因禁止执行。区分这些层次,才能避免赋予快照并不具备的保证。

为便于验证,我们去掉语言生成:“智能体”只是两个函数组成的确定性流程,不调用LLM、数据库或外部服务。这并非复现真实智能体全部错误,而是隔离读取与更新的相互作用。数字不代表实际企业或金融政策,只是约定单位和合成系数。因此可以计算完整结果表,而不虚构客户、操作或可靠性百分比。

两个完整版本与一个不存在的组合

规则是一对值:上限L与系数f。第一步返回q≤L是否成立;第二步计算方案y=qf,即使检查失败也计算,但此时只是诊断中间值,不是可执行订单。q=900时,v1得到(真,900),v2得到(假,450)。必须检查整对结果,因为单看每个分量都似乎合理。450属于v2,但v2不允许900单位请求。

v1: L = 1000, f = 1; F_v1(900) = (true,900) v2: L = 600, f = 0.5; F_v2(900) = (false,450) Mixed reads: (900 ≤ 1000, 900 × 0.5) = (true,450)

首次读取时v1有效,900≤1000为真。随后发布v2,第二步读取新系数0.5并计算450。每个函数都正确应用了自己读取的规则,但组合(真,450)不属于任一完整版本。无需模型幻觉,只要读取策略允许两个相互依赖的步骤更换规则基础,就足以产生错误。

所需性质可以表述为存在同一个版本标识v,两次决策读取都在v上解析。本例也检查结果是否属于{(真,900),(假,450)},但一般情况下仅看值不够,不同版本可能偶然产生相同数字。真实系统需要读取来源,而不只是把输出与几个预期值比较。

Read-consistency condition: ∃v such that version(read_i) = v for every relevant read_i

枚举更新,而非编造概率

对两次读取和一次更新,考虑三种串行时序:首次读取前、两次读取之间、第二次之后但潜在行动之前更新。总读当前版本会得到v2-v2、v1-v2、v1-v1,只有中间混合。这不是33%错误概率,因为没有定义时间分布或观察真实流量。所选三种位置中一个出错,只足以证明问题可能存在。

枚举假设上限与系数原子发布、读取串行、已发布版本内容不可变。若编辑器分别发布字段,源头就可能出现不一致;若保持v1标识却修改其内容,“固定v1”就毫无意义。因此任务快照的前提是完整发布单元,以及稳定指向不可变内容的标识。

首次读取时固定快照

第二种方法在首次读取时复制当前标识及两个值,同一任务后续步骤都使用该副本,即使全局指针切换到v2。更新早于首次读取时固定v2,其余两种固定v1。中间时序现在得到(真,900),与v1一致,却不是最新结果(假,450)。获得的是明确的读取一致性,不是自动获得新鲜度。

程序使用copy.deepcopy深拷贝,避免仅保留同一可变字典的另一个引用。真正不可变的版本也可以直接引用,这里复制是为了明确隔离。大型文档库无需每个任务都复制全部文本,可以通过版本清单、已标识索引和稳定内容地址定义读取集合。这些只是可能架构,不是实验已实现或测量的系统。

更新发生于此前方法读取版本允许方案值一致
1currentv2 / v2False450True
1snapshotv2 / v2False450True
2currentv1 / v2True450False
2snapshotv1 / v1True900True
3currentv1 / v1True900True
3snapshotv1 / v1True900True

表中1、2表示两步,3表示两次读取之后、假想行动之前。True和False是程序布尔值,不是置信度。current中间行读取v1/v2,允许为真却给出450;紧接的snapshot行保持v1/v1并给出900。没有干扰时两种方法结果相同。快照的益处是有针对性地消除混合,而不是任意改变所有回答。

一致的版本也可能不适合当前行动

全部按v1算完后,行动前当前规则可能已变为v2。结果一致,但900在新规则下不允许。正确行为取决于操作契约:允许按初始规则完成、要求重新验证,或立即撤销旧授权。不能只看数字选择政策,必须预先明确并与版本一起记录,而不是事后找理由。

Fresh-version gate = all read versions equal AND pinned_version = current_version Action authorization ≠ fresh-version gate alone

程序还计算版本检查:所有读取标识相同,且该标识在观察点仍为当前版本。这只是诊断过滤器。例如v2-v2通过版本检查,但允许为假,因此不授权行动。真实授权还需要检查结果、适用权限、资源状态及操作专属条件。一致性布尔值不能替代这些决策。

还有第二个竞态:检查当前版本后、真正行动前,规则仍可能变化。实验停在观察点,没有执行副作用,所以没有证明关闭了这段窗口。实现必须用适当原子或并发机制绑定重新验证与动作登记,或建立跨服务协议。写出“先检查再执行”两条语句,并不能证明原子性,也不能把小案例包装成安全保证。

与事务的类比有边界

PostgreSQL 18官方文档13.2提供了对照:Read Committed下连续SELECT可看到不同快照,Repeatable Read则使用事务中首次非控制语句的快照。我们也阅读了序列化局限。这有助于解释最新读取与稳定读取之别,但代码没有使用PostgreSQL或测量事务。跨工具应用快照不会因为引用数据库就自动获得隔离、回滚或可串行化。

智能体可能在索引检索文档、从API提取字段,再从另一服务读取权限。若来源独立变化,一个“版本7”标签不会让三者一致。必须定义兼容版本清单,或说明哪个权威来源界定决策边界。时间戳本身也不足以重建可用视图,除非其含义和可重建性明确。本单目录模型排除了这种复杂性,不能直接推广为分布式保证。

任务恢复与证据来源

若第一步后中断,恢复时加载最新规则可能重新制造混合。检查点应包含固定标识、相关输入和重新验证政策,但不意味着无差别保留全部数据,应在适用限制下选择重建决策所需信息。原版本不可用时,不能假装继续使用它,应明确按新版本重启,或依照政策停止。

交给生成器的片段也应有来源:哪篇文档、修订、索引及转换产生了证据?固定文档不能保证模型理解正确或每次生成同样文本。语言输出可复现还需要其他信息,并可能依赖基础设施。本结果仅涉及规则目录与确定性两步计算。明确边界使结论有用,而不是成为解释所有智能体错误的万能说法。

两步读取的规则版本,每行代表一种枚举更新位置。左侧读取当前版本,右侧首次读取固定快照。只有未固定的中间行发生颜色变化。坐标为事件类别,不是时间或概率。数据来自实际执行的合成流程。点击放大。
两步读取的规则版本,每行代表一种枚举更新位置。左侧读取当前版本,右侧首次读取固定快照。只有未固定的中间行发生颜色变化。坐标为事件类别,不是时间或概率。数据来自实际执行的合成流程。点击放大。

检查代码及证明边界

run接收更新位置与pinned布尔值,总从v1开始,在指定位置切换指针,并记录实际读取标识。快照仅在首次读取创建。程序测试六例,断言当前读取的一次混合与固定读取的零混合,并保存值、版本、行动点状态及版本检查。没有线程或计时等待,用串行安排让真实并发干扰可以重复验证。

对S个数据进行n次读取,物化快照需要O(S)时间和内存,再执行n次访问。本例S和n都为2,但不能据此声称多少毫秒。引用不可变对象可改变复制成本,而未必改变逻辑一致性。真实评估应分别测量版本留存内存、视图获取、发布滞后与重新验证成本,并与回答质量区分。

扩展证明应寻找反例,而非重复有利案例。更多读取可在每个间隔安排更新,也可删除版本、制造索引不匹配或中途撤销权限。这些只是建议测试,不是已执行结果;JSON仅含声明的六次执行。我们没有测量数据库延迟、LLM准确率、工具安全或真实用户行为。

答案:推理时稳定,行动前另行检查

答案是肯定的:每次读取都最新,也可能得到不一致答案。本例混合v1审批与v2系数,产生不存在的组合。任务快照防止这种特定基础切换,使推理可重建,但不决定行动时继续使用该版本是否合法。因此一致性、新鲜度和授权必须分开回答。它不证明EL-AI已有此功能,而提供可复现实验和需要在具体系统验证的架构区分。

PostgreSQL18 documentation §13.2 Transaction Isolation: Read Committed, Repeatable Read, Serializable; primary documentation read16October2026.

from experiment import run
for when in [1,2,3]:
    for pinned in [False,True]:
        x=run(when,pinned)
        print(when,pinned,x['read_versions'],x['approved'],x['quote_units'],x['coherent'])

代码、数据与说明 · JSON. 教学计算使用 Python 3.14.0,图使用 Matplotlib 3.11.2。分析由 AI 辅助,不声称经过同行评审或人工审核。原创 ImageGen 封面仅作示意,不记录 EL-AI 人员、场所或实际安装。来源查阅于 2026 年 10 月 16 日。