

Свифт SDK, поддержанный сообществом для API OpenAI.
Ошибка отчета · Функция запроса
OpenAikit -это SDK, основанный на сообществе, предназначенный для того, чтобы предоставить быстрым разработчикам беспроблемный, эффективный и милый способ взаимодействия с конечной точкой Openai Rest. Наша цель состоит в том, чтобы снизить барьер для разработчиков Swift, что позволит им интегрировать силу Openai в свои приложения, не углубляясь в тонкостях служб Restful.
Благодаря растущему спросу на функции, основанные на AI, в современных приложениях, для разработчиков крайне важно иметь доступ к инструментам, которые упрощают процесс интеграции. В то время как OpenAI предлагает невероятный набор возможностей, существует четкая потребность в выделенном Swift SDK, который согласуется с идиоматическими практиками языка и ожиданиями сообщества разработчиков Swift.
Мы предполагали инструмент, который не только обеспечивает не только доступ к функциональности OpenAI, но и улучшает опыт разработчика с помощью четкого и интуитивного API. Наша конечная цель состоит в том, чтобы способствовать инновациям, предоставив сообществу Swift правильные инструменты для легкости интеграции возможностей ИИ в их приложения.
| Платформа | Минимальная версия Swift | Установка | Статус |
|---|---|---|---|
| iOS 13,0+ / macOS 10.15+ / TVOS 13.0+ / watchOS 6.0+ / Visionos 1.0+ | 5.7 | Swift Package Manager | Полностью протестирован |
Swift Package Manager позволяет разработчикам легко интегрировать пакеты в свои проекты и пакеты XCode; и также полностью интегрирован в компилятор swift .
https://github.com/OpenDive/OpenAIKit.git После настройки пакета Swift добавьте ссылку GIT в значение dependencies вашего Package.swift Swift File.
dependencies: [
. package ( url : " https://github.com/OpenDive/OpenAIKit.git " , . upToNextMajor ( from : " 2.0.1 " ) )
] Чтобы получить ключ API, перейдите на страницу API Keys на странице учетной записи здесь.

