使用 Swift 访问 OpenAI ChatGPT 官方 API。适用于所有 Apple 平台。
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)
服务器将流式传输数据块直到完成,使用 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)
}
}
一个普通的 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)
这些参数的默认值为
gpt-3.5-turbo
You're a helpful assistant
(你是一个乐于助人的助手)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)
我还创建了 GPTEncoder Swift BPE 编码器/解码器,用于 OpenAI GPT 模型。 用于为 OpenAI GPT API 标记化文本的编程接口。
我还创建了 GPTTokenizerUI,这是一个 SPM 库,您可以将其集成到您的应用程序中,以提供 GUI 来输入文本并显示 GPT API 使用的 token 化结果。
您可以从 SwiftUIChatGPT repo 中查看 iOS 和 macOS 的演示应用程序