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

Swift开发ChatGPT聊天应用无响应问题排查求助

Swift ChatGPT App 无响应问题排查与解决思路

问题背景

按照iOS Academy的ChatGPT教程开发Swift聊天应用,已完成引入OpenAI封装包、生成API密钥、集成真实密钥代码等操作,但聊天功能无法生成响应,代码无报错也无返回结果,等待许久问题仍存在。

排查与解决步骤

1. 验证API密钥有效性

  • 确认密钥未过期、未被禁用,且拥有completions接口调用权限
  • 直接通过curl验证密钥(替换YOUR_API_KEY为真实密钥):
    curl https://api.openai.com/v1/completions \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer YOUR_API_KEY" \
      -d '{
        "model": "gpt-3.5-turbo-instruct",
        "prompt": "Hello",
        "max_tokens": 50
      }'
    
    若请求失败,根据返回的错误信息调整密钥权限或更换密钥。

2. 确保网络权限配置正确

在Info.plist中确认已添加网络权限配置,保证应用能发起HTTPS请求:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>api.openai.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <false/>
        </dict>
    </dict>
</dict>

3. 修复代码逻辑问题

问题点1:setup()方法可能未执行

当前onAppear绑定在HStack上,若视图布局异常会导致viewModel.setup()未调用,client始终为nil,send方法无任何执行动作。

修复:将onAppear移至外层VStack:

var body: some View {
    VStack(alignment: .leading){
        ForEach(models, id: \.self) { string in
            Text(string)
        }
        
        Spacer()
        
        HStack{
            TextField("type here", text: $text)
            Button("send"){
                send()
            }
        }
    }
    .padding()
    .onAppear {
        viewModel.setup()
    }
}

问题点2:缺少client初始化判断

添加nil检查,避免静默失败:

func send(text: String, completion: @escaping (String) -> Void) {
    guard let client = client else {
        print("Error: OpenAI client未初始化")
        completion("")
        return
    }
    // 后续调用逻辑
}

问题点3:模型兼容性

原默认模型text-davinci-003已逐步退役,更换为当前可用的gpt-3.5-turbo-instruct模型:

client.sendCompletion(with: text, model: .gpt35TurboInstruct, maxTokens: 500, completionHandler: { result in
    // 原有结果处理逻辑
})

问题点4:完善错误日志

增强错误输出,便于定位问题:

case.failure(let error):
    print("OpenAI API错误: \(error.localizedDescription)")
    print("错误详情: \(error)")

4. 检查OpenAI服务状态

确认OpenAI的completions服务无宕机或限流情况,可通过官方状态页面查看服务可用性。

修复后完整代码示例

import SwiftUI
import OpenAISwift

final class ViewModel: ObservableObject{
    init() {}
    
    private var client: OpenAISwift?
    
    func setup(){
        client = OpenAISwift(authToken: "MY-REAL-API-KEY")
    }
    
    func send(text: String, completion: @escaping (String) -> Void) {
        guard let client = client else {
            print("Error: OpenAI client未初始化")
            completion("")
            return
        }
        client.sendCompletion(with: text, model: .gpt35TurboInstruct, maxTokens: 500, completionHandler: { result in
            switch result {
            case.success(let model):
                let output = model.choices?.first?.text ?? ""
                completion(output)
            case.failure(let error):
                print("OpenAI API错误: \(error.localizedDescription)")
                print("错误详情: \(error)")
            }
        })
    }
}

struct ContentView: View {
    @ObservedObject var viewModel = ViewModel()
    @State var text = ""
    @State var models = [String]()
    
    var body: some View {
        VStack(alignment: .leading){
            ForEach(models, id: \.self) { string in
                Text(string)
            }
            
            Spacer()
            
            HStack{
                TextField("type here", text: $text)
                Button("send"){
                    send()
                }
            }
        }
        .padding()
        .onAppear {
            viewModel.setup()
        }
    }
    
    func send() {
        guard !text.trimmingCharacters(in: .whitespaces).isEmpty else {
            return
        }
        
        models.append("Me: \(text)")
        viewModel.send(text: text) { response in
            DispatchQueue.main.async {
                self.models.append("GPT: " + response)
                print(text)
                print(response)
                
                self.text = ""
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:24:54