سويفت سويفت سويفت SDK لواجهة برمجة تطبيقات Openai.
الإبلاغ عن ميزة طلب · طلب
Openaikit هي SDK السريعة التي تعتمد على المجتمع مصممة لتزويد المطورين السريعين بطريقة سلسة وفعالة وسويتها للتفاعل مع نقطة نهاية راحة Openai. هدفنا هو خفض حاجز المطورين السريع ، مما يتيح لهم دمج قوة Openai في تطبيقاتهم دون الخوض في تعميق الخدمات المريحة.
مع زيادة الطلب على الميزات التي تعمل بمنظمة العفو الدولية في التطبيقات الحديثة ، من الأهمية بمكان للمطورين الوصول إلى الأدوات التي تبسط عملية التكامل. بينما يقدم Openai مجموعة لا تصدق من القدرات ، كانت هناك حاجة واضحة إلى SDK السريع المخصص الذي يتوافق مع الممارسات الاصطلاحية للغة وتوقعات مجتمع المطور السريع.
لقد تصورنا أداة لا توفر فقط الوصول الخام إلى وظائف Openai ولكن أيضًا يعزز تجربة المطور مع واجهة برمجة تطبيقات واضحة وبديهية. هدفنا النهائي هو تعزيز الابتكار من خلال تزويد المجتمع السريع بالأدوات المناسبة لدمج قدرات الذكاء الاصطناعي في تطبيقاتهم دون عناء.
منصة | الحد الأدنى للنسخة السريعة | تثبيت | حالة |
---|---|---|---|
iOS 13.0+ / MacOS 10.15+ / tvos 13.0+ / Watchos 6.0+ / VisionOS 1.0+ | 5.7 | مدير الحزمة السريع | تم اختباره بالكامل |
يتيح مدير الحزمة Swift للمطورين دمج الحزم بسهولة في مشاريع وحزم Xcode الخاصة بهم ؛ كما تم دمجها بالكامل في برنامج التحويل البرمجي swift
.
https://github.com/OpenDive/OpenAIKit.git
بمجرد إعداد حزمة Swift الخاصة بك ، أضف رابط GIT ضمن قيمة dependencies
الخاصة بملف Package.swift
.
dependencies: [
. package ( url : " https://github.com/OpenDive/OpenAIKit.git " , . upToNextMajor ( from : " 2.0.1 " ) )
]
للحصول على مفتاح API ، انتقل إلى صفحة API Keys
في صفحة حسابك هنا.
️ ؟ هام: لا تخزن مفاتيح API Openai مباشرة في الكود! ؟️ عند العمل مع واجهة برمجة تطبيقات Openai ، من الضروري لأسباب أمنية عدم تضمين مفاتيح API مباشرة ضمن قاعدة بيانات التطبيق الخاصة بك. يمكن أن يعرض تضمين المفاتيح مباشرة في رمز المصدر الخاص بك للمستخدمين غير المصرح لهم والممثلين الخبيثين ، مما يؤدي إلى سوء استخدام محتمل.
أفضل الممارسات:
- متغيرات البيئة: قم بتخزين مفاتيح API في متغيرات البيئة والوصول إليها في الكود الخاص بك. وبهذه الطريقة ، لا يتم ترميزها بقوة في طلبك ويمكن إدارتها بشكل آمن.
- إدارة الأسرار: استخدم أداة أو خدمة آمنة لإدارة الأسرار لتخزين واسترداد مفاتيح API الخاصة بك. تم تصميم أدوات مثل AWS Secrets Manager أو Hashicorp Vault أو Firebase أو CloudKit أو Azure Key Vault لتخزين البيانات الحساسة وإدارتها واستردادها. وبهذه الطريقة ، لا يتمتع المستخدم بوصول على الأجهزة إلى المفاتيح.
- .gitignore: إذا قمت بتخزين مفاتيح API في ملف التكوين ، فتأكد دائمًا من إضافة هذا الملف إلى
.gitignore
أو آلية مماثلة لمنعه من الالتزام عن طريق الخطأ بنظام التحكم في المصدر.- تدوير المفاتيح بانتظام: قم بتدوير مفاتيح API بشكل دوري للتخفيف من التأثير المحتمل للتسرب.
تذكر أن الأمن له أهمية قصوى. دائما إعطاء الأولوية للمعالجة الآمنة للمعلومات الحساسة مثل مفاتيح API!
لمزيد من المعلومات ، تحقق من هذه المقالة كل شيء عن إدارة مفاتيح API للمطورين السريعين.
الغطس في التطور التالي لتوليد الصور الذي يعمل بذاته من الذكاء الاصطناعى مع 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 ، هو نموذج AI المحادثة المتطورة. يوفر للمطورين أداة قوية لدمج إمكانات معالجة اللغة الطبيعية المتقدمة في التطبيقات. يمكن أن يؤدي استخدام ChatGPT إلى تعزيز تفاعلات المستخدم ، وتحسين الكفاءة ، وتقديم حلول تعتمد على AI في حالات الاستخدام المختلفة. دمج قوة 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 هو طراز Openai's Speech to Text AI ، مصمم لنسخ دقيق للمحتوى المنطوق. من خلال تحويل الصوت إلى نص ، يوفر للمطورين أداة مباشرة للمهام مثل خدمات النسخ أو الأوامر الصوتية أو ترجمات اللغة الصوتية أو فهرسة الصوت. يمكن أن يساعد تطبيق الهمس في تبسيط العمليات ، وجعل التطبيقات أكثر سهولة ، والاستفادة من البيانات الصوتية بكفاءة.
هناك نقاط النهاية الرئيسية التي تستخدم نموذج 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 عن إهمال النماذج القديمة في API الإكمال ، والتي تم تعيينها للتقاعد في بداية عام 2024. يوصى بشدة بالانتقال إلى API لإكمال الدردشة التي توفر واجهة موجهة أكثر تنظيماً وقدرات محادثة متعددة. لقد أثبتت API API لإكمال الدردشة التعامل مع الغالبية العظمى من حالات الاستخدام السابقة واحتياجات المحادثة الجديدة مع مرونة وخصوصية أعلى ، مما يعزز تجربة المطور بشكل كبير. لمزيد من التفاصيل ، راجع الإعلان الرسمي.
اعتبارًا من 2.x ، تستخدم نماذج إكمال الدردشة التعدادات لتسمية كل نموذج متاح للاستخدام الرئيسي للنماذج الافتراضية. فيما يلي مثال على كيفية الترحيل من استخدام التهيئة القديمة لـ 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 بموجب ترخيص معهد ماساتشوستس للتكنولوجيا ، وسيكون أي استخدام لنقطة نهاية الراحة في 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.