️ ? Важно: не храните открытые ключи API прямо в коде! ?️ При работе с API Openai важно, чтобы соображения безопасности не внедряли ваши ключи API непосредственно в кодовую базу вашего приложения. Внедрение ключей непосредственно в ваш исходный код может подвергнуть их несанкционированным пользователям и вредоносным актерам, что приводит к потенциальному неправильному использованию.
Лучшие практики:
- Переменные среды: храните ключи API в переменных среды и доступ к ним в вашем коде. Таким образом, они не затрудняются в вашем приложении и могут безопасно управляться.
- Управление секретами: используйте инструмент управления безопасными секретами или услугу для хранения и извлечения ключей API. Такие инструменты, как менеджер AWS Secrets, Hashicorp Vault, Firebase, CloudKit или Vault Azure, предназначены для хранения, управления и извлечения конфиденциальных данных. Таким образом, пользователь не имеет доступа к ключам.
- .gitignore: если вы храните ключи API в файле конфигурации, всегда убедитесь, что этот файл добавляется в
.gitignoreили аналогичный механизм, чтобы не допустить его случайного преданности системе управления источником.- Регулярно поверните клавиши: периодически вращайте клавиши API, чтобы смягчить потенциальное воздействие утечки.
Помните, безопасность имеет первостепенное значение. Всегда расставляйте приоритеты в безопасной обработке конфиденциальной информации, такой как клавиши API!
Для получения дополнительной информации ознакомьтесь с этой статьей о управлении ключами API для разработчиков Swift.
Погрузитесь в следующую эволюцию генерации изображений с AI с Dall-E 2 (и скоро, Dall-E 3), принесенного вам OpenAI. Опираясь на наследие своего предшественника, Dall-E 2 предлагает расширенные возможности для реализации сложных визуальных эффектов из текстовых подсказок, создавая бесшовный мост между языком и образами. Разработчики могут использовать эту новаторскую технологию для обогащения пользовательского опыта, динамического контента ремесел и вдохновить новые возможности творчества. Революционизируйте свои приложения и проекты, интегрируя передовую силу Dall-E 2.
OpenAI предоставлена три конечных точка, чтобы взаимодействовать с Dall -E 2: - createImage - это основная конечная точка, которая позволяет прямой генерации изображения из текстовой подсказки. Вот пример того, как использовать конечную точку, наряду с корреляцией вывода:
do {
let imageParam = ImageParameters (
// A text description of the desired image(s).
prompt : " An armchair in the shape of an avocado " ,
// The size of the generated images.
resolution : . large ,
// The format in which the generated images are returned.
responseFormat : . base64Json
)
let result = try await openAi . createImage (
parameters : imageParam
)
let b64Image = result . data [ 0 ] . image
let image = try openAi . decodeBase64Image ( b64Image )
} catch {
// Insert your own error handling method here.
} 
do {
let imageEditParam = try ImageEditParameters (
// The image to edit.
image : image ,
// An additional image whose fully transparent areas indicate where image should be edited.
mask : mask ,
// A text description of the desired image(s).
prompt : " The Mona Lisa wearing a beret, in the style of Leonardo DaVinci " ,
// The size of the generated images.
resolution : . large ,
// The format in which the generated images are returned.
responseFormat : . base64Json
)
let imageResponse = try await openAI . generateImageEdits (
parameters : imageEditParam
)
let image = try openAI . decodeBase64Image ( imageResponse . data [ 0 ] . image )
} catch {
// Insert your own error handling method here.
} ![]() | ![]() | ![]() |
|---|---|---|
| Оригинал | Маска | Редактировать |
- createImageVariation позволяет разработчику создавать вариации данного входного изображения. Вот пример того, как использовать конечную точку, наряду с корреляцией вывода:
do {
let imageVariationParam = try ImageVariationParameters (
// The image to use as the basis for the variation(s).
image : image ,
// The size of the generated images.
resolution : . large ,
// The format in which the generated images are returned.
responseFormat : . base64Json
)
let variationResponse = try await openAI . generateImageVariations (
parameters : imageVariationParam
)
self . image = try openAI . decodeBase64Image (
variationResponse . data [ 0 ] . image
)
} catch {
// Insert your own error handling method here.
} ![]() | ![]() |
|---|---|
| Оригинал | Вариация |
CHATGPT, построенный на архитектуре GPT-4 OpenAI, является передовой разговорной моделью ИИ. Он предоставляет разработчикам надежный инструмент для интеграции расширенных возможностей обработки естественного языка в приложения. Использование CHATGPT может улучшить взаимодействие с пользователями, повысить эффективность и предлагать решения, управляемые искусственным интеллектом, в различных вариантах использования. Включите силу GPT-4 в ваши проекты для ощутимых результатов.
Существует одна конечная точка для этой функции, однако, этот SDK разбивает конечную точку на две функции с тремя отдельными функциями: - - generateChatCompletion позволяет разработчику генерировать завершение чата, используя предоставленные модели от OpenAI; Или сдержанные модели разработчика. Вот пример того, как использовать конечную точку, наряду с корреляцией вывода:
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 chatParameters = ChatParameters (
model : . gpt4 , // ID of the model to use.
messages : chat // A list of messages comprising the conversation so far.
)
let chatCompletion = try await openAI . generateChatCompletion (
parameters : chatParameters
)
if let message = chatCompletion . choices [ 0 ] . message {
let content = message . content
}
} catch {
// Insert your own error handling method here.
} ChatResponse(
id: "chatcmpl-88eG5VruffcNHPNVGBKGVAV5HGk4j",
object: OpenAIKit.OpenAIObject.chatCompletion,
created: 1697072069,
choices: [
OpenAIKit.ChatChoice(
message: Optional(
OpenAIKit.ChatMessage(
id: "250FDA2D-2F38-4E6F-B97E-DAD74FED1FB6",
role: OpenAIKit.ChatRole.assistant,
content: Optional(
"The 2020 World Series was played at Globe Life Field in Arlington, Texas."
),
functionCall: nil
)
),
delta: nil,
index: 0,
logprobs: nil,
finishReason: Optional("stop")
)
],
usage: Optional(
OpenAIKit.Usage(
promptTokens: 53,
completionTokens: 17,
totalTokens: 70
)
)
)
Разработчик также может использовать функции вызовов для выполнения различных функций (то есть получение информации о погоде, загрузки файлов и т. Д.). Вот пример того, как использовать параметр, соответствующий ответ и пример использования с локальной функцией.
do {
let functions : [ Function ] = [
Function (
name : " getCurrentWeather " ,
description : " Get the current weather in a given location " ,
parameters : Parameters (
type : " object " ,
properties : [
" location " : ParameterDetail (
type : " string " ,
description : " The city and state, e.g. San Francisco, CA "
) ,
" unit " : ParameterDetail (
type : " string " , enumValues : [ " fahrenheit " , " celsius " ]
)
] ,
required : [ " location " ]
)
)
]
let messages : [ ChatMessage ] = [
ChatMessage ( role : . user , content : " What's the weather like in Boston? " )
]
let chatParameters = ChatParameters (
model : . gpt4 , // ID of the model to use.
messages : messages , // A list of messages comprising the conversation so far.
functionCall : " auto " , // Controls how the model calls functions.
functions : functions // A list of functions the model may generate JSON inputs for.
)
let chatCompletion = try await openAI . generateChatCompletion (
parameters : chatParameters
)
} catch {
// Insert your own error handling method here.
} ChatResponse(
id: "chatcmpl-88eVjsHEPtDDiSEuCexsqO8iuhnfG",
object: OpenAIKit.OpenAIObject.chatCompletion,
created: 1697073039,
choices: [
OpenAIKit.ChatChoice(
message: Optional(
OpenAIKit.ChatMessage(
id: "DCE5EECB-9521-481D-9E75-C7FF9390E4CF",
role: OpenAIKit.ChatRole.assistant,
content: nil,
functionCall: Optional(
OpenAIKit.FunctionCall(
arguments: "{n"location": "Boston, MA"n}",
name: "getCurrentWeather"
)
)
)
),
delta: nil,
index: 0,
logprobs: nil,
finishReason: Optional("function_call")
)
],
usage: Optional(OpenAIKit.Usage(promptTokens: 81, completionTokens: 16, totalTokens: 97))
)
func getCurrentWeather ( location : String , unit : TemperatureUnit = . fahrenheit ) -> WeatherInfo {
return WeatherInfo ( location : location , temperature : " 72 " , unit : unit , forecast : [ " sunny " , " windy " ] )
}
if let message = chatCompletion . choices [ 0 ] . message , let functionCall = message . functionCall {
let jsonString = functionCall . arguments
if let data = jsonString . data ( using : . utf8 ) {
do {
if
let json = try JSONSerialization . jsonObject ( with : data , options : [ ] ) as? [ String : Any ] ,
let location = json [ " location " ] as? String
{
self . weatherInfo = self . getCurrentWeather ( location : location )
}
} catch {
// Insert your own error handling method here.
}
}
} - generateChatCompletionStreaming позволяет разработке транслировать данные о завершении чата с конечной точки. Вот пример того, как использовать конечную точку, наряду с корреляцией вывода:
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 chatParameters = ChatParameters ( model : . chatGPTTurbo , messages : chat )
let stream = try openAI . generateChatCompletionStreaming (
parameters : chatParameters
)
} catch {
// Insert your own error handling method here.
} ChatResponse(
id: "chatcmpl-88enklY0vmc4fNkM1mJQCkzW6hcST",
object: OpenAIKit.OpenAIObject.chatCompletionChunk,
created: 1697074156,
choices: [
OpenAIKit.ChatChoice(
message: nil,
delta: Optional(
OpenAIKit.ChatDelta(
role: Optional(OpenAIKit.ChatRole.assistant),
content: Optional("")
)
),
index: 0,
logprobs: nil,
finishReason: nil
)
],
usage: nil
)
ChatResponse(
id: "chatcmpl-88enklY0vmc4fNkM1mJQCkzW6hcST",
object: OpenAIKit.OpenAIObject.chatCompletionChunk,
created: 1697074156,
choices: [
OpenAIKit.ChatChoice(
message: nil,
delta: Optional(
OpenAIKit.ChatDelta(
role: nil,
content: Optional("The")
)
),
index: 0,
logprobs: nil,
finishReason: nil
)
],
usage: nil
)
// ...
ChatResponse(
id: "chatcmpl-88enklY0vmc4fNkM1mJQCkzW6hcST",
object: OpenAIKit.OpenAIObject.chatCompletionChunk,
created: 1697074156,
choices: [
OpenAIKit.ChatChoice(
message: nil,
delta: Optional(
OpenAIKit.ChatDelta(
role: nil,
content: Optional(".")
)
),
index: 0,
logprobs: nil,
finishReason: nil
)
],
usage: nil
)
ChatResponse(
id: "chatcmpl-88enklY0vmc4fNkM1mJQCkzW6hcST",
object: OpenAIKit.OpenAIObject.chatCompletionChunk,
created: 1697074156,
choices: [
OpenAIKit.ChatChoice(
message: nil,
delta: Optional(
OpenAIKit.ChatDelta(
role: nil,
content: nil
)
),
index: 0,
logprobs: nil,
finishReason: Optional("stop")
)
],
usage: nil
)
Whisper-это модель AI-II речи в тексте Openai, предназначенная для точной транскрипции разговорного контента. Преобразуя аудио в текст, он предлагает разработчикам простой инструмент для таких задач, как службы транскрипции, голосовые команды, переводы вокального языка или индексация аудио. Реализация Whisper может помочь оптимизировать процессы, сделать приложения более доступными и эффективно использовать голосовые данные.
Существуют две основные конечные точки, которые используют модель Whisper: - createTranscription является основной конечной точкой, которая позволяет разработчикам транскрибировать разговорную аудио в текст. Вот пример того, как использовать конечную точку, и соответствующий возвращенный элемент:
do {
let audioParameters = TranscriptionParameters ( file : audio )
let transcriptionCompletion = try await openAI . createTranscription ( parameters : audioParameters )
} catch {
// Insert your own error handling method here.
} Arousing from the most profound of slumbers, we break the gossamer web of some dream. Yet in a second afterward, so frail may that web have been, we remember not that we have dreamed. In the return to life
from the swoon there are two stages, first, that of the sense of mental or spiritual, secondly, that of the sense of physical existence. It seems probable that if, upon reaching the second stage, we could
recall the impressions of the first, we should find these impressions eloquent in memories of the gulf beyond. And that gulf is what? How at least shall we distinguish its shadows from those of the tomb?
- createTranslation - это вторая конечная точка, которая позволяет разработчикам переводить любой неанглийский аудио в транскрибированный текст английского языка. Вот пример того, как использовать конечную точку, и соответствующий возвращенный элемент:
do {
let audioParameters = TranscriptionParameters ( file : audio )
let transcriptionCompletion = try await openAI . createTranslation ( parameters : audioParameters )
} catch {
// Insert your own error handling method here.
} In the night, when I was out of my mind, and I, pained, numb and tired, thought about the beauty and goodness of a long-forgotten lesson, and my head began to shake, I suddenly heard something tick that scared
me out of my sleep. Who could it be in that weather? A visitor is knocking, I thought, at my room in that weather. That's all it is, and nothing more.
Внедрения используют модели GPT Openai для создания плотных векторных представлений для текста. Эти встраиваемые встраиваемые снимают семантическую информацию, позволяя разработчикам выполнять такие задачи, как поиск сходства, кластеризация или тонкая настройка по конкретным задачам. Интегрируя GPT -встроенные в приложения, разработчики могут улучшить анализ текста и поиск, что приводит к более эффективной обработке данных и пониманию.
Вот пример того, как его использовать, и ожидаемый выход для конечной точки:
do {
let embeddingsParam = EmbeddingsParameters ( model : " text-similarity-ada-002 " , input : input )
self . embeddingsResponse = try await openAI . createEmbeddings ( parameters : embeddingsParam )
} catch {
// Insert your own error handling method here.
} OpenAIKit.EmbeddingsResponse(
object: OpenAIKit.OpenAIObject.list,
data: [
OpenAIKit.EmbeddingsData(
object: OpenAIKit.OpenAIObject.embedding,
embedding: [
0.0028667077,
0.018867997,
-0.030135695,
// ...
-0.004177677,
-0.015615467,
-0.008131327
],
index: 0
)
],
model: "text-similarity-ada:002",
usage: OpenAIKit.EmbeddingsUsage(
promptTokens: 8,
totalTokens: 8
)
)
Конечная точка моделей позволяет разработчикам извлекать доступные в настоящее время модели от OpenaI, а также свои собственные тонко настроенные модели.
Есть две конечные точки, доступные для использования с этой функцией:
listModels извлекает весь список моделей Avaialbe для разработчика. Вот пример использования вместе с соответствующим выводом: do {
let modelsResponse = try await openAi . listModels ( )
} catch {
// Insert your own error handling method here.
} ListModelResponse(
object: OpenAIKit.OpenAIObject.list,
data: [
OpenAIKit.Model(
id: "text-search-babbage-doc-001",
object: OpenAIKit.OpenAIObject.model,
created: 1651172509,
ownedBy: "openai-dev"
),
OpenAIKit.Model(
id: "curie-search-query",
object: OpenAIKit.OpenAIObject.model,
created: 1651172509,
ownedBy: "openai-dev"
),
OpenAIKit.Model(
id: "text-search-babbage-query-001",
object: OpenAIKit.OpenAIObject.model,
created: 1651172509,
ownedBy: "openai-dev"
),
OpenAIKit.Model(
id: "babbage",
object: OpenAIKit.OpenAIObject.model,
created: 1649358449,
ownedBy: "openai"
),
OpenAIKit.Model(
id: "gpt-3.5-turbo-instruct-0914",
object: OpenAIKit.OpenAIObject.model,
created: 1694122472,
ownedBy: "system"
)
// ...
]
)
retrieveModels Вот пример использования вместе с соответствующим выводом: do {
let model = try await openAI . retrieveModel ( modelId : " text-davinci-001 " )
} catch {
// Insert your own error handling method here.
} OpenAIKit.Model(
id: "text-davinci-001",
object: OpenAIKit.OpenAIObject.model,
created: 1649364042,
ownedBy: "openai"
)
По состоянию на 6 июля 2023 года OpenAI объявил о том, как в начале 2024 года, в начале 2024 года наступил уход в начале 2024 года. Рекомендуется. API завершения чата доказал, что обрабатывает подавляющее большинство предыдущих вариантов использования и новых разговорных потребностей с более высокой гибкостью и специфичностью, значительно улучшив опыт разработчика. Для получения более подробной информации обратитесь к официальному объявлению.
По состоянию на 2.x модели завершения чата используют enums для обозначения каждой доступной модели для основного использования моделей по умолчанию. Вот пример того, как мигрировать с использования более старого инициализатора для ChatParameter в инициализатор для 2.x:
// 1.x implementation
let chatParameters = ChatParameters ( model : " gpt4 " , messages : chat )
// ✅ 2.x implementation
let chatParameters = ChatParameters ( model : . gpt4 , messages : chat ) Если вам нужна индивидуальная строка для моделей с тонкой настройкой, используйте параметр customModel :
// ✅ 2.x implementation for custom model IDs
let chatParameters = ChatParameters ( customModel : " INSERT-MODEL-ID " , message : chat ) (TBD)
Мы приветствуем любого, кто внес свой вклад в проект посредством публикации проблем, если они сталкиваются с какими -либо ошибками / глюками при использовании OpenAikit; А также с созданием проблем с привлечением, которые добавляют любые дополнительные функции в OpenAikit.
OpenAikit выпускается по лицензии MIT, и любое использование конечной точки Openai будет находиться в соответствии с политикой использования.
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.