تتضمن حزمة Spezi LLM Swift وحدات مفيدة لدمج الوظائف المتعلقة بـ LLM في التطبيق الخاص بك. توفر الحزمة جميع الأدوات اللازمة لتنفيذ LLM المحلي ، واستخدام LLMs المستند إلى Openai عن بُعد ، بالإضافة إلى LLMs تعمل على موارد عقدة الضباب داخل الشبكة المحلية.
![]() | ![]() | ![]() |
|---|---|---|
OpenAI LLM Chat View | Language Model Download | Local LLM Chat View |
تحتاج إلى إضافة حزمة Spezillm Swift إلى تطبيقك في Xcode أو Swift Package.
مهم
إذا لم يتم تكوين التطبيق الخاص بك بعد لاستخدام SPEZI ، فاتبع مقالة SPEZI Setup لإعداد البنية التحتية Core Spezi.
نظرًا لأن Spezi LLM يحتوي على مجموعة متنوعة من الأهداف المختلفة لوظائف LLM محددة ، يرجى اتباع دليل الإعداد الإضافي في القسم الهدف المعني من هذا ReadMe.
يوفر Spezi LLM عددًا من الأهداف لمساعدة المطورين على دمج LLMs في تطبيقاتهم المستندة إلى Spezi:
يسلط القسم أدناه الضوء على الإعداد والاستخدام الأساسي لـ SPEZILLMLOCAL و Spezillmopenai و SPEZILLMFOG من أجل دمج نماذج اللغة في تطبيق قائم على Spezi.
ملحوظة
لمعرفة المزيد حول استخدام الأهداف الفردية ، يرجى الرجوع إلى وثائق DOCC للحزمة.
يمكّن الهدف المطورين من تنفيذ نماذج اللغة متوسطة الحجم بسهولة (LLMS) محليًا على الجهاز. تتيح لك الوحدة النمطية التفاعل مع LLM المحلي عبر واجهات برمجة التطبيقات القائمة على سويفت ، لا يوجد تفاعل مع رمز منخفض المستوى ضروري ، وبناء على أعلى البنية التحتية لهدف Spezillm.
مهم
Spezi LLM Local غير متوافق مع أجهزة المحاكاة. يتطلب mlx-swift الأساسي mtlgpufamily المعدني الحديث ولا يوفر المحاكاة ذلك.
مهم
هام: لاستخدام الهدف المحلي LLM ، تتطلب بعض LLMs إضافة استحقاق حد الذاكرة زيادة للمشروع.
يمكنك تكوين تنفيذ LLM المحلي SPEZI داخل SpeziAppDelegate النموذجي. في المثال أدناه ، يتم تكوين LLMRunner من هدف Spezillm المسؤول عن توفير وظائف LLM داخل النظام البيئي Spezi باستخدام LLMLocalPlatform من الهدف spezillmlocal. هذا يعد LLMRunner لتنفيذ نماذج اللغة محليا.
class TestAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMLocalPlatform ( )
}
}
}
} يعرض مثال الكود أدناه التفاعل مع LLMs المحلية من خلال spezillm LLMRunner ، والذي يتم حقنه في Environment Swiftui عبر Configuration الموضح أعلاه.
يحدد LLMLocalSchema نوع وتكوينات LLMLocalSession التي تم تنفيذها. يتم هذا التحول عبر LLMRunner الذي يستخدم LLMLocalPlatform . يؤدي الاستدلال عبر LLMLocalSession/generate() إلى إرجاع AsyncThrowingStream الذي يعطي جميع قطع String التي تم إنشاؤها.
struct LLMLocalDemoView : View {
@ Environment ( LLMRunner . self ) var runner
@ State var responseText = " "
var body : some View {
Text ( responseText )
. task {
// Instantiate the `LLMLocalSchema` to an `LLMLocalSession` via the `LLMRunner`.
let llmSession : LLMLocalSession = runner (
with : LLMLocalSchema (
model : . llama3_8B_4bit ,
formatChat : LLMLocalSchema . PromptFormattingDefaults . llama3
)
)
do {
for try await token in try await llmSession . generate ( ) {
responseText . append ( token )
}
} catch {
// Handle errors here. E.g., you can use `ViewState` and `viewStateAlert` from SpeziViews.
}
}
}
}
ملحوظة
لمعرفة المزيد حول استخدام spezillmlocal ، يرجى الرجوع إلى وثائق DOCC.
الوحدة النمطية التي تسمح لك بالتفاعل مع نماذج اللغة الكبيرة المستندة إلى GPT (LLMS) من Openai داخل تطبيق Spezi الخاص بك. يوفر SpeziLLMOpenAI واجهة برمجة تطبيقات سويفت نقية للتفاعل مع API Openai GPT ، وبناء على أعلى البنية التحتية لهدف Spezillm. بالإضافة إلى ذلك ، يوفر SpeziLLMOpenAI للمطورين لغة محددة مجال إعلاني لاستخدام آلية استدعاء وظائف Openai. يتيح ذلك التواصل المنظم ، ثنائي الاتجاه ، وموثوقه بين Openai LLMs والأدوات الخارجية ، مثل النظام البيئي Spezi.
من أجل استخدام Openai LLMS داخل النظام البيئي Spezi ، يجب تهيئة Spezillm LLMRunner في Configuration spezi مع LLMOpenAIPlatform . فقط بعد ، يمكن استخدام LLMRunner لاستنتاج Openai LLMS. راجع وثائق Spezillm لمزيد من التفاصيل.
import Spezi
import SpeziLLM
import SpeziLLMOpenAI
class LLMOpenAIAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMOpenAIPlatform ( )
}
}
}
} مهم
إذا كنت تستخدم SpeziLLMOpenAI على MacOS ، تأكد من إضافة استحقاق Keychain Access Groups إلى مشروع Xcode المرفق عبر Project_name> التوقيع والقدرات> + القدرة . يمكن ترك مجموعة مجموعات سلسلة المفاتيح فارغة ، فقط مطلوب استحقاق الأساس.
يعرض مثال الكود أدناه التفاعل مع Openai LLM من خلال spezillm LLMRunner ، والذي يتم حقنه في Environment Swiftui عبر Configuration الموضح أعلاه.
يحدد LLMOpenAISchema نوع وتكوينات LLMOpenAISession التي تم تنفيذها. يتم هذا التحول عبر LLMRunner الذي يستخدم LLMOpenAIPlatform . إن الاستدلال عبر LLMOpenAISession/generate() يعيد AsyncThrowingStream يعطي جميع قطع String التي تم إنشاؤها.
import SpeziLLM
import SpeziLLMOpenAI
import SwiftUI
struct LLMOpenAIDemoView : View {
@ Environment ( LLMRunner . self ) var runner
@ State var responseText = " "
var body : some View {
Text ( responseText )
. task {
// Instantiate the `LLMOpenAISchema` to an `LLMOpenAISession` via the `LLMRunner`.
let llmSession : LLMOpenAISession = runner (
with : LLMOpenAISchema (
parameters : . init (
modelType : . gpt3_5Turbo ,
systemPrompt : " You're a helpful assistant that answers questions from users. " ,
overwritingToken : " abc123 "
)
)
)
do {
for try await token in try await llmSession . generate ( ) {
responseText . append ( token )
}
} catch {
// Handle errors here. E.g., you can use `ViewState` and `viewStateAlert` from SpeziViews.
}
}
}
}
ملحوظة
لمعرفة المزيد حول استخدام spezillmopenai ، يرجى الرجوع إلى وثائق DOCC.
يمكّنك هدف SpeziLLMFog من استخدام LLMs تشغيل موارد الحوسبة عقدة الضباب داخل الشبكة المحلية. تعلن عقد الضباب عن خدماتها عبر MDNS ، مما يمكّن العملاء من اكتشاف جميع عقد الضباب التي تخدم مضيفًا معينًا داخل الشبكة المحلية. يقوم SpeziLLMFog بعد ذلك بإرسال وظائف الاستدلال LLM ديناميكيًا إلى عقدة ضباب عشوائية داخل الشبكة المحلية وتدفق الاستجابة للأسطح على المستخدم.
مهم
يتطلب SpeziLLMFog الحصول على SpeziLLMFogNode داخل الشبكة المحلية المستضافة على بعض موارد الحوسبة التي تؤدي بالفعل طلبات الاستدلال. يوفر SpeziLLMFog الحزمة المستندة إلى SpeziLLMFogNode التي تتيح إعدادًا سهلاً لعقد الضباب هذه. راجع دليل FogNode على مستوى جذر حزمة SPM بالإضافة إلى README.md المعني لمزيد من التفاصيل.
من أجل استخدام FOG LLMS داخل النظام الإيكولوجي Spezi ، يجب تهيئة Spezillm LLMRunner في Configuration spezi باستخدام LLMFogPlatform . بعد ذلك فقط ، يمكن استخدام LLMRunner للاستدلال مع FOG LLMS. راجع وثائق Spezillm لمزيد من التفاصيل. يجب تهيئة LLMFogPlatform مع شهادة CA CAT المخصصة التي تم استخدامها لتوقيع شهادة خدمة الويب على عقدة الضباب (انظر وثائق FogNode/README.md لمزيد من المعلومات). انسخ شهادة الجذر CA من عقدة الضباب كمورد للتطبيق باستخدام SpeziLLMFog واستخدمها لتهيئة LLMFogPlatform ضمن Configuration spezi.
class LLMFogAppDelegate : SpeziAppDelegate {
private nonisolated static var caCertificateUrl : URL {
// Return local file URL of root CA certificate in the `.crt` format
}
override var configuration : Configuration {
Configuration {
LLMRunner {
// Set up the Fog platform with the custom CA certificate
LLMRunner {
LLMFogPlatform ( configuration : . init ( caCertificate : Self . caCertificateUrl ) )
}
}
}
}
} يعرض مثال الكود أدناه التفاعل مع الضباب LLM من خلال spezillm LLMRunner ، والذي يتم حقنه في Environment Swiftui عبر Configuration الموضح أعلاه.
يحدد LLMFogSchema نوع وتكوينات LLMFogSession التي تم تنفيذها. يتم هذا التحول عبر LLMRunner الذي يستخدم LLMFogPlatform . يؤدي الاستدلال عبر LLMFogSession/generate() إلى إرجاع AsyncThrowingStream الذي يعطي جميع قطع String التي تم إنشاؤها. يكتشف LLMFogSession تلقائيًا جميع عقد ضباب LLM المتاحة داخل الشبكة المحلية عند الإعداد وإرسال وظائف الاستدلال LLM إلى مورد الحوسبة الضبابية ، وتدفق الاستجابة وتسطحها إلى المستخدم.
مهم
يقبل LLMFogSchema إغلاقًا يعيد رمز تفويض يتم تمريره مع كل طلب إلى عقدة الضباب في حقل Bearer HTTP عبر LLMFogParameters/init(modelType:systemPrompt:authToken:) . يتم إنشاء الرمز المميز عن طريق الإغلاق بناءً على كل طلب استنتاج LLM ، حيث قد يكون LLMFogSession طويلًا ، وبالتالي يمكن أن تنتهي الرمز المميز. تأكد من أن الإغلاق ينقش بشكل مناسب الرمز المميز من أجل منع تحديث الرمز المميز غير الضروري إلى الأنظمة الخارجية.
struct LLMFogDemoView : View {
@ Environment ( LLMRunner . self ) var runner
@ State var responseText = " "
var body : some View {
Text ( responseText )
. task {
// Instantiate the `LLMFogSchema` to an `LLMFogSession` via the `LLMRunner`.
let llmSession : LLMFogSession = runner (
with : LLMFogSchema (
parameters : . init (
modelType : . llama7B ,
systemPrompt : " You're a helpful assistant that answers questions from users. " ,
authToken : {
// Return authorization token as `String` or `nil` if no token is required by the Fog node.
}
)
)
)
do {
for try await token in try await llmSession . generate ( ) {
responseText . append ( token )
}
} catch {
// Handle errors here. E.g., you can use `ViewState` and `viewStateAlert` from SpeziViews.
}
}
}
}
ملحوظة
لمعرفة المزيد حول استخدام spezillmfog ، يرجى الرجوع إلى وثائق DOCC.
المساهمات في هذا المشروع مرحب بها. يرجى التأكد من قراءة إرشادات المساهمة وقواعد سلوك العهد المساهم أولاً.
هذا المشروع مرخص بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. انظر التراخيص لمزيد من المعلومات.