GPT-6 Astra 中途转向机制解析:在智能体运行过程中实时更新
理解GPT-6 Astra在WebSocket上的中途转向:已接受、待处理、失败和转向事件、工具等待、提交点、恢复及用户体验设计。
| Source: Elser AI

长时间运行的智能体会产生一个用户体验问题:用户发现了一个错误的假设,但必须等待完成才能纠正。GPT-6 Astra 的中间转向功能允许客户端在响应进行中发送新的用户输入。服务器从当前响应过渡到包含更新的后续响应。
这不是普通的聊天续接,也不是通过新请求进行取消。它是一种带有确认机制、提交点和恢复规则的WebSocket协议。
要求与限制
OpenAI 文档中提及响应 API WebSocket 模式的引导功能。客户端会发送一个包含以下内容的 response.steer 事件:
type: "response.steer";previous_response_id,用于标识当前活跃的响应;input,包含用户角色的消息。
输入可能包含文本、图像或文件内容。请勿添加未记录的stream_id。转向目前仅适用于支持的标准单代理模式。绑定对话的响应和自动压缩不支持该功能,因此在架构设计阶段应在这些能力之间做出选择,而不是在生产环境中才发现冲突。
{
"headers": {
"row1": "标题1",
"row2": "标题2",
"row3": "标题3"
},
"rows": {
"row1": "这是第一行",
"row2": "这是第二行",
"row3": "这是第三行"
},
"videourl": "https://example.com/video.mp4"
}
{ "type": "response.steer", "previous_response_id": "resp_active", "input": [{ "role": "用户", "content": "使用欧盟政策版本,而非美国版本。" }] }
## 了解生命周期
.steer.accepted 表示服务器已接受转向输入的责任,但这并非最终提交点。后续的 response.created 事件才是提交的关键:请持久化该事件的响应ID,并将转向输入与后续事件关联起来。
主动响应随后可能以不完整状态结束,并显示 `incomplete_details.reason: "steered"`。这是预期的控制流程,而非应用程序故障。后续操作将继续执行更新。
其他事件也很重要:
.steer.pending:更新已排队,因为当前响应正在等待客户端拥有的工作;
.steer.failed:服务器无法应用更新;
- 断开前无确认:结果未知。
构建一个小型状态机,而不是将这些作为不相关的通知来处理。
## 工具运行时进行转向
如果响应正在等待客户端工具输出或审批,转向可以保持待定状态。服务器无法安全地虚构缺失的结果。请使用适当的桩代码和保留结果完成所需的协议,不要仅仅因为发生了转向就重新运行工具。
示例:用户在审批提示打开时引导“不要发送邮件”。拒绝审批并继续执行引导更新。如果邮件工具已执行且确认丢失,请先协调邮件系统。引导无法撤销副作用。
## 客户端状态机
功能强大的客户端可追踪:
1. 主动响应ID;
2. 转向消息ID和本地状态;
3. 是否已收到 `accepted`;
4. 后续的 `response.created` 是否提交了它;
5. 待处理的工具调用和审批;
6. 原始响应的终端状态;
7. 最后一个持久事件游标或应用程序检查点。
在用户界面中禁用重复提交,同时仍允许用户根据您自己的规则编辑或取代已排队的更新。显示“正在应用您的更新”,而不是假装第一次响应立即停止。
## 从断开连接中恢复
三种情况需要不同处理:
- **未接受事件:** 结果不确定。重新连接,检查可用的响应状态,避免盲目重新发送可能被重复应用的命令。
- **已接受,未观察到后续事件:** 服务器拥有该输入,但客户端缺少提交事件。在再次提交前,请恢复响应链。
- **已创建后继者:** 保留该ID并从中继续。
即使线路模式不将它们用作协议字段,也要在数据库中为转向输入提供客户端生成的ID。这有助于对UI操作进行去重,并审计用户更改的内容。
## 好与坏的使用案例
转向功能非常适合在研究中更改范围、修正来源、缩小搜索范围、添加缺失的约束条件,或在研究仍在进行时更改期望的输出。
它不能替代审批、交易回滚、权限检查或确定性取消。不要使用引导来授权支付,或假设正在运行的外部操作已停止。
## 测试尴尬的过渡
在文本生成、托管工具执行、客户端工具等待、审批等待、即将完成前以及网络中断期间模拟转向操作。验证工具未重复、接受的输入未静默丢失,且用户界面将输出分配给正确的响应。
跟踪转向接受延迟、待处理时长、后继创建延迟、原始响应状态、重复工具操作以及用户放弃情况。这些指标能够揭示转向是否真正改善了体验。
## 围绕所有权设计用户体验
界面应区分三个时刻。“发送更新”表示客户端已传输但未收到确认。“更新已接受”表示服务器已接收。“继续更新”表示已生成后续响应。这些标签使罕见的网络歧义变得可理解,而无需暴露协议术语。
保留原始回复已生成的可见输出,但如果修正使其失效,则将其标记为已取代。删除它可能会让根据所见内容采取行动的用户感到困惑;将其作为最终版本呈现则可能更糟。对于需要审计的工作,保留两个分支,并显示哪个后续版本成为权威。
谨慎处理快速编辑的去抖。两条转向消息——“使用法国”和紧接着的“使用德国”——可能会按顺序都被接受。如果你的产品只想要最新的指令,请实现客户端策略并进行沟通;不要假设协议会静默地合并更新。
为提升无障碍体验,在生成过程中仅播报状态变化,避免重复朗读完整回答。允许键盘用户在持续生成的同时操作转向输入,并保留清晰的停止控制。良好的转向设计既关乎交互体验,也涉及运输操控。
## 常见问题解答
### 转向与发送另一条消息相同吗?
不。它更新一个活跃的WebSocket响应并创建一个后续流程。
### `accepted` 是否意味着更新已完全应用?
不。将后续的 `response.created` 视为提交点。
### 转向能否取消外部工具操作?
不可靠。工具取消和副作用协调是各自独立的应用程序职责。
### 我可以使用自动压缩与转向功能吗?
官方转向指南指出,转向响应不支持自动压缩。请设计一个明确的上下文策略。
## 结论
中途转向使长GPT-6 Astra工作感觉响应迅速,但仅在客户端遵守其协议时有效。跟踪已接受、待处理、失败、未完成和后续事件;保留工具结果;协调不确定的副作用;并暴露诚实的UI状态。转向改变了代理的方向——它不会抹去分布式系统的现实。






























































































