如何查找GPT Builder创建的GPT的Engine ID?Swift代码相关疑问
问题:GPT Builder创建的GPT找不到对应的Engine ID?
我用OpenAI的GPT Builder创建了自定义GPT,但不知道从哪获取对应的Engine ID来填入以下Swift代码的YOUR_ENGINE_ID位置:
import Foundation class GPTManager { private let apiKey = "MY KEY HERE" private let session = URLSession.shared private let baseUrl = "https://api.openai.com/v1/engines/YOUR_ENGINE_ID/completions" func getResponse(prompt: String, completion: @escaping (String?) -> Void) { guard let url = URL(string: baseUrl) else { completion(nil) return } var request = URLRequest(url: url) request.httpMethod = "POST" request.addValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization") request.addValue("application/json", forHTTPHeaderField: "Content-Type") let body: [String: Any] = [ "prompt": prompt, "max_tokens": 100 ] request.httpBody = try? JSONSerialization.data(withJSONObject: body, options: []) let task = session.dataTask(with: request) { data, response, error in guard let data = data, error == nil else { completion(nil) return } if let responseDictionary = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any], let text = responseDictionary["choices"] as? [[String: Any]], let firstChoice = text.first, let finalText = firstChoice["text"] as? String { DispatchQueue.main.async { completion(finalText.trimmingCharacters(in: .whitespacesAndNewlines)) } } else { completion(nil) } } task.resume() } }
解决方法
首先要明确:GPT Builder创建的自定义GPT,并不对应OpenAI API中的「Engine ID」——你的代码用的是旧版的/engines/{engine_id}/completions接口,仅适用于基础文本模型(如gpt-3.5-turbo-instruct、text-davinci-003),无法直接调用自定义GPT。
情况1:要调用自己创建的自定义GPT
自定义GPT基于OpenAI Assistant框架构建,需通过Assistant API调用:
- 打开GPT Builder的「Configure」页面,找到「API」选项并开启访问权限,此时会生成对应的Assistant ID(替代Engine ID)。
- 修改代码使用Assistant API的接口(路径为
https://api.openai.com/v1/assistants/{assistant_id}/threads/runs),接口逻辑与completions接口不同,需要创建线程、添加消息、触发运行等步骤。
- 修改代码使用Assistant API的接口(路径为
情况2:仅需调用基础GPT模型(无需自定义GPT)
直接使用基础模型的ID即可,推荐使用新版Chat Completions接口(更适配聊天类模型,如gpt-3.5-turbo、gpt-4),修正后的代码示例:
import Foundation class GPTManager { private let apiKey = "MY KEY HERE" private let session = URLSession.shared private let baseUrl = "https://api.openai.com/v1/chat/completions" func getResponse(prompt: String, completion: @escaping (String?) -> Void) { guard let url = URL(string: baseUrl) else { completion(nil) return } var request = URLRequest(url: url) request.httpMethod = "POST" request.addValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization") request.addValue("application/json", forHTTPHeaderField: "Content-Type") let body: [String: Any] = [ "model": "gpt-3.5-turbo", // 替换为目标模型ID,如gpt-4 "messages": [ ["role": "user", "content": prompt] ], "max_tokens": 100 ] request.httpBody = try? JSONSerialization.data(withJSONObject: body, options: []) let task = session.dataTask(with: request) { data, response, error in guard let data = data, error == nil else { completion(nil) return } if let responseDictionary = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any], let choices = responseDictionary["choices"] as? [[String: Any]], let firstChoice = choices.first, let message = firstChoice["message"] as? [String: Any], let finalText = message["content"] as? String { DispatchQueue.main.async { completion(finalText.trimmingCharacters(in: .whitespacesAndNewlines)) } } else { completion(nil) } } task.resume() } }
如果坚持用旧版completions接口,可将baseUrl改为https://api.openai.com/v1/completions,并在请求体中添加"model": "gpt-3.5-turbo-instruct"这类兼容模型的ID,无需在URL中填Engine ID。
内容的提问来源于stack exchange,提问作者user23331581
相关产品推荐
相关产品推荐

