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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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