GitHub Workflow Status (with branch)

Twitter Follow

Swift 中的 OpenAI API 客户端库

这是一个社区维护的用于访问 OpenAI HTTP API 的库。完整的 API 文档可以在这里找到:https://beta.openai.com/docs

安装 💻

Swift Package Manager (推荐)

您可以使用 Swift Package Manager 来集成该库,方法是在 Package.swift 文件中添加以下依赖项,或者直接在 Xcode 中添加。

.package(url: "https://github.com/adamrushy/OpenAISwift.git", from: "1.2.0")

CocoaPods

CocoaPods 是 Cocoa 项目的依赖管理器。有关使用和安装说明,请访问他们的网站。要使用 CocoaPods 将 OpenAISwift 集成到您的 Xcode 项目中,请在您的 Podfile 中指定它

pod 'OpenAISwift'

手动

将源文件复制到您自己的项目中。

使用方法 🤩

在您的项目中导入框架

import OpenAISwift

创建一个 OpenAI API 密钥 并将其添加到您的配置中

let openAI = OpenAISwift(config: OpenAISwift.Config.makeDefaultOpenAI(apiKey: MY SECRET KEY))

此框架支持 Swift 并发;下面的每个示例都有一个 async/await 和 completion handler 变体。

补全 (Completions)

预测输入文本的补全。

openAI.sendCompletion(with: "Hello how are you") { result in // Result<OpenAI, OpenAIError>
    switch result {
    case .success(let success):
        print(success.choices.first?.text ?? "")
    case .failure(let failure):
        print(failure.localizedDescription)
    }
}

这将返回一个包含补全的 OpenAI 对象。

也支持其他 API 参数

do {
    let result = try await openAI.sendCompletion(
        with: "What's your favorite color?",
        model: .gpt3(.davinci), // optional `OpenAIModelType`
        maxTokens: 16,          // optional `Int?`
        temperature: 1          // optional `Double?`
    )
    // use result
} catch {
    // ...
}

有关支持的模型的完整列表,请参见 OpenAIModelType.swift。有关模型的更多信息,请参见 OpenAI API 文档

聊天 (Chat)

通过 ChatGPT (aka GPT-3.5) 和 GPT-4 (beta 版) 获取聊天对话的响应。

do {
    let chat: [ChatMessage] = [
        ChatMessage(role: .system, content: "You are a helpful assistant."),
        ChatMessage(role: .user, content: "Who won the world series in 2020?"),
        ChatMessage(role: .assistant, content: "The Los Angeles Dodgers won the World Series in 2020."),
        ChatMessage(role: .user, content: "Where was it played?")
    ]

    let result = try await openAI.sendChat(with: chat)
    // use result
} catch {
    // ...
}

支持所有 API 参数,除了在完成之前流式传输消息内容

do {
    let chat: [ChatMessage] = [...]

    let result = try await openAI.sendChat(
        with: chat,
        model: .chat(.chatgpt),         // optional `OpenAIModelType`
        user: nil,                      // optional `String?`
        temperature: 1,                 // optional `Double?`
        topProbabilityMass: 1,          // optional `Double?`
        choices: 1,                     // optional `Int?`
        stop: nil,                      // optional `[String]?`
        maxTokens: nil,                 // optional `Int?`
        presencePenalty: nil,           // optional `Double?`
        frequencyPenalty: nil,          // optional `Double?`
        logitBias: nil                 // optional `[Int: Double]?` (see inline documentation)
    )
    // use result
} catch {
    // ...
}

图像 (DALL·E)

根据提示生成图像。

openAI.sendImages(with: "A 3d render of a rocket ship", numImages: 1, size: .size1024) { result in // Result<OpenAI, OpenAIError>
    switch result {
    case .success(let success):
        print(success.data.first?.url ?? "")
    case .failure(let failure):
        print(failure.localizedDescription)
    }
}

编辑 (Edits)

根据提示和指令编辑文本。

do {
    let result = try await openAI.sendEdits(
        with: "Improve the tone of this text.",
        model: .feature(.davinci),               // optional `OpenAIModelType`
        input: "I am resigning!"
    )
    // use result
} catch {
    // ...
}

审核 (Moderation)

对文本进行分类以进行审核(有关更多信息,请参见 OpenAI 参考)。

do {
    let result = try await openAI.sendModeration(
        with: "Some harmful text...",
        model: .moderation(.latest)     // optional `OpenAIModelType`
    )
    // use result
} catch {
    // ...
}

嵌入 (Embeddings)

获取给定输入的向量表示,该向量可以轻松地被机器学习模型和算法使用。(有关更多信息,请参见 OpenAI 参考)。

do {
    let result = try await openAI.sendEmbeddings(
        with: "The food was delicious and the waiter..."
    )
    // use result
} catch {
    // ...
}

贡献 ❤️

我创建这个主要是为了好玩,我们可以添加更多端点并进一步探索这个库。欢迎提出 PR 来帮助库的成长。

许可证 📥

MIT 许可证 (MIT)

版权所有 (c) 2022 Adam Rush

特此授予任何人免费获得本软件和相关文档文件(“软件”)副本的权利,以处理本软件,不受限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件副本的权利,并允许向其提供本软件的人员在以下条件下这样做

上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。

本软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于对适销性、特定用途适用性和非侵权性的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任承担责任,无论是在合同、侵权行为或其他方面,由本软件引起或与之相关,或与本软件的使用或其他交易有关。