为什么 Swift 和 ChatGPT 是“一见如故”的绝配
想象一下:您正在用 Swift 开发一个应用,突然发现它缺少“智慧”。用户提问时,您的代码却像哑巴一样沉默。熟悉吗?直到最近,为 iOS 应用添加智能功能还很困难:要么需要自己编写 NLP 模型,要么需要集成庞大的库。但现在,一切都不同了。
ChatGPT API 在 Swift 上 不仅仅是一个时髦的功能,而是一个真正的工具,可以将您的应用变成智能助手。想制作 AI 助手、内容生成器或只是一个聊天机器人?所有这些都可以在一个晚上实现。在本文中,我将展示如何从零开始将 OpenAI API 集成到 Swift,无需任何魔法或复杂的架构。我们开始吧!
我们需要什么?
在深入代码之前,让我们先了解所需的工具。要在 iOS 上使用 ChatGPT,您只需要三样东西:
- OpenAI API 密钥 — 在 platform.openai.com 注册,在 API Keys 部分创建一个密钥。请像保护眼睛一样保管它——不要提交到 Git!
- Xcode 15+ — 以便使用带有 async/await 的现代 Swift。
- 对 SwiftUI 或 UIKit 的基本了解 — 我将展示一个 SwiftUI 示例,但网络逻辑是通用的。
准备好了吗?那么打开 Xcode,创建一个新项目(iOS App, SwiftUI, 语言 — Swift),然后开始编写代码。
请求架构:如何用 Swift 与 ChatGPT “对话”
OpenAI 提供 REST API。这意味着我们将发送 HTTP 请求并接收 JSON 响应。所有通信都通过端点 https://api.openai.com/v1/chat/completions 进行。我们需要发送一个 POST 请求,其主体包含消息数组(角色 + 内容),然后从模型接收响应。
让我们为请求和响应创建数据模型。这是使用 Swift 中的 Decodable 的绝佳示例。
// 单个消息的模型struct Message: Codable { let role: String // "system", "user" 或 "assistant" let content: String}
// API 请求的结构struct ChatGPTRequest: Codable { let model: String let messages: [Message] let temperature: Double?
init(model: String = "gpt-4o-mini", messages: [Message], temperature: Double = 0.7) { self.model = model self.messages = messages self.temperature = temperature }}
// 响应的结构struct ChatGPTResponse: Codable { struct Choice: Codable { let message: Message let finishReason: String?
enum CodingKeys: String, CodingKey { case message case finishReason = "finish_reason" } }
let choices: [Choice]}请注意 CodingKeys — 在 Swift 中,属性名通常使用 camelCase,而 API 返回 snake_case。这是 Swift 中 API 开发 的标准做法。
网络层:URLSession + async/await
现在是最有趣的部分——发送请求。我将使用现代的 async/await,使代码干净且易读。没有闭包和委托——只有简洁之美。
class ChatGPTService {
private let apiKey: String private let session = URLSession.shared private let baseURL = URL(string: "https://api.openai.com/v1/chat/completions")!
init(apiKey: String) { self.apiKey = apiKey }
func sendMessage(_ text: String) async throws -> String {
// 构建消息:系统提示 + 用户请求 let systemMessage = Message(role: "system", content: "你是一个有用的助手。请简洁明了地回答。") let userMessage = Mess