我尝试通过SWIFT向openAI API发布一个问题。如果我通过Postman使用相同的有效载荷,它可以正常工作,但在Xcode-Condole中,我从openAI得到了以下响应:
Response data string:
{
"error": {
"message": "you must provide a model parameter",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
这是我的代码:
func getActivityAnalysis(){
let url = URL(string: "https://api.openai.com/v1/completions")
guard let requestUrl = url else { fatalError() }
// Prepare URL Request Object
var request = URLRequest(url: requestUrl)
request.setValue("Bearer blaaaablaa", forHTTPHeaderField: "Authorization")
request.httpMethod = "POST"
let prompt = "just a test"
let requestBody = OpenAIRequest(model: "text-davinci-003", prompt: prompt, max_tokens: 300, temperature: 0.5)
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try! encoder.encode(requestBody)
print(String(data: data, encoding: .utf8)!)
// Set HTTP Request Body
request.httpBody = data
print("\(request.httpMethod!) \(request.url!)")
print(request.allHTTPHeaderFields!)
print(String(data: request.httpBody ?? Data(), encoding: .utf8)!)
// Perform HTTP Request
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
// Check for Error
if let error = error {
print("Error took place \(error)")
return
}
// Convert HTTP Response Data to a String
if let data = data, let dataString = String(data: data, encoding: .utf8) {
print("Response data string:\n \(dataString)")
self.openAIResponse = dataString
}
}
task.resume()
}`
如果我打印http请求,对我来说似乎也没问题:
POST https://api.openai.com/v1/completions
["Authorization": "Bearer blaaaaa"]
{
"temperature" : 0.5,
"model" : "text-davinci-003",
"prompt" : "just a test",
"max_tokens" : 300
}
我试着在我的 Postman 请求中使用相同的有效载荷。它在这里工作得很好。我也试着使用不同的编码,但它总是抛出相同的错误。
不知道我做错了什么。也许有人能帮忙?
先谢谢你。
打赌托比
1条答案
按热度按时间5jdjgkvh1#
您的HTTP请求揭示了问题。您需要添加
'Content-Type: application/json'
。根据GeeksforGeeks:
Content-Type
是一个HTTP头,用于指示资源的媒体类型,在响应的情况下,它告诉浏览器返回内容的实际内容类型。