ExyteOpenAI 1.0.3

ExyteOpenAI 1.0.3

Exyte 维护。



     

OpenAI

这个用 Swift 编写的社区维护库,提供了一种简单的方式来使用 OpenAI REST API

SPM Compatible Cocoapods Compatible Carthage Compatible License: MIT

安装

dependencies: [
    .package(url: "https://github.com/exyte/OpenAI")
]

要安装 OpenAI,请简单地将以下行添加到您的 Podfile 中

pod 'ExyteOpenAI'

要使用 Carthage 将 OpenAI 集成到您的 Xcode 项目中,在您的 Cartfile 中指定它

github "exyte/OpenAI"

要求

  • iOS 16+、tvOS 16+、macOS 13+、watchOS 8+
  • Xcode 15+

Assistants API 使用

  1. 获取 您的 API 密钥。不要与他人共享,也不应将其暴露在任何客户端代码中。

⚠️OpenAI 强烈建议客户端应用程序的开发者通过单独的后端服务代理请求,以保护其 API 密钥。API 密钥可以访问和操作客户的账单、使用和组织数据,因此将其暴露是一个重大的风险。

  1. 创建客户端实例。
let client = OpenAI(apiKey: "YOUR_API_KEY_HERE")
  1. 通过定义其指令和模型创建助手。
let assistantPayload = CreateAssistantPayload(model: .gpt_4o, name: "My Assistant", instructions: "Be funny")
client.createAssistant(from: assistantPayload) <...>
  1. 创建线程以开始对话。
let threadPayload = CreateThreadPayload(messages: [...], metadata: [...])
client.createThread(from: threadPayload) <...>
  1. 从用户向线程添加消息。
let messagePayload = CreateMessagePayload(role: .user, content: "Hello!")
client.createMessage(in: threadId, payload: messagePayload) <...>
  1. 在线程上运行助手以生成响应。
client.createRun(in: threadId, payload: CreateRunPayload(assistantId: assistantId)) <...>
  1. 检查运行状态,直到完成或失败。
client.retrieveRun(id: runId, from: threadId)
  1. 从助手检索消息。
let listPayload = ListPayload(after: lastMessageId)
client.listMessages(from: threadId, payload: listPayload) <...>

有关 OpenAI Assistants API 使用更详细的信息,请参阅 platform.openai.com 和我们的 示例 部分。

可用端点

模型

列出并描述 API 中可用的各种模型。模型列表及其差异可以在 platform.openai.com 上找到。

listModels()

返回 ObjectList<Model>

retrieveModel(with: modelId)

返回 Model

deleteModel(with: modelId)

返回 DeletionStatus

文件

文件用于上传文档,可以用于如助手等功能。

uploadFile(payload: FilePayload(purpose: filePurpose, fileURL: fileURL))

返回 File

listFiles()

返回 ObjectList<File>

retrieveFile(id: fileId)

返回 File

deleteFile(id: fileId)

返回 DeletionStatus

retrieveFileContent(id: fileId, destinationURL: destinationURL)

返回 URL

助手

构建可调用模型和使用工具执行任务的助手。

createAssistant(from: CreateAssistantPayload(model: model, name: name, ...))

返回 Assistant

listAssistants(payload: ListPayload(limit: limit, ...))

返回 ObjectList<Assistant>

retrieveAssistant(id: assistantId)

返回 Assistant

modifyAssistant(id: assistandId, payload: CreateAssistantPayload(model: updatedModel, name: updatedName, ...))

返回 Assistant

deleteAssistant(id: assistantId)

返回 DeletionStatus

createThread(
    from: CreateThreadPayload(
	messages: [CreateMessagePayload(role: .user, content: "Hello"), ...],
	metadata: ["key1": "value1", ...]
    )
)

返回 Thread

retrieveThread(id: threadId)

返回 Thread

modifyThread(id: threadId, payload: ModifyPayload(metadata: ["key1": "value1", ...]))

返回 Thread

deleteThread(id: threadId)

返回 DeletionStatus

createMessage(in: threadId, payload: CreateMessagePayload(role: .user, content: "Hello"))

返回 Message

listMessages(from: threadId, payload: ListPayload(limit: limit))

返回 ObjectList<Message>

retrieveMessage(id: messageId, from: threadId)

返回 Message

modifyMessage(id: messageId, from: threadId, payload: ModifyPayload(metadata: ["key1": "value1", ...]))

返回 Message

createRun(in: threadId, payload: CreateRunPayload(assistantId: assistantId, ...))

返回 Run

createStreamRun(in: threadId, payload: CreateStreamRunPayload(assistantId: assistantId))

返回 StreamEvent 序列

createThreadAndRun(
    from: CreateThreadAndRunPayload(
	assistantId: assistantId,
	thread: CreateThreadPayload(
	    messages: [CreateMessagePayload(role: .user, content: "Hello"), ...],
	    metadata: ["key1": "value1", ...]
	)
    )
)

返回 Run

listRuns(from: threadId, payload: ListPayload(limit: limit, ...))

返回 ObjectList<Run>

retrieveRun(id: runId, from: threadId)

返回 Run

modifyRun(id: runId, from: threadId, payload: ModifyPayload(metadata: ["key1": "value1", ...]))

返回 Run

cancelRun(id: runId, from: threadId)

返回 Run

listRunSteps(from: runId, in: threadId, payload: ListPayload(limit: limit, ...))

返回 ObjectList<RunStep>

retrieveRunStep(id: runStepId, from: runId, in: threadId)

返回 RunStep

示例

尝试 OpenAIAssistants 示例

  • 克隆存储库 https://github.com/exyte/OpenAI
  • 打开 OpenAIAssistantsExample/OpenAIAssistantsExample.xcodeproj
  • 试试看!

开发路线图

  • 模型
  • 文件
  • 助手
  • 运行流式传输
  • Swift 并发支持
  • 聊天
  • 音频
  • 图片
  • 审核
  • 微调
  • 存储文件

我们的其他开源 SwiftUI 库

PopupView - 吐司和弹出窗口库
Grid - 最强大的网格容器
ScalingHeaderScrollView - 支持粘性头部且滚动时缩放的滚动视图
AnimatedTabBar - 具有多种预设动画的标签栏
MediaPicker - 可定制的媒体选择器
Chat - 具有完全可定制的消息单元格、输入视图和内置媒体选择器的聊天 UI 框架
AnimatedGradient - 动画线性渐变
ConcentricOnboarding - 动画引导流程
FloatingButton - 悬浮按钮菜单
ActivityIndicatorView - 许多动画加载指示器
ProgressIndicatorView - 许多动画进度指示器
FlagAndCountryCode - 每个国家的电话代码和国旗
SVGView - SVG 解析器
LiquidSwipe - 液态导航动画