SWIFT SDK yang dipelihara oleh komunitas untuk API Openai.
Laporkan Bug · Fitur Permintaan
Openaikit adalah SDK Swift yang digerakkan oleh masyarakat yang dirancang untuk memberikan cara Swift dengan pengembang Swift dengan cara yang mulus, efisien, dan Swifty untuk berinteraksi dengan titik akhir Openai REST. Tujuan kami adalah untuk menurunkan penghalang bagi pengembang Swift, memungkinkan mereka untuk mengintegrasikan kekuatan openai ke dalam aplikasi mereka tanpa menggali jauh ke dalam seluk -beluk layanan yang tenang.
Dengan meningkatnya permintaan untuk fitur bertenaga AI dalam aplikasi modern, sangat penting bagi pengembang untuk memiliki akses ke alat yang menyederhanakan proses integrasi. Sementara Openai menawarkan rangkaian kemampuan yang luar biasa, ada kebutuhan yang jelas untuk SDK Swift khusus yang selaras dengan praktik idiomatik bahasa dan harapan komunitas pengembang Swift.
Kami membayangkan alat yang tidak hanya menyediakan akses mentah ke fungsionalitas openai tetapi juga meningkatkan pengalaman pengembang dengan API yang jelas dan intuitif. Tujuan utama kami adalah untuk menumbuhkan inovasi dengan memberikan komunitas Swift alat yang tepat untuk mengintegrasikan kemampuan AI ke dalam aplikasi mereka dengan mudah.
Platform | Versi Swift Minimum | Instalasi | Status |
---|---|---|---|
iOS 13.0+ / MacOS 10.15+ / TVOS 13.0+ / WatchOS 6.0+ / Visionos 1.0+ | 5.7 | Manajer Paket Swift | Sepenuhnya diuji |
Swift Package Manager memungkinkan pengembang untuk dengan mudah mengintegrasikan paket ke dalam proyek dan paket XCode mereka; dan juga sepenuhnya terintegrasi ke dalam kompiler swift
.
https://github.com/OpenDive/OpenAIKit.git
Setelah Anda mengatur paket Swift, tambahkan tautan GIT di dalam nilai dependencies
paket Package.swift
Anda.
dependencies: [
. package ( url : " https://github.com/OpenDive/OpenAIKit.git " , . upToNextMajor ( from : " 2.0.1 " ) )
]
Untuk mendapatkan kunci API, buka halaman API Keys
Anda di halaman akun Anda di sini.
️ ? PENTING: Jangan menyimpan tombol API OpenAI secara langsung dalam kode! ?️ Saat bekerja dengan API Openai, penting untuk alasan keamanan untuk tidak menyematkan kunci API Anda secara langsung dalam basis kode aplikasi Anda. Menyematkan kunci langsung dalam kode sumber Anda dapat mengekspos mereka pada pengguna yang tidak berwenang dan aktor jahat, yang mengarah pada potensi penyalahgunaan.
Praktik Terbaik:
- Variabel Lingkungan: Simpan kunci API Anda dalam variabel lingkungan dan aksesnya dalam kode Anda. Dengan cara ini, mereka tidak dikodekan dengan keras ke dalam aplikasi Anda dan dapat dikelola dengan aman.
- Manajemen Rahasia: Gunakan alat atau layanan Manajemen Rahasia yang aman untuk menyimpan dan mengambil kunci API Anda. Alat -alat seperti AWS Secrets Manager, Hashicorp Vault, Firebase, CloudKit, atau Azure Key Vault dirancang untuk menyimpan, mengelola, dan mengambil data yang sensitif. Dengan cara ini, pengguna tidak memiliki akses di perangkat.
- .gitignore: Jika Anda menyimpan kunci API Anda dalam file konfigurasi, selalu pastikan bahwa file ini ditambahkan ke
.gitignore
atau mekanisme serupa untuk mencegahnya secara tidak sengaja berkomitmen pada sistem kontrol sumber.- Putar tombol secara teratur: Putar tombol API Anda secara berkala untuk mengurangi potensi dampak kebocoran.
Ingat, keamanan adalah yang paling penting. Selalu prioritaskan penanganan yang aman dari informasi sensitif seperti kunci API!
Untuk informasi lebih lanjut, lihat artikel ini tentang manajemen kunci API untuk pengembang Swift.
Selami evolusi berikutnya dari pembuatan gambar bertenaga AI dengan Dall-E 2 (dan segera hadir, Dall-E 3), dibawa kepada Anda oleh Openai. Membangun di atas warisan pendahulunya, Dall-E 2 menawarkan kemampuan yang ditingkatkan untuk mewujudkan visual yang rumit dari petunjuk tekstual, menciptakan jembatan yang mulus antara bahasa dan citra. Pengembang dapat memanfaatkan teknologi inovatif ini untuk memperkaya pengalaman pengguna, membuat konten dinamis, dan menginspirasi jalan kreativitas baru. Revolusi aplikasi dan proyek Anda dengan mengintegrasikan kekuatan mutakhir Dall-E 2.
Ada tiga titik akhir yang disediakan oleh OpenAi untuk berinteraksi dengan Dall -E 2: - createImage
adalah titik akhir utama yang memungkinkan pembuatan gambar langsung dari prompt teks. Berikut adalah contoh tentang cara menggunakan titik akhir, bersama dengan output yang berkorelasi:
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.
}
![]() | ![]() | ![]() |
---|---|---|
Asli | Masker | Edit |
- createImageVariation
memungkinkan pengembang untuk membuat variasi gambar input yang diberikan. Berikut adalah contoh tentang cara menggunakan titik akhir, bersama dengan output yang berkorelasi:
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.
}
![]() | ![]() |
---|---|
Asli | Variasi |
ChatGPT, dibangun di atas arsitektur GPT-4 Openai, adalah model AI percakapan mutakhir. Ini memberi pengembang alat yang kuat untuk mengintegrasikan kemampuan pemrosesan bahasa alami canggih ke dalam aplikasi. Menggunakan ChatGPT dapat meningkatkan interaksi pengguna, meningkatkan efisiensi, dan menawarkan solusi yang digerakkan AI dalam berbagai kasus penggunaan. Masukkan kekuatan GPT-4 ke dalam proyek Anda untuk hasil yang nyata.
Ada satu titik akhir untuk fitur ini, namun, SDK ini membagi titik akhir menjadi dua fungsi dengan tiga fitur terpisah secara total: - generateChatCompletion
memungkinkan pengembang untuk menghasilkan penyelesaian obrolan menggunakan model yang disediakan dari OpenAi; atau model yang dimiliki pengembang yang disetel. Berikut adalah contoh tentang cara menggunakan titik akhir, bersama dengan output yang berkorelasi:
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
)
)
)
Pengembang juga dapat menggunakan panggilan fungsi untuk menjalankan berbagai fungsi (yaitu, mengambil info cuaca, mengunggah file, dll). Berikut adalah contoh tentang cara menggunakan parameter, respons yang sesuai, dan penggunaan contoh dengan fungsi lokal.
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
memungkinkan Developr untuk melakukan streaming data penyelesaian obrolan dari titik akhir. Berikut adalah contoh tentang cara menggunakan titik akhir, bersama dengan output yang berkorelasi:
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 adalah model AI ucapan-ke-teks Openai, yang dirancang untuk transkripsi yang akurat dari konten lisan. Dengan mengubah audio menjadi teks, ia menawarkan pengembang alat langsung untuk tugas -tugas seperti layanan transkripsi, perintah suara, terjemahan bahasa vokal, atau pengindeksan audio. Menerapkan Whisper dapat membantu merampingkan proses, membuat aplikasi lebih mudah diakses, dan memanfaatkan data suara secara efisien.
Ada dua titik akhir utama yang menggunakan model Whisper: - createTranscription
adalah titik akhir utama yang memungkinkan pengembang untuk menyalin audio lisan ke dalam teks. Berikut adalah contoh tentang cara menggunakan titik akhir, dan item yang dikembalikan yang sesuai:
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
adalah titik akhir kedua yang memungkinkan pengembang untuk menerjemahkan audio non -Inggris ke dalam teks bahasa Inggris yang ditranskripsi. Berikut adalah contoh tentang cara menggunakan titik akhir, dan item yang dikembalikan yang sesuai:
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.
Embeddings menggunakan model GPT Openai untuk menghasilkan representasi vektor padat untuk teks. Embeddings ini menangkap informasi semantik, memungkinkan pengembang untuk melakukan tugas-tugas seperti pencarian kesamaan, pengelompokan, atau penyesuaian pada tugas-tugas tertentu. Dengan mengintegrasikan embeddings GPT ke dalam aplikasi, pengembang dapat meningkatkan analisis teks dan kemampuan pengambilan, yang mengarah pada pemrosesan dan wawasan data yang lebih efektif.
Berikut adalah contoh tentang cara menggunakannya, dan output yang diharapkan untuk titik akhir:
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
)
)
Model titik akhir memungkinkan pengembang untuk mengambil model yang tersedia saat ini dari OpenAI, bersama dengan model fine-tuned mereka sendiri.
Ada dua titik akhir yang tersedia untuk digunakan dengan fitur ini:
listModels
mengambil seluruh daftar model Avaialbe ke pengembang. Berikut adalah contoh penggunaan, bersama dengan output yang sesuai: 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
mengambil satu model tunggal, mengingat ID model input. Berikut adalah contoh penggunaan, bersama dengan output yang sesuai: 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"
)
Pada 6 Juli 2023, OpenAI telah mengumumkan kehancuran model yang lebih lama dalam API penyelesaian, yang akan pensiun pada awal 2024. Sangat disarankan untuk beralih ke API penyelesaian obrolan yang menyediakan antarmuka cepat yang lebih terstruktur dan kemampuan percakapan multi-putar. API penyelesaian obrolan telah terbukti menangani sebagian besar kasus penggunaan sebelumnya dan kebutuhan percakapan baru dengan fleksibilitas dan spesifisitas yang lebih tinggi, secara signifikan meningkatkan pengalaman pengembang. Untuk detail lebih lanjut, lihat pengumuman resmi.
Pada 2.x, model penyelesaian obrolan menggunakan enum untuk memberi label setiap model yang tersedia untuk penggunaan utama model default. Berikut adalah contoh tentang cara bermigrasi dari menggunakan inisialisasi yang lebih lama untuk ChatParameter
ke inisialisasi untuk 2.x:
// 1.x implementation
let chatParameters = ChatParameters ( model : " gpt4 " , messages : chat )
// ✅ 2.x implementation
let chatParameters = ChatParameters ( model : . gpt4 , messages : chat )
Jika Anda memerlukan string khusus untuk model yang disesuaikan, gunakan parameter customModel
:
// ✅ 2.x implementation for custom model IDs
let chatParameters = ChatParameters ( customModel : " INSERT-MODEL-ID " , message : chat )
(TBD)
Kami menyambut siapa pun untuk berkontribusi pada proyek melalui masalah posting, jika mereka menghadapi bug / gangguan saat menggunakan OpenAikit; Dan juga dengan membuat masalah tarik yang menambah fitur tambahan ke OpenAikit.
Openaikit dirilis di bawah lisensi MIT, dan segala penggunaan titik akhir istirahat Openai akan berada di bawah kebijakan penggunaan yang ditetapkan oleh mereka.
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.