Codex MultiAgentV2 加密与审计追踪的丢失
Codex MultiAgentV2 加密与审计追踪的丢失
MultiAgentV2 消息加密导致本地可审计性降低
Codex 在 MultiAgentV2 中引入了对子代理(sub-agent)提示词的加密,这有效地从本地 rollout 历史、trace 缩减和调试界面中移除了人类可读的任务和消息文本。虽然这一变化作为模型间通信的隐私强化措施,但它通过在父级日志中用密文替换明文指令,导致了审计能力的倒退。
此问题影响合并了 PR #26210 之后的 Codex CLI 版本(post-0.137.0),并特别影响 MultiAgentV2 框架内的 spawn_agent、send_message 和 followup_task 函数。
技术根本原因:不透明的消息负载
这种倒退源于 InterAgentCommunication::new_encrypted() 的实现,该函数刻意将 content 字段初始化为空字符串,并仅将负载存储在 encrypted_content 字段中。
当系统通过 to_model_input_item() 将这些通信转换为模型输入项时,它会检查 encrypted_content 的存在情况。如果发现,它会发出一个 AgentMessageInputContent::EncryptedContent 项。因此,接收模型会在服务器端接收密文进行解密,但依赖于这些相同项的本地历史记录仅记录了加密字符串。
因此,开发者无法再轻松回答关键的调试问题,例如:
- 在
spawn_agent调用期间,分配给子代理的具体任务是什么? - 向子代理传输了什么确切的消息?
- 为什么在 rollout 后的审查中创建了特定的子线程?
建议的修复方案:双内容契约
为了在不损害加密传输路径的情况下恢复审计能力,建议采用“双内容”方法。这涉及在保留用于模型交付的加密负载的同时,引入一个单独的、非加密的字段用于本地审计。
实现规范
- 必需的明文字段:为 v2 通信工具添加一个必需的明文伴随字段(例如,
spawn_agent、send_message和followup_task中的task_message)。 - 验证:在处理程序边界拒绝空的明文审计值,以确保日志保持有用。
- 双重构建:使用
encrypted_content(用于接收模型)和content(用于本地审计副本)同时填充InterAgentCommunication。 - 保留交付方式:保持
to_model_input_item()不变,以便接收模型继续仅接收密文。 - 审计持久化:确保明文伴随字段在父级工具调用、rollout 和结构化 trace 边中得以持久化。 n6. 关联性:使用密文或唯一 ID——而不是明文相等性——来将工具调用与交付的子项匹配。
社区观点与影响
加密子代理提示词的引入引发了关于现代 AI 编排器“黑盒”性质的重大讨论。
隐私 vs. 透明度
一些用户认为这是防止请求被代理用于训练竞争对手模型或保护专有推理过程的必要步骤。一位用户将其比作 Claude 处理“思考”密文的方式:
"Presumably the thinking is either considered proprietary, or, more likely, leaks embarrassing or confidential information."
安全与安全担忧
其他人认为,失去对子代理指令的可视化会带来安全风险。有人提出了一个关于报告的事件的观点,即一个 GPT 5.6 子代理据称删除了用户的家目录,问题在于缺乏对子代理意图的可视化是否导致了该失败。
战略锁定
有一种普遍的情绪,即这些变化旨在通过使代理的内部推理和编排对用户不透明,从而增加供应商锁定,有效地将行业推向“黑盒家电”模型,即用户提供数据和支付,却无法看到执行过程。