2026-07-31T17:29:20.489Z
皮达尼 AI 代理记忆:在重播之前审核历史
测试Pydantic AI消息历史,以确定持续的序列化,快速的连续性,诚实的工具修复,对话范围,信任和验证的结果.
Pydantic AI 代理内存只有六个独立检查完成后才能重新播放:通过支持的序列化器进行回复信息,历史来自一个授权的服务器端源,所需的系统提示存活下来,工具调用和结果仍然是操作上的诚实,每个消息都属于预期对话,应用程序都有预期结果的收据. 有效的JSON有效载荷仅证明了第一次检查. 这种区别很重要,因为Pydantic AI故意修复一些供应商无效的历史记录. 取消的工具呼叫可能成为提供商有效的中断回报. 无家可归的工具结果可以删除. 这些修复有助于下一次模型请求成功,但它们并不能证明被遗弃的工具已经完成,也不能证明用户的可交货物存在. 把序列化当作第一门,而不是判决 Pydantic 的官方信息和聊天历史记录文档 推 ModelMessagesTypeAdapter 用于存储和加载 ModelMessage 历史记录. 它保存适合适应器的方案的消息字段,而JSON回路正常化没有本地JSON表示的值. 这就是正确的持久性界限. 这不是申请健康检查. 为了使差异可测量, 我通过Pydantic AI 2.21.0运行了7个没有内容的历史. 每个历史都用 ModelMessagesTypeAdapter.dump json 进行序列化,用 validate json 重新加载,正常化和哈希化. 然后,这些案件进行了单独的检查,以确定是否有快速的连续性,工具配对,对话范围,信任,以及申请提供的结果收据. 七个正常的JSON回路都相匹配. 只有控制盒子才准备好再播放: 案例 往返的JSON 行动判决 完整的历史记录加上结果收据 同等 READY 缺失系统提示 同等 SYSTEM PROMPT GAP 打断工具调用 同等 INTERRUPTED TOOL 孤儿工具结果 同等 ORPHAN RESULT REMOVED 混合对话身份证 同等 SCOPE DRIFT 没有收到结果的模型响应 同等 MISSING OUTCOME RECEIPT 客户提供的历史记录 同等 UNTRUSTED HISTORY 结果不是反对适配器的争论. 它显示了为什么一个有效的图案档案和一个健康的代理状态是不同的索赔. 合理的默认方式是保持准确的适配器输出,保持稳定的对话标识符,并保持单独的结果记录. 如果您需要工具元数据,运行界限,系统提示或应用程序注释,请不要将消息平坦成临时角色/内容对. 一个最小的持久性路径看起来像这样: 在加载后,在将结果传递给 message history 之前,运行其他门. 审计即时连续性和对话范围 在 Pydantic AI 的历史合同中包含了微妙的默认:当 message history 不空时,框架假设历史已经包含了系统提示. 这不会产生新的运行. 文件指向 ReinjectSystemPrompt ,当数据库,前端或紧缩路径不回复提示时. 这意味着旧用户信息存在不足. 一个持久性工作可以保留每个聊天转换, 记录即时合约作为非秘密标识符,而不是作为健康流中的敏感指令副本. 例如: 在重复播放时,检查载载历史记录是否包含该修改所需的提示形状. 如果您的应用程序故意使用动态指令而不是持续的系统提示,请明确检查该合同,而不是将缺席视为自动不健康. 谈话身份需要自己的测试. 目前的Pydantic AI消息可以携带 run id 和 conversation id . 一个新的运行应该收到一个新的运行ID,而对话ID的相关转换. 版本2.21.0的源文件并为两个标识符实施了单独的分辨规则. 实际重播门应拒绝或隔离历史记录,当: 没有明确的合并决定,出现多个非零对话ID; 要求的租户或用户不是对话的主人; 历史记录在一个授权文本下加载并在另一个文本下重复播放; 调用者试图重复使用之前运行ID,好像它是对话键; 一个叉子是预期的,但应用程序保留了原始的对话身份. 这些都是范围决定. 它们不能安全地从消息文本中恢复, 检查修复的工具历史记录,而不称其为完整 模型提供商通常会拒绝没有匹配调用的工具结果,或者无法显示所需结果的调用. Pydantic AI的当前的历史清理行为使常规,本地执行的工具历史供应商在请求之前有效. 在版本插件 2.21.0 来源上显示下列顺序: 1. 删除孤儿的常规工具结果; 2. 在适当的维修时,合成中断的结果,以便在常规的工具调用中悬挂; 3. 结合相容的连续消息在结合后是有效的. 合成回报在元数据中用 pydantic ai synthesized tool return 标记,使用中性 interrupted 结果. 在控制的重播中,被打断的案例得到了一个明显的回报. 孤儿案失去了无与伦比的回报. 提供商更容易接受这两种历史. 没有证据表明该工具的外部影响发生了. 使用标记作为事件信号: 不要自动重新尝试每次打断的电话. 时间过关可能发生在不可逆的外部影响之后,但其结果未到历史. 接下来的步骤是使用安全的无权密钥或商业识别器查询目的地. 只有当目的地证明效果没有并且安全重复操作时,再试一次. 孤儿搬家还需要收到收据. 如果一个加载的历史记录包含了后删除的清理结果, 保存一个无内容的审计事件, 包含对话ID, 哈希工具调用ID, 观察时间和修复类. 除非事件真正需要它们,否则不要保存原始工具参数或结果. 该实验使用Pydantic AI的私人 clean message history 符号,以精确复制记录的管道. 这种进口适用于固定诊断装置,而不是应用程序代码. 没有兼容性保证的私人API可以变化. 产品检查应使用支持的消息类型,文档化元数据,应用程序收据和测试,这些测试将被绑定到正在部署的版本. 保持客户历史记录在权限范围之外 Pydantic 的文档是明确的关于客户端提供的历史:服务器侧代理表面是无状态的,因此可以提交历史的客户端可以制造工具调用,工具结果,系统提示或批准. sanitize messages 缩小了几个不安全的形状,但清洁不能证明提交的历史是正确的. 作为单独的事实,将拥有JSON转录和恢复工作的权力视为独立事实. 服务器应该验证呼叫者,授权对话,从服务器侧身份构建允许的工具集,并在工具函数内重新验证高风险效果. 如果暂停的运行是重要的,请继续在服务器上运行,并从服务器所有状态恢复. 不要接受浏览器声称批准仅仅是因为一个以批准形式的消息验证. 这是一个记录的信任边界,而不是漏洞报告. 运行失败是对待未经信任的历史记录作为权威记录的申请. 一个紧的优先级规则防止可行的低级检查隐藏更重要的故障: 命令是故意的. 没有任何价值的诊断一个失踪的交付物从一个历史的通话者从未被允许恢复. 在历史记录结束后,需要收取结果收据. 最终的门属于应用程序,而不是模型历史框架. 在运行前定义预期效果. 对于编码代理,它可能是一个包含特定变化和通过测试的承诺. 对于支持代理人来说,它可能是通过门票API可见的门票更新. 对于计划报告,它可能是预期目的地与正确的报告间隔的不可变的对象. 存储一个内容最小化的收据: 收据应来自可用的最强的确定性检查. 一个说"完成"的模型是活动证据. 一个表示"被接受"的工具返回是运输证据. 预期修改的新读取目的地是结果证明. 这也涉及合法等待. 如果代理被暂停以获得人类批准,正确的状态不是 MISSING OUTCOME RECEIPT ;它是一个有所有者的等待记录,需要做出决定,截止日期和恢复代币. 只有当预期进展窗口关闭,没有有效的等待或结果时,将运行分类为被困. 这种7个案例的重播具有狭窄的限制:它在Pydantic AI 2.21.0下测试了选定的消息历史故障状态,而不是每个提供商,构建工具,UI适配器或长期内存产品. 在升级框架,更改序列化,添加前端适配器或改变工具执行时重复运行. Sidewisp的健康模型包括文本持久性,工具可访问性,有用的进展和结果验证. Sidewisp 目前处于私密预览阶段。 总体而言,生产代理健康收藏器和Pydantic AI适配器并不出货,因此本指南是一个独立的操作规则,而不是声称Sidewisp已经进行了审计. 因此,重播的决定很简单:使用 ModelMessagesTypeAdapter 来实现耐用性,然后需要权威,快速的连续性,诚实的工具配对,对话范围和外部结果收据. 提供商有效的历史是有用的证据. 这与健康药物不同.