ChatGPTSwift API

Alt text

使用 Swift 访问 OpenAI ChatGPT 官方 API。适用于所有 Apple 平台。

支持平台

安装

Swift Package Manager

Cocoapods

platform :ios, '15.0'
use_frameworks!

target 'MyApp' do
  pod 'ChatGPTSwift', '~> 1.3.1'
end

要求

OpenAI 注册 API 密钥。 使用 API 密钥初始化。

let api = ChatGPTAPI(apiKey: "API_KEY")

使用方法

有两种 API:流式 (stream) 和普通 (normal)

流式 (Stream)

服务器将流式传输数据块直到完成,使用 AsyncThrowingStream 方法,您可以使用 For-Loop 循环,如下所示

Task {
    do {
        let stream = try await api.sendMessageStream(text: "What is ChatGPT?")
        for try await line in stream {
            print(line)
        }
    } catch {
        print(error.localizedDescription)
    }
}

普通 (Normal)

一个普通的 HTTP 请求和响应生命周期。 服务器将发送完整的文本(响应时间会更长)

Task {
    do {
        let response = try await api.sendMessage(text: "What is ChatGPT?")
        print(response)
    } catch {
        print(error.localizedDescription)
    }
}
        

提供额外参数

可选地,您可以提供模型 (model)、系统提示 (system prompt)、温度 (temperature) 和模型 (model),如下所示。

let response = try await api.sendMessage(text: "What is ChatGPT?",
                                         model: "gpt-4",
                                         systemText: "You are a CS Professor",
                                         temperature: 0.5)

这些参数的默认值为

要了解有关这些参数的更多信息,您可以访问官方 ChatGPT API 文档ChatGPT API 介绍页面

历史记录列表

客户端存储对话的历史记录列表,该列表将包含在新的提示中,以便 ChatGPT 了解之前的对话上下文。 发送新提示时,客户端将使用 GPTEncoder library 确保 token 数量不超过 4096 来计算字符串中的 token 数量,如果超过 token 数量,则会截断之前的一些对话。 未来我将提供一个 API 来指定 token 阈值,因为新的 gpt-4 模型在一个提示中接受更大的 8k token。

查看当前历史记录列表

您可以从 historyList 属性中查看当前历史记录列表。

print(api.historyList)

删除历史记录列表

您也可以通过调用以下方法删除历史记录列表

api.deleteHistoryList()

替换历史记录列表

您可以提供自己的历史记录列表,这将替换存储的历史记录列表。 请记住不要超过 4096 个 token 的阈值。

let myHistoryList = [
    Message(role: "user", content: "who is james bond?")
    Message(role: "assistant", content: "secret british agent with codename 007"),
    Message(role: "user", content: "which one is the latest movie?"),
    Message(role: "assistant", content: "It's No Time to Die played by Daniel Craig")
]

api.replaceHistoryList(with: myHistoryList)

GPT Encoder Lib

我还创建了 GPTEncoder Swift BPE 编码器/解码器,用于 OpenAI GPT 模型。 用于为 OpenAI GPT API 标记化文本的编程接口。

GPT Tokenizer UI Lib

我还创建了 GPTTokenizerUI,这是一个 SPM 库,您可以将其集成到您的应用程序中,以提供 GUI 来输入文本并显示 GPT API 使用的 token 化结果。

Alt text

演示应用程序

您可以从 SwiftUIChatGPT repo 中查看 iOS 和 macOS 的演示应用程序