OpenAIKit 1.9.3

OpenAIKit 1.9.3

Sergey ZhuravelKyrylo Mukha 维护。



OpenAIKit 1.9.3

  • 作者
  • Kyrylo Mukha

OpenAI

Swift Workflow Swift Platform licence

OpenAI 是一个社区维护的仓库,它包含了对 OpenAI 公共 API 的 Swift 实现功能。

概述

OpenAI API 可以应用于几乎任何需要理解或生成自然语言或代码的任务。我们提供一系列具有不同功率级别的模型,适用于不同任务,以及调整您自己的自定义模型的能力。这些模型可用于从内容生成到语义搜索和分类的各个方面。

安装

OpenAI 与 CocoaPods 和 Swift 包管理器兼容。

CocoaPods

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

pod 'OpenAIKit'

Swift 包管理器

Swift 包管理器 是用于自动分发 Swift 代码的工具,它集成到 swift 编译器中。

设置您的 Swift 包后,将 OpenAI 添加为依赖项就像将其添加到 Package.swift 中的 dependencies 值一样简单。

dependencies: [
    .package(url: "https://github.com/FuturraGroup/OpenAI.git", .branch("main"))
]

用法

建议使用环境变量来注入 OpenAI API 密钥,而不要在源代码中将其硬编码。这在我们提供的 示例项目 中有所展示。

let apiToken: String = "<Your OpenAI API Token here>"
let organizationName: String = "<Your OpenAI Organization name>"

在项目中适当的位置使用 API 令牌初始化 OpenAIKit。组织名称是可选的。

import OpenAIKit

public let openAI = OpenAIKit(apiToken: apiToken, organization: organizationName)

完成

调用完成 API,传入文本文本提示。

openAI.sendCompletion(prompt: "Hello!", model: .gptV3_5(.davinciText003), maxTokens: 2048) { [weak self] result in
    switch result {
    case .success(let aiResult):
        DispatchQueue.main.async {
            if let text = aiResult.choices.first?.text {
                print("response text: \(text)") //"\n\nHello there, how may I assist you today?"
            }
        }
    case .failure(let error):
        DispatchQueue.main.async { [weak self] in
            let alert = UIAlertController(title: "Error", message: error.localizedDescription, preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "Ok", style: .default))
            self?.present(alert, animated: true)
        }
    }
}

所有方法都支持 async/await 用法。以下是一个示例。

let result = await openAI.sendCompletion(prompt: "Hello!", model: .gptV3_5(.davinciText003), maxTokens: 2048)

switch result {
case .success(let aiResult):
 /// Hadle success response result
    if let text = aiResult.choices.first?.text {
  print("response text: \(text)") //"\n\nHello there, how may I assist you today?"       
    }
case .failure(let error):
 /// Hadle error actions
    print(error.localizedDescription)
}

聊天完成

聊天完成几乎与完成相同,仅仅有一些细微差别。

  • 它可以理解通过路径化之前的聊天消息(了解更多)的上下文。
  • 位于检索到的完成消息的字段中的响应文本
  • 仅支持 gpt-3.5-turbogpt-3.5-turbo-0301 模型(了解更多关于模型兼容性)。
openAI.sendChatCompletion(newMessage: AIMessage(role: .user, content: prompt), previousMessages: [], model: .gptV3_5(.gptTurbo), maxTokens: 2048, n: 1, completion: { [weak self] result in
	DispatchQueue.main.async { self?.stopLoading() }
	
	switch result {
	case .success(let aiResult):
		// Handle result actions
		if let text = aiResult.choices.first?.message?.content {
			print(text)
		}
	case .failure(let error):
		// Handle error actions
		print(error.localizedDescription)
	}
})

您可以通过流部分进度检索 OpenAI 的 Completions 和 Chat Completions 的响应。无需等待整个完成响应完成。您可以直接处理和展示结果。

聊天完成示例调用

openAI.sendStreamChatCompletion(newMessage: AIMessage(role: .user, content: "Hello!"), model: .gptV3_5(.gptTurbo), maxTokens: 2048) { result in
	switch result {
	case .success(let streamResult):
		/// Hadle success response result
		if let streamMessage = streamResult.message?.choices.first?.message {
			print("Stream message: \(streamMessage)") //"\n\nHello there, how may I assist you today?"
		}
	case .failure(let error):
		// Handle error actions
		print(error.localizedDescription)
	}
}

您也可以手动停止流,如下所示

openAI.sendStreamChatCompletion(newMessage: AIMessage(role: .user, content: "Hello!"), model: .gptV3_5(.gptTurbo), maxTokens: 2048) { result in
	switch result {
	case .success(let streamResult):
		/// Hadle success response result
		
		streamResult.stream.stopStream() /// Manually stop stream 
	case .failure(let error):
		// Handle error actions
		print(error.localizedDescription)
	}
}

生成图像

DALL·E 是一个 AI 系统,可以从自然语言描述中创建逼真的图像和艺术。我们目前支持以下功能,即给定提示,创建具有一定大小的新的图像,编辑现有的图像,或创建用户提供的图像的变体。

下面的代码展示了您如何使用 DALL·E 生成图像。

openAI.sendImagesRequest(prompt: "bird", size: .size512, n: 1) { [weak self] result in
    
    switch result {
    case .success(let aiResult):
        
        DispatchQueue.main.async {
            if let urlString = aiResult.data.first?.url {
                print("generated image url: \(urlString)")
            }
        }
    case .failure(let error):
        DispatchQueue.main.async { [weak self] in
            let alert = UIAlertController(title: "Error", message: error.localizedDescription, preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "Ok", style: .default))
            self?.present(alert, animated: true)
        }
    }
}

贡献

对于改进的贡献总是受欢迎的。请随意提交拉取请求以为库的增长做出贡献。如果您有任何问题、功能建议或错误报告,请通过 问题 发送给我们。

许可证

MIT License

Copyright (c) 2023 Futurra Group

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.