2026-07-22 第二十二阶段实时、环境与多 Agent 控制面深审记录
阶段结论
本阶段把实时会话、环境执行和多 Agent 协作中的“看起来已经发生”拆成可验证的不同事实:媒体/文本观察、模型提议、运行时状态、授权决定、执行 receipt 与人工对账不能互相替代。课程现在明确区分离线模拟器能证明的关联/状态合同,和生产系统仍必须由 adapter、IAM、持久状态、外部事实和人工控制证明的部分。
覆盖 实时多模态交互、环境型 Agent 与 多 Agent 协作。
本阶段不证明什么
离线事件、合成 JSON、单进程调度和 Quartz 构建不证明真实音频采集/播放、网络与设备质量、供应商会话恢复、真实工具或业务 receipt、用户身份、对象 ACL、审批签名、跨进程 lease、原子事务、人工对账、补偿执行或组织合规已经成立。它们只证明当前教学合同、失败路径和公开发布边界可以重复检查。
多 Agent 分工与主 Agent 复核
- 实时多模态专项:复核实时产品样例、媒体/控制/状态面、背压、断线恢复及离线会话项目;主 Agent 对 JSON 严格性、工具收据边界、状态图和测试计数做二次修复。
- 环境型 Agent 专项:限定在浏览器、桌面、编码、沙箱、恢复和评测页面,补身份、委派、凭据、审批、审计与并发恢复边界;不修改运行时项目的既有教学范围。
- 多 Agent 协作专项:处理委派、消息、冲突、停止、评测和离线调度器;主 Agent 统一新身份章节的学习顺序、
grant_ref术语及跨课程引用。 - 两个独立只读审阅:一组核对三门课程的事实、链接与合同闭环;另一组只审调度器的状态机、依赖传播、结果冲突和 CLI。所有 P1/P2 均由主 Agent 用窄范围实现、文档和负向测试修复后复核。
开始时工作树已经包含实时、环境与多 Agent 范围内的若干未提交编辑;本阶段没有回退或归属那些既有内容,只在逐页核验后补充/收敛实际发现的断点。
关键改动
实时多模态:严格输入、等待门与执行账本分层
realtime_session.py现在拒绝重复 JSON key、NaN/Infinity等非标准常量,并以allow_nan=False计算事件摘要和输出 JSON;嵌套工具参数也不能绕过有限 JSON 边界。WaitingTool已成为可测试的输出门:可声明额外调用、接收匹配结果、响应用户打断、断线或超时;在所有未决调用结束前,拒绝新的输入帧、输出音频和 response 完成。状态图、文字替代和回归测试同步说明这是本课程的阻塞式教学模型,不等同于全双工生产产品。- 明确模型
tool.call、应用内部执行 receipt 和离线tool.result三者不同。模拟器的简化事件只验证call_id + response_id关联,并从响应账本推导 turn;生产写操作仍需在执行边界复验授权/审批、持久化 intent/idempotency/receipt,并根据外部事实核对。 - 项目测试由 29 项增至 33 项,覆盖重复 JSON key、非标准数值、非有限嵌套参数、多个工具结果与工具等待期间的输入/输出拒绝。
环境型 Agent:计划、身份和环境能力不再混为一谈
- 统一交互契约新增“用户目标、模型计划、委派/策略、具体审批、adapter receipt”五类证据表;页面文字、屏幕头像、模型自述和已有登录态都只能作为 observation,不能升级为授权。
- 浏览器页面补齐动态 locator 与
locator.all()的边界;桌面页面明确窗口/可访问性信息不是业务主体或对象所有权证明;编码页面明确 Git linked worktree 保护工作树但不是进程、网络、凭据或仓库外文件的安全沙箱。 - 沙箱、审批与恢复页面加入主体—委派—凭据—审批链、最小审计留存,以及 generation 高水位之外的 worker lease/状态版本要求。评测页把功能、安全、隐私/审计、恢复和发布复现性分成独立证据维度。
多 Agent:委派不传递凭据,冲突不再伪装成成功
- 新增 身份、授权与跨边界信任,并把它排在委派合同之后、消息/共享状态之前。它区分角色名、运行主体、Agent Card、
grant_ref、审批和 receipt,说明 A2A Card 用于发现而不替代业务授权,MCP HTTP 不得透传面向其他资源的 token。 - 委派合同统一使用
grant_ref,强调它是策略/IAM 解析的无秘密引用,而不是 bearer credential;学习路线和掌握标准同步加入跨信任域与执行边界复验。 - 调度器现在将
failed、denied、blocked或needs_review的 pending 依赖后代传播到不动点,避免非拓扑声明顺序把上游失败误报为 deadlock。任务状态使用白名单迁移,仍只允许succeeded → needs_review这条冲突升级边。 - 同一
(task_id, idempotency_key)出现不同 payload digest 时,公开result被清空并标为result_trust: conflicted;result_conflicts只为合成教学数据深拷贝双方证据、digest、事件序号和状态版本。真实系统应改为受保护证据引用,隔离已经开始的下游副作用并由人工决定查询/补偿/撤销。 - 文档不再把 Python 的排序键 JSON 序列化称为跨实现 canonical JSON;跨进程实现必须固定并版本化自身 digest scheme。项目测试由 61 项增至 66 项,新增逆序三层失败/冲突传播、非法迁移和冲突结果隔离测试。
跨课程术语与状态边界
| 术语 | 本阶段稳定含义 | 不可错误替代 |
|---|---|---|
grant_ref | 指向策略/IAM 决定的无秘密、受限授权引用 | bearer token、角色显示名、模型计划或长期执行许可 |
tool.call | 模型或编排层提出的候选工具意图 | 已批准、已执行或已提交的业务事实 |
| 执行 receipt | 外部 adapter/目标系统对副作用的可对账证据 | 模型文本、离线 result 字符串或单纯连接恢复 |
payload_digest | 在明确算法、版本与值规则下绑定 payload 的摘要 | 未声明实现的“canonical JSON”或跨语言自动等价 |
needs_review | 运行时检测到互斥证据后的安全冻结状态 | A2A 标准任务状态、自动重试或默认失败回滚 |
state_version / lease | 防止旧 worker 或迟到写入覆盖当前状态的并发控制证据 | 单进程内存状态、checkpoint 签名或简单重连标记 |
来源、原创与第三方材料边界
本阶段新增中文解释、Mermaid 图、教学代码与测试均为原创;外部规范、论文和官方文档只用于核验事实/边界,未复制无明确公开再分发条件的正文。主要一手来源:
- W3C WebRTC、Media Capture and Streams、RFC 6455、RFC 3261、OpenAI Realtime、Google Live API 与 Full-Duplex-Bench;
- WebArena、OSWorld、SWE-bench、Playwright actionability、OWASP AI Agent Security Cheat Sheet 与 NIST AI RMF;
- A2A Protocol Specification、A2A Agent Discovery、MCP Authorization、MCP Security Best Practices 与 OpenAI Agents SDK。
验证证据
| 检查 | 结果 |
|---|---|
| 实时会话项目 | 33 项测试,normal、-O、warnings-as-errors、-O + warnings-as-errors 全通过 |
| 环境型 Agent 项目 | 103 项测试,同四种模式全通过 |
| 多 Agent 调度项目 | 66 项测试,同四种模式全通过 |
| 统一项目回归 | 202 项/模式,四种模式共 808 次测试执行全通过 |
| 静态检查 | 7 个 scoped Python 文件 AST、相关 Markdown/JSON 语义与 scoped git diff --check 通过 |
| 网站测试 | .website 中 npm test:48/48 通过;npm run build 成功 |
| 发布验证 | 924 个公开页面、231 个资源;0 个本地断链、禁止文件、敏感泄漏或 KaTeX 错误 |
后续队列
- 将实时阻塞式教学状态机映射到真实全双工媒体 adapter 前,单独设计 capture/playout/side-effect 并行状态、设备/网络试验和回退路径。
- 将环境型与多 Agent 的引用式授权接入真实 IAM、短期凭据、审批签名、lease/compare-and-set、受保护审计和业务 receipt,再测试撤销、并发恢复、补偿和跨租户攻击。
- 在 Obsidian 桌面端抽查新增 Mermaid、长表与 callout 的阅读体验;Quartz 的静态构建不能替代本地编辑/交互验证。
本记录只覆盖第二十二阶段,不表示长期 /goal 已完成。