ChatGPT API 在 Swift 上的集成:30 分钟搞定

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么 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

博客

书籍推荐