使用OpenAISwift调用ChatGPT API无响应问题求助
解决办法
用对聊天模型的调用接口
GPT-3.5 Turbo这类聊天模型不能用sendCompletion(这是给文本补全模型设计的接口),必须使用sendChat方法适配聊天模型的调用逻辑。修改你的ask方法如下:func ask(text: String) async { isLoading = true do { guard let client = client else { recievedError = true respnse = "客户端初始化失败" isLoading = false return } // 构造聊天消息,指定用户角色 let chatMessages = [ChatMessage(role: .user, content: text)] let chatResult = try await client.sendChat( with: chatMessages, model: .chat(.gpt3_5Turbo), maxTokens: 200 ) // 提取聊天模型返回的回复内容 self.respnse = chatResult.choices?.first?.message.content.trimmingCharacters(in: .newlines) ?? "无有效响应" } catch let error as OpenAIError { // 打印OpenAI返回的具体错误信息,方便排查根源 print("OpenAI错误详情: \(error.localizedDescription), 错误码: \(error.code ?? "未知")") recievedError = true respnse = "请求失败: \(error.localizedDescription)" } catch { print("其他错误: \(error)") recievedError = true respnse = "请求失败" } isLoading = false }确认模型枚举对应正确的可用模型
OpenAISwift的.chat枚举要匹配OpenAI当前支持的模型:- GPT-3.5 Turbo对应
.chat(.gpt3_5Turbo)(模型ID为gpt-3.5-turbo) - 若不确定枚举映射关系,可以直接传入模型ID字符串:
model: .custom("gpt-3.5-turbo")
避免使用已被OpenAI停用的模型标识。
- GPT-3.5 Turbo对应
校验客户端初始化状态
在init或ask方法中检查client是否初始化成功,防止因client为nil导致无响应:init() { let apiKey = "sk-*******" guard !apiKey.isEmpty else { print("API密钥未配置") return } client = OpenAISwift(config: .makeDefaultOpenAI(apiKey: apiKey)) }打印完整错误信息
不要只打印error.localizedDescription,捕获OpenAIError类型能获取API返回的具体错误(比如权限不足、模型不存在、请求格式错误等),这是快速定位问题的核心手段。检查网络环境
确保设备能正常访问OpenAI API,部分地区需要配置代理,同时排查防火墙或网络设置是否拦截了请求。
内容的提问来源于stack exchange,提问作者Mc.Lover
相关产品推荐
相关产品推荐

