You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS中OpenAI助手API提交工具输出后无法获取回复的问题

问题:OpenAI Assistants API提交工具输出后无法获取助手回复

环境配置

  • NodeJS环境中使用OpenAI Assistants API
  • 已在OpenAI平台定义助手
  • 基于流式SDK编写NodeJS客户端,以Discord作为聊天前端
  • 基础聊天功能运行正常

问题场景

在实现自定义function calling时:

  • 已在OpenAI平台定义函数请求体
  • 成功捕获thread.run.requires_action事件,完成自定义函数调用后,通过client.beta.threads.runs.submitToolOutputsStream提交工具输出
  • 提交后未收到textDone或其他相关事件,运行看似终止,无法获取助手回复
  • 但在OpenAI平台查看对应线程时,助手已收到函数响应并生成了回复消息

解决步骤

调用client.beta.threads.runs.submitToolOutputsStream后,需执行以下操作重新获取运行状态并拿到助手回复:

  1. 监听提交工具输出后的流式事件
    submitToolOutputsStream本身会返回一个事件流,需直接监听这个流的输出,而非依赖之前的全局线程事件。该流会推送运行状态更新,包括thread.run.completed事件,以及助手生成回复时的thread.message.delta增量事件。示例代码逻辑:

    const stream = await client.beta.threads.runs.submitToolOutputsStream(
      threadId,
      runId,
      {
        tool_outputs: [
          {
            tool_call_id: "你的工具调用ID",
            output: "自定义函数执行结果"
          }
        ]
      }
    );
    
    for await (const event of stream) {
      switch(event.event) {
        case 'thread.message.delta':
          // 实时接收助手回复的片段内容
          const deltaContent = event.data.delta.content[0]?.text?.value;
          if (deltaContent) {
            // 将片段内容逐步发送到Discord前端
          }
          break;
        case 'thread.run.completed':
          // 运行完成后,可直接拉取线程最新消息确认结果
          const latestMessages = await client.beta.threads.messages.list(threadId);
          const assistantReply = latestMessages.data[0].content[0].text.value;
          // 将完整回复推送到Discord
          break;
      }
    }
    
  2. 主动轮询运行状态
    若流式监听未正常触发,可主动查询运行状态:

    • 调用client.beta.threads.runs.retrieve(threadId, runId)获取当前运行状态
    • 当状态变为completed时,调用client.beta.threads.messages.list(threadId)拉取最新的助手回复
    • 设置合理轮询间隔(1-2秒),避免频繁请求,直到状态脱离in_progress或requires_action
  3. 检查全局事件监听逻辑
    确认全局线程事件监听是否覆盖了提交工具输出后的状态变化,若之前的监听只针对初始运行事件,需重新订阅线程的事件流,确保能捕获到后续的运行状态更新和消息生成事件。

内容的提问来源于stack exchange,提问作者Andrey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 10:11:14