ChatGPT API: 在线程中列出消息,遇到错误:”1 validation error for Request\nbody -> role\n field required (type=value_error.missing)”

我正在尝试使用OpenAI文档来获取线程中所有消息的列表。

我使用的是Ruby on Rails。以下是我的代码:

require 'net/http'require 'uri'require 'json'api_key = ENV['OPENAI_ACCESS_TOKEN']thread = @support.thread_id.to_sputs "THREAD: " + thread# SUMMON THE MESSAGESuri = URI.parse("https://api.openai.com/v1/threads/#{ thread }/messages")request = Net::HTTP::Post.new(uri)request['Content-Type'] = 'application/json'request["Authorization"] = "Bearer #{ api_key }"request["Openai-Beta"] = "assistants=v1"req_options = { use_ssl: uri.scheme == 'https' }response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|  http.request(request)end# Parse the JSON responseif response.code == '200'  messages_data = JSON.parse(response.body)  # Extract and show the messages  @array_of_hashes = []  messages_data['data'].each do |message|    message_hash = {      "role" => message['role'],      "text" => message['content'][0]['text']['value']    }  @array_of_hashes << message_hash  endelse  puts "Failed to retrieve thread messages. HTTP status code: #{response.code}"  puts "Response body: #{response.body}"end

我已经成功使用了大部分代码来创建消息和线程,所以我知道API密钥和代码结构是有效的。

我遇到的错误是:

Failed to retrieve thread messages. HTTP status code: 400Response body: {  "error": {    "message": "1 validation error for Request\nbody -> role\n  field required (type=value_error.missing)",    "type": "invalid_request_error",    "param": null,    "code": null  }}

我已经在谷歌上搜索过,查阅了Stack Overflow,还询问了ChatGPT,但仍然一无所获。以下是我所知道的:

  • 文档中说不需要请求体字段。
  • 我在Insomnia中尝试了CURL请求,运行得很好,所以我知道消息是存在的。
  • 线程ID(因此端点)传播正确(通过puts验证)。

我在OpenAI讨论板上看到的另一条消息说,另一个类似的问题可能与所使用的模型有关,但实际上在这个代码中并没有声明,所以我不确定这条线索是否有用。

有没有其他人遇到过这个错误?有什么提示可以告诉我该从哪里查找?


回答:

错误是你尝试使用Post请求而不是Get请求

request = Net::HTTP::Post.new(uri)

相反

应该这样做

request = Net::HTTP::Get.new(uri)

这是我使用的有效代码

require 'net/http'require 'uri'require 'json'api_key = 'REPLACE_WITH_API_KEY'thread_id = 'REPLACE_WITH_THREAD_ID'uri = URI.parse("https://api.openai.com/v1/threads/#{thread_id}/messages")request = Net::HTTP::Get.new(uri)request['Content-Type'] = 'application/json'request["Authorization"] = "Bearer #{api_key}"request["OpenAI-Beta"] = "assistants=v1"req_options = { use_ssl: uri.scheme == 'https' }response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|  http.request(request)endif response.code == '200'  messages_data = JSON.parse(response.body)  # Extract and show the messages  array_of_hashes = []  messages_data['data'].each do |message|    message_hash = {      "role" => message['role'],      "text" => message['content'][0]['text']['value']    }    array_of_hashes << message_hash  end  # Print the extracted messages  puts array_of_hasheselse  puts "Failed to retrieve thread messages. HTTP status code: #{response.code}"  puts "Response body: #{response.body}"end

这是对你代码的修改

require 'net/http'require 'uri'require 'json'api_key = ENV['OPENAI_ACCESS_TOKEN']thread = @support.thread_id.to_sputs "THREAD: " + thread# SUMMON THE MESSAGESuri = URI.parse("https://api.openai.com/v1/threads/#{ thread }/messages")request = Net::HTTP::Get.new(uri)request['Content-Type'] = 'application/json'request["Authorization"] = "Bearer #{ api_key }"request["Openai-Beta"] = "assistants=v1"req_options = { use_ssl: uri.scheme == 'https' }response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|  http.request(request)end# Parse the JSON responseif response.code == '200'  messages_data = JSON.parse(response.body)  # Extract and show the messages  @array_of_hashes = []  messages_data['data'].each do |message|    message_hash = {      "role" => message['role'],      "text" => message['content'][0]['text']['value']    }  @array_of_hashes << message_hash  endelse  puts "Failed to retrieve thread messages. HTTP status code: #{response.code}"  puts "Response body: #{response.body}"end

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注