找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3294

积分

0

好友

440

主题
发表于 11 小时前 | 查看: 3| 回复: 0

昨天凌晨,OpenAI 官方宣布了一项新特性:Responses API 正式支持 WebSocket 模式

OpenAI官方关于Responses API引入WebSocket支持的公告截图

这个模式是专门用来解决超复杂的 Agent 调用问题的。在以前的多轮对话场景,或者需要让大模型频繁调用一系列工具(Tool call)时,HTTP 模式有个明显的痛点:每次请求都得把完整的历史记录全部带上。

一旦涉及长线任务,比如自动化编程、多步推理的复杂 Agent 编排,模型与工具间来回交互可能多达二三十次。

举个例子,当你给 AI 下达指令“帮我写个爬虫,并用 Vue 写个前端可视化图表”,它可能需要经历以下步骤:

  • 调用搜索工具,查询目标网站结构
  • 调用代码编写工具,撰写抓取脚本
  • 调用本地终端运行代码
  • 运行发现报错,将报错信息返回给大模型
  • 大模型分析报错,修改代码后再次运行
  • 循环往复,直到程序跑通
  • 最后开始编写前端部分的代码

即使是这样稍复杂的任务,大模型与本地工具间的交互次数也很可能超过10次。

如果沿用传统的 HTTP 模式,这数十次交互中,每一次请求都必须将前面所有的对话记录、已编写的代码、报错信息完整打包,再次发送给 OpenAI。随着上下文越来越长,请求数据包会不断膨胀,延迟也随之攀升。

而这次推出的 WebSocket 模式,正是为了解决这个“又长又重”的痛点。其核心思路是:保持长连接,只传输增量数据

根据官方发布的数据,在涉及20个以上工具调用的重度工作流中,端到端执行速度提升了约 40%

WebSocket模式性能提升说明:减少每回合开销,提升端到端延迟

对于开发复杂AI应用的同学来说,这无疑是一个巨大的性能优化。

优化差异对比

为了让优化效果更直观,我们可以通过一个简单的对比图来理解网络开销的变化。

HTTP模式与WebSocket模式网络开销对比示意图

在 HTTP 模式下(左侧)

  • 第1次请求:发送 100 个 Token,返回 50 个 Token。
  • 第2次请求:需要带上第一次的对话历史,因此发送 150 个 Token(增量50+历史100),返回 50 个 Token。
  • 第10次请求:你需要把前面所有交互产生的几千个 Token 全部发送过去。

本质上,HTTP 是无状态的。这意味着即使你只新增了一句“这行代码报错了”,也必须背负着此前累积的数千字“历史包袱”,重新传输一遍。

在 WebSocket 模式下(右侧)

服务器在内存中维护了你的会话缓存。

  • 第1次交互:发送 100 个 Token。
  • 第2次交互:你只需发送新增的这一句话,外加一个标识上次会话的 ID。服务器能瞬间从内存中检索并接续之前的上下文。

这种方式不仅节省了网络传输的时间,更重要的是极大地降低了服务端每次请求时的“冷启动”解析延迟。

到底怎么用?

官方文档已经给出了示例代码。接入成本其实很低,核心就是建立 WebSocket 长连接,然后发送特定格式的JSON数据。

Node.js 来实现非常简单,下面我们来看具体步骤。

第一步:建立连接并发送初始请求

以前是发送 HTTP POST 请求,现在需要改为使用 WebSocket 连接 wss://api.openai.com/v1/responses。连接建立后,无需传递 stream 之类的零散参数,直接发送一个 response.create 事件即可:

const WebSocket = require('ws');

// 1. 建立长连接
const ws = new WebSocket('wss://api.openai.com/v1/responses', {
  headers: {
    "Authorization": `Bearer ${process.env.OPENAI_API_KEY}`
  }
});

ws.on('open', function open() {
  // 2. 发送第一次请求
  ws.send(JSON.stringify({
    type: "response.create",
    model: "gpt-5.2",
    input: [
      {
        type: "message",
        role: "user",
        content: [{"type": "input_text", "text": "帮我写个爬虫,并用 Vue 写个前端可视化图表"}]
      }
    ],
    tools: [/* 你的本地工具列表 */]
  }));
});

第二步:增量更新

这一步是这套新 API 价值最大化的地方。当你的本地工具执行完毕(例如,终端运行报错),你需要把结果返回给大模型。

这时千万不要像以前那样,把完整的聊天记录和几百行代码全部打包带上。你只需要传递 previous_response_id 和新增的报错信息:

// 后续的几十次交互,只需传增量
ws.send(JSON.stringify({
  type: "response.create",
  model: "gpt-5.2",
  previous_response_id: "resp_123456", // 填入上一次大模型返回的 response ID
  input: [
    {
      type: "function_call_output",
      call_id: "call_abc789",
      output: "Error: module 'axios' not found" // 这里只传最新的执行结果
    }
  ]
}));

只要这个 WebSocket 连接保持不断开,OpenAI 的服务器就会在内存中直接关联 resp_123456 的上下文,并基于此继续处理。

几个实操的避坑细节

仔细翻阅官方文档后,有几个实现细节需要特别注意:

1. 如何并行处理?

单条 WebSocket 连接是串行处理的,即同一时间只能处理一轮对话。如果你需要并行运行多个不同的 Agent 任务,官方的方案非常直接:建立多个并行的 WebSocket 连接即可

2. 连接断了怎么办?

官方限制了单条连接的最长存活时间为 60 分钟。对于绝大多数任务而言,这个时间都完全足够。

如果因超时或网络问题导致连接中断,你需要重新建立一个 WebSocket 连接,并将上次交互的 previous_response_id 传递过去,状态即可无缝恢复。

3. 隐藏的性能提升小技巧(预热)

文档中还隐藏了一个很有用的参数:generate: false

如果你能提前预知接下来的 Agent 流程会用到哪些工具,可以先发送一个包含此参数的请求进行“预热”。这个请求不会立即消耗 Token 来生成内容,但会提前在服务端准备好请求状态。当真正的指令到达时,启动速度会更快。

总结

如果你的应用场景仅限于简单的“一问一答”式对话,那么普通的 HTTP 接口仍然完全够用,无需切换。但如果你正在开发重度依赖 Tool call 的复杂 Agent 应用,强烈建议尽快迁移到 WebSocket 模式。高达 40% 的延迟优化,足以让你的产品体验提升一个档次。

这项优化对于那些涉及长链路工具调用的场景意义重大。代码层面的具体接入方式,建议大家直接查阅 OpenAI 官方文档,并动手运行 Demo 体验效果。

如果你想了解更多关于AI应用开发的前沿技术和实战经验,欢迎来到 云栈社区 与众多开发者一起交流探讨。




上一篇:AI驱动下软件开发模式的演进路径:从瀑布、敏捷到智能协同的深入解析
下一篇:文件系统详解:从inode到树形目录,拆解数据存储与组织核心机制
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-25 19:56 , Processed in 0.436259 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表