You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI集成ChatGPT API无响应问题排查请求

排查SwiftUI集成OpenAI API无响应问题

以下是针对你代码的具体排查点和修复建议:

1. 错误处理缺失,无法定位问题根源

你的send方法中,failure分支直接break,没有任何错误日志输出,导致完全无法知道API请求失败的原因(比如密钥无效、模型权限不足、网络错误等)。

修复代码:

func send(text: String, completion: @escaping (String) -> Void) {
    guard let client = client else {
        print("OpenAI client未初始化")
        completion("客户端初始化失败")
        return
    }
    client.sendCompletion(with: text,
                           maxTokens: 500,
                           completionHandler: {result in
        switch result{
        case .success(let model):
            let output = model.choices?.first?.text ?? ""
            completion(output)
        case .failure(let error):
            print("API请求失败: \(error.localizedDescription)")
            completion("请求失败: \(error.localizedDescription)")
        }            
    })        
}

2. 确认使用的模型是否可用

sendCompletion默认使用的text-davinci-003模型已被OpenAI弃用,如果你没有启用兼容的模型权限,请求会无响应或失败。需要指定当前可用的补全模型,比如gpt-3.5-turbo-instruct。

修复代码:

client.sendCompletion(with: text,
                       model: .gpt35TurboInstruct, // 指定可用模型
                       maxTokens: 500,
                       completionHandler: {result in
    // ... 原有逻辑
})

3. 检查iOS应用网络权限

确保你的iOS应用已开启网络访问权限:

  • 在Info.plist中添加NSAppTransportSecurity字典,针对api.openai.com配置HTTPS访问权限(或全局允许HTTPS访问);
  • 确认应用的Signing & Capabilities中没有限制网络访问的配置。

4. 验证客户端初始化是否成功

在setup方法中添加日志,确认client是否被正确初始化:

func setup() {
    client = OpenAISwift(authToken: "MY API KEY")
    print(client != nil ? "OpenAI客户端初始化成功" : "OpenAI客户端初始化失败")
}

5. 考虑切换到Chat Completions接口(推荐)

如果你使用的是gpt-3.5-turbo或gpt-4等聊天模型,应该使用sendChatCompletion方法而非旧的补全接口,这是OpenAI当前推荐的调用方式:

func sendChat(text: String, completion: @escaping (String) -> Void) {
    guard let client = client else {
        completion("客户端未初始化")
        return
    }
    let messages = [ChatMessage(role: .user, content: text)]
    client.sendChatCompletion(model: .gpt35Turbo, messages: messages) { result in
        switch result {
        case .success(let model):
            let response = model.choices?.first?.message.content ?? ""
            completion(response)
        case .failure(let error):
            print("聊天请求失败: \(error)")
            completion("请求失败: \(error.localizedDescription)")
        }
    }
}

内容的提问来源于stack exchange,提问作者Alexandros Eghoyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 11:47:50