CleverBird
عبارة عن حزمة Swift توفر طريقة ملائمة للتفاعل مع واجهات برمجة تطبيقات الدردشة الخاصة بـ OpenAI وتنفيذ مهام متنوعة، بما في ذلك حساب الرموز المميزة والتشفير. تم تصميم الحزمة لتقديم تجربة مطور متفوقة (DX) من خلال جعل سلسلة الدردشة مركز التفاعلات.
يتضمن CleverBird
دعمًا لتضمين المستندات واستعلامات التشابه. وهذا يجعلها أداة متعددة الاستخدامات لمجموعة واسعة من التطبيقات، خاصة الحالات التي تحتاج فيها مطالبات الدردشة إلى ذاكرة سياقية محسنة.
يركز CleverBird
بشكل ضيق على التفاعلات القائمة على الدردشة، ويجعلها رائعة.
يرجى ملاحظة أن CleverBird
هي حزمة غير رسمية ، ولا تقدمها OpenAI نفسها.
TokenEncoder
.EmbeddedDocumentStore
لإدارة أوجه تشابه المستندات والاستعلام عنها. قم باستيراد حزمة CleverBird
:
import CleverBird
قم بتهيئة OpenAIAPIConnection
باستخدام مفتاح API الخاص بك. يرجى ملاحظة أنه يجب دائمًا تحميل مفاتيح واجهة برمجة التطبيقات من متغيرات البيئة، وليس ترميزها بشكل ثابت في المصدر الخاص بك. بعد تحميل مفتاح API الخاص بك، قم بتمريره إلى مُهيئ الاتصال:
let openAIAPIConnection = OpenAIAPIConnection ( apiKey : < OPENAI_API_KEY > )
قم بإنشاء مثيل ChatThread
وأضف رسائل النظام أو المستخدم أو المساعد إلى سلسلة الدردشة:
let chatThread = ChatThread ( )
. addSystemMessage ( content : " You are a helpful assistant. " )
. addUserMessage ( content : " Who won the world series in 2020? " )
قم بإنشاء إكمال باستخدام سلسلة الدردشة وتمرير اتصال API:
let completion = try await chatThread . complete ( using : openAIAPIConnection )
تتضمن الطريقة complete(using:)
أيضًا العديد من المعلمات الاختيارية:
let completion = chatThread . complete (
using : openAIAPIConnection ,
model : . gpt4o ,
temperature : 0.7 ,
maxTokens : 500
)
في المثال أعلاه، قمنا بإنشاء إكمال باستخدام نموذج محدد ودرجة الحرارة والحد الأقصى لعدد الرموز المميزة. جميع المعلمات باستثناء connection
اختيارية. القائمة الكاملة للمعلمات هي كما يلي:
connection
: كائن اتصال API (مطلوب).model
: النموذج الذي سيتم استخدامه للإنجاز.temperature
: يتحكم في العشوائية. تولد القيم الأعلى (حتى 1) مخرجات عشوائية أكثر، بينما تولد القيم المنخفضة مخرجات أكثر حتمية.topP
: معلمة أخذ عينات النواة. وهو يحدد الكتلة الاحتمالية التي يجب تغطيتها بالتنبؤ.stop
: مجموعة من السلاسل. سيتوقف النموذج عن التوليد عندما يواجه أيًا من هذه السلاسل.maxTokens
: الحد الأقصى لعدد الرموز المميزة التي سيتم إنشاؤها.presencePenalty
: عقوبة استخدام الرموز المميزة التي تم استخدامها بالفعل.frequencyPenalty
: عقوبة استخدام الرموز المتكررة.functions
: وظائف الأداة (المعروفة أيضًا باسم "الإجراءات") لإتاحتها للنموذج.functionCallMode
: وضع استدعاء الوظيفة: .auto
أو .none
أو .specific
.يتم إلحاق رسائل الرد تلقائيًا بسلسلة الرسائل، بحيث يمكنك الاستمرار في التفاعل معها بمجرد إضافة رسائل مستخدم جديدة وطلب إكمالات إضافية.
يمكنك تخصيص كل مكالمة complete(using:)
بقيم مختلفة لنفس المعلمات في المكالمات اللاحقة في نفس سلسلة الرسائل، إذا كنت تريد:
let completion = try await chatThread . complete (
using : openAIAPIConnection ,
model : . gpt35Turbo ,
temperature : 0.5 ,
maxTokens : 300
)
أنشئ إكمالًا بالدفق باستخدام إصدار الدفق لسلسلة الدردشة:
let chatThread = ChatThread ( ) . withStreaming ( )
let completionStream = try await chatThread . complete ( using : openAIAPIConnection )
for try await messageChunk in completionStream {
print ( " Received message chunk: ( messageChunk ) " )
}
تمامًا كما هو الحال مع الإكمال غير المتدفق، سيتم إلحاق الرسالة تلقائيًا بسلسلة الرسائل بعد انتهاء الدفق، لكن الدفق يسمح لك برؤيتها أثناء ظهورها.
لتضمين الاستخدام (عدد الرموز المميزة المستخدمة في المطالبة والإكمال)، قم بإضافة streamOptions
في الطريقة complete
. يتوفر الاستخدام كخاصية لـ StreamableChatThread
بعد اكتمال الدفق.
let chatThread = ChatThread ( ) . withStreaming ( )
let completionStream = try await chatThread . complete ( using : openAIAPIConnection , includeUsage : true )
for try await messageChunk in completionStream {
print ( " Received message chunk: ( messageChunk ) " )
}
if let usage = completionStream . usage {
print ( " Usage: ( usage ) " )
}
حساب عدد الرموز المميزة للرسائل في سلسلة المحادثات:
let tokenCount = try chatThread . tokenCount ( )
إذا كنت بحاجة إلى حساب الرموز المميزة أو تشفير/فك تشفير النص خارج سلسلة المحادثات، فاستخدم فئة TokenEncoder
:
let tokenEncoder = try TokenEncoder ( model : . gpt3 )
let encodedTokens = try tokenEncoder . encode ( text : " Hello, world! " )
let decodedText = try tokenEncoder . decode ( tokens : encodedTokens )
يدعم CleverBird
مكالمات الوظائف. تتيح هذه الميزة القوية للمطورين تحديد الأوامر المخصصة الخاصة بهم، مما يسهل التحكم في سلوك الذكاء الاصطناعي. يمكن تضمين استدعاءات الوظائف في ChatThread
واستخدامها في الطريقة complete()
.
أولاً، حدد معلمات وظيفتك والدالة نفسها. يتم استخدام فئة Function.Parameters
لتعيين الخصائص والمعلمات المطلوبة لوظيفتك.
let getCurrentWeatherParameters = Function . Parameters (
properties : [
" location " : Function . Parameters . Property ( type : . string ,
description : " The city and state, e.g. San Francisco, CA " ) ,
" format " : Function . Parameters . Property ( type : . string ,
description : " The temperature unit to use. Infer this from the user's location. " ,
enumCases : [ " celsius " , " fahrenheit " ] )
] ,
required : [ " location " , " format " ] )
let getCurrentWeather = Function ( name : " get_current_weather " ,
description : " Get the current weather " ,
parameters : getCurrentWeatherParameters )
بعد ذلك، قم بتهيئة ChatThread
الخاص بك باستخدام اتصال API الخاص بك ومجموعة من الوظائف:
let chatThread = ChatThread ( functions : [ getCurrentWeather ] )
. addSystemMessage ( content : " You are a helpful assistant. " )
أخيرًا، قم باستدعاء الدالة complete(using:)
لإنشاء استجابة. إذا كان المساعد يحتاج إلى أداء وظيفة أثناء المحادثة، فسوف يستخدم تعريفات الوظيفة التي قدمتها.
يرجى ملاحظة أن الوظائف مدعومة فقط في عمليات الإكمال غير المتدفقة في الوقت الحالي.
توفر فئة EmbeddedDocumentStore
طريقة ملائمة لإدارة مجموعة من المستندات والاستعلام عنها بناءً على تشابهها. تتيح لك هذه الفئة:
أولاً، قم بإضافة مثيل EmbeddedDocumentStore
إلى التعليمات البرمجية الخاصة بك:
let openAIAPIConnection = OpenAIAPIConnection ( apiKey : " your_api_key_here " )
let embeddedDocumentStore = EmbeddedDocumentStore ( connection : connection )
يمكنك إضافة مستند واحد أو مجموعة من المستندات إلى المتجر.
let singleDocument = " My single document "
try await embeddedDocumentStore . embedAndStore ( singleDocument )
let documentCollection = [ " First document " , " Second document " , " Third document " ]
try await embeddedDocumentStore . embedAndStore ( documentCollection )
يمكنك الاستعلام في المتجر عن المستندات المشابهة لمستند الإدخال.
let similarityResults = try await embeddedDocumentStore . queryDocumentSimilarity ( " Query text here " )
let mostSimilarResult = similarityResults . first ? . document ?? " No result returned "
يمكن حفظ المتجر وتحميله من ملف (ممثل بتنسيق JSON) للتخزين المستمر.
embeddedDocumentStore . save ( to : fileURL )
embeddedDocumentStore . load ( from : fileURL )
تمت كتابة CleverBird
بواسطة BT Franklin (@btfranklin) اعتبارًا من عام 2023 فصاعدًا، وهو مرخص بموجب ترخيص MIT. راجع LICENSE.md.