项目介绍:OpenAIKit
OpenAIKit 是一个用于与 OpenAI API 进行通信的 Swift 包。该项目为开发者提供了一种在 Swift 应用中无缝集成 OpenAI API 的方式,使得通过简单、高效的代码来调用 OpenAI 提供的丰富功能成为可能。
环境搭建
要使用 OpenAIKit,首先需在 Package.swift
文件中添加对应的依赖项:
dependencies: [
.package(url: "https://github.com/dylanshine/openai-kit.git", from: "1.0.0")
],
targets: [
.target(name: "App", dependencies: [
.product(name: "OpenAIKit", package: "openai-kit"),
]),
为了保护 API 密钥的安全性,建议开发者使用环境变量注入 OpenAI API 密钥,而不是将其硬编码在源码中。这有助于避免敏感信息的泄露。
# .env
OPENAI_API_KEY="YOUR-API-KEY"
OPENAI_ORGANIZATION="YOUR-ORGANIZATION"
客户端应用的开发者应尽量通过单独的后端服务来代理请求,以保持 API 密钥的安全,避免直接暴露在客户端。
创建 OpenAI 客户端
利用配置项创建 OpenAIKit.Client
,这样可以在应用的生命周期内持续使用同一个 HTTP 客户端,从而提高效率和安全性:
var apiKey: String {
ProcessInfo.processInfo.environment["OPENAI_API_KEY"]!
}
var organization: String {
ProcessInfo.processInfo.environment["OPENAI_ORGANIZATION"]!
}
let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)
let httpClient = HTTPClient(eventLoopGroupProvider: .shared(eventLoopGroup))
defer {
try? httpClient.syncShutdown()
}
let configuration = Configuration(apiKey: apiKey, organization: organization)
let openAIClient = OpenAIKit.Client(httpClient: httpClient, configuration: configuration)
如果不想使用 SwiftNIO,也可以用 URLSession 来实现类似功能:
let urlSession = URLSession(configuration: .default)
let configuration = Configuration(apiKey: apiKey, organization: organization)
let openAIClient = OpenAIKit.Client(session: urlSession, configuration: configuration)
API 使用
OpenAIKit.Client 提供多种方法来与 OpenAI API 进行互动。例如,获取文本生成的接口调用:
import OpenAIKit
let completion = try await openAIClient.completions.create(
model: Model.GPT3.davinci,
prompts: ["Write a haiku"]
)
实现的功能
OpenAIKit 支持多种功能,包括但不限于:
- 聊天接口
- 模型操作
- 文本生成
- 编辑功能
- 图像生成
- 符号嵌入
- 文件操作
- 内容审核
- 从语音转文字
目前还在开发和计划中的功能包括精细调优和函数调用。
错误处理
在请求 API 时,如果出错,OpenAIKit 会抛出 OpenAIKit.APIErrorResponse
类型的错误。要确保捕获这些错误,可使用常规的错误捕获机制:
do {
...
} catch let error as APIErrorResponse {
print(error)
}
OpenAIKit 为 Swift 开发者提供了高效、安全的方式与 OpenAI API 进行集成,从而能够自由利用 OpenAI 的强大能力为各种应用场景提供支持。无论是文本生成还是新颖的应用功能开发,OpenAIKit 都能助力开发者实现创新构思。