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

如何在OpenAI Assistants的消息创建请求中传递run_id参数

解决OpenAI Assistants Beta API中消息关联Run的问题

首先明确:OpenAI的Create Message API(POST /threads/{thread_id}/messages)不接受run_id参数,不管是放在URL查询参数还是请求体里,这就是你遇到两种错误的原因。

正确的流程逻辑

要避免每次发消息启动新的独立流程,核心是复用同一个Thread,而不是给消息绑定run_id。Assistants API的对话上下文是通过Thread来维护的,每个Run会处理该Thread内的所有历史消息。正确步骤如下:

  1. 添加用户消息到已有Thread
    不需要传递任何run_id,只需要指定消息的role和content:

    uri = URI.parse("https://api.openai.com/v1/threads/#{self.support.thread_id}/messages")
    request = Net::HTTP::Post.new(uri)
    request["Authorization"] = "Bearer #{ENV['OPENAI_API_KEY']}"
    request["Content-Type"] = "application/json"
    request.body = JSON.dump({
      "role" => "user",
      "content" => content
    })
    
    response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
      http.request(request)
    end
    
  2. 基于同一个Thread创建新Run
    添加消息后,调用Create Run API,指定对应的Assistant ID,新的Run会自动读取Thread内的所有历史消息(包括刚添加的这条),延续之前的对话流程:

    run_uri = URI.parse("https://api.openai.com/v1/threads/#{self.support.thread_id}/runs")
    run_request = Net::HTTP::Post.new(run_uri)
    run_request["Authorization"] = "Bearer #{ENV['OPENAI_API_KEY']}"
    run_request["Content-Type"] = "application/json"
    run_request.body = JSON.dump({
      "assistant_id" => "你的Assistant ID"
    })
    
    run_response = Net::HTTP.start(run_uri.hostname, run_uri.port, use_ssl: true) do |http|
      http.request(run_request)
    end
    
    # 保存新生成的run_id,用于后续查询运行状态
    new_run_id = JSON.parse(run_response.body)["id"]
    

关键注意点

  • 每个Run是一次性的任务,完成或终止后无法复用,必须创建新Run来处理后续消息
  • 只要复用同一个Thread,所有对话历史都会被保留,新Run会基于完整上下文生成回复
  • 不要尝试给Message绑定run_id,API设计上不支持这种操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:15:07