تتضمن حزمة 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.
المساهمات في هذا المشروع مرحب بها. يرجى التأكد من قراءة إرشادات المساهمة وقواعد سلوك العهد المساهم أولاً.
هذا المشروع مرخص بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. انظر التراخيص لمزيد من المعلومات.