Le package Spezi LLM SWIFT comprend des modules utiles pour intégrer les fonctionnalités liées à LLM dans votre application. Le package fournit tous les outils nécessaires à l'exécution LLM locale, l'utilisation de LLMS à distance OpenAI, ainsi que les LLM fonctionnant sur des ressources de nœud de brouillard dans le réseau local.
![]() | ![]() | ![]() |
---|---|---|
OpenAI LLM Chat View | Language Model Download | Local LLM Chat View |
Vous devez ajouter le package Spezillm Swift à votre application dans Xcode ou Swift Package.
Important
Si votre application n'est pas encore configurée pour utiliser Spezi, suivez l'article de configuration de Spezi pour configurer l'infrastructure Core Spezi.
Comme Spezi LLM contient une variété de cibles différentes pour des fonctionnalités LLM spécifiques, veuillez suivre le guide de configuration supplémentaire dans la section cible respective de cette lecture.
Spezi LLM fournit un certain nombre de cibles pour aider les développeurs à intégrer les LLM dans leurs applications basées sur Spezi:
La section ci-dessous met en évidence la configuration et l'utilisation de base des cibles de SpezillmLocal, SpezillMopenai et SpezillMFog afin d'intégrer des modèles de langage dans une application basée sur Spezi.
Note
Pour en savoir plus sur l'utilisation des objectifs individuels, veuillez vous référer à la documentation du DOCC du package.
La cible permet aux développeurs d'exécuter facilement des modèles de langage de taille moyenne (LLMS) localement sur disvise. Le module vous permet d'interagir avec le LLM à exécution locale via des API purement basées sur Swift, aucune interaction avec du code de bas niveau n'est nécessaire, la construction en plus de l'infrastructure de la cible Spezillm.
Important
Spezi LLM Local n'est pas compatible avec les simulateurs. Le mlx-swift
sous-jacent nécessite un mtlgpufamily en métal moderne et le simulateur ne le fournit pas.
Important
IMPORTANT: Pour utiliser la cible locale LLM, certains LLM nécessitent d'ajouter le droit de limite de mémoire d'augmentation au projet.
Vous pouvez configurer l'exécution LLM locale de Spezi dans le SpeziAppDelegate
typique. Dans l'exemple ci-dessous, le LLMRunner
de la cible Spezillm qui est responsable de la fourniture de la fonctionnalité LLM dans l'écosystème de Spezi est configuré avec le LLMLocalPlatform
de la cible SpezillMLocal. Cela prépare le LLMRunner
à exécuter localement les modèles de langue.
class TestAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMLocalPlatform ( )
}
}
}
}
L'exemple de code ci-dessous présente l'interaction avec les LLM locaux via le Spezillm LLMRunner
, qui est injecté dans l' Environment
Swiftui via la Configuration
ci-dessus.
Le LLMLocalSchema
définit le type et les configurations de la LLMLocalSession
-exécutée. Cette transformation se fait via le LLMRunner
qui utilise le LLMLocalPlatform
. L'inférence via LLMLocalSession/generate()
renvoie un AsyncThrowingStream
qui donne toutes les pièces String
générées.
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.
}
}
}
}
Note
Pour en savoir plus sur l'utilisation de SpezillmLocal, veuillez vous référer à la documentation du DOCC.
Un module qui vous permet d'interagir avec les modèles de grande langue (LLMS) basés sur GPT à partir d'OpenAI dans votre application Spezi. SpeziLLMOpenAI
fournit une API basée sur Swift pure pour interagir avec l'API Openai GPT, construisant au-dessus de l'infrastructure de la cible Spezillm. De plus, SpeziLLMOpenAI
fournit aux développeurs un langage spécifique au domaine déclaratif pour utiliser le mécanisme d'appel de la fonction OpenAI. Cela permet une communication structurée, bidirectionnelle et fiable entre l'Openai LLMS et les outils externes, tels que l'écosystème Spezi.
Afin d'utiliser Openai LLMS dans l'écosystème de Spezi, le Spezillm LLMRunner
doit être initialisé dans la Configuration
de Spezi avec le LLMOpenAIPlatform
. Uniquement après, le LLMRunner
peut être utilisé pour l'inférence des LLMS OpenAI. Voir la documentation Spezillm pour plus de détails.
import Spezi
import SpeziLLM
import SpeziLLMOpenAI
class LLMOpenAIAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMOpenAIPlatform ( )
}
}
}
}
Important
Si vous utilisez SpeziLLMOpenAI
sur MacOS, assurez-vous d'ajouter les Keychain Access Groups
en droit au projet Xcode enfermé via Project_name> Signing & capacities> + capabilité . Le tableau des groupes de trousseau peut être laissé vide, seul le droit de base est requis.
L'exemple de code ci-dessous présente l'interaction avec un Openai LLM via le Spezillm LLMRunner
, qui est injecté dans l' Environment
Swiftui via la Configuration
ci-dessus.
Le LLMOpenAISchema
définit le type et les configurations de la LLMOpenAISession
-tee-exécutée. Cette transformation se fait via le LLMRunner
qui utilise le LLMOpenAIPlatform
. L'inférence via LLMOpenAISession/generate()
renvoie un AsyncThrowingStream
qui donne toutes les pièces String
générées.
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.
}
}
}
}
Note
Pour en savoir plus sur l'utilisation de Spezillmopenai, veuillez vous référer à la documentation du DOCC.
La cible SpeziLLMFog
vous permet d'utiliser des LLM en cours d'exécution sur les ressources informatiques du nœud de brouillard dans le réseau local. Les nœuds de brouillard annoncent leurs services via MDNS, permettant aux clients de découvrir tous les nœuds de brouillard desservant un hôte spécifique au sein du réseau local. SpeziLLMFog
répartit ensuite les travaux d'inférence LLM dynamiquement à un nœud de brouillard aléatoire dans le réseau local et diffuse la réponse pour le faire surface à l'utilisateur.
Important
SpeziLLMFog
nécessite une SpeziLLMFogNode
dans le réseau local hébergé sur une ressource informatique qui effectue réellement les demandes d'inférence. SpeziLLMFog
fournit le package basé sur SpeziLLMFogNode
Docker qui permet une configuration facile de ces nœuds de brouillard. Voir le répertoire FogNode
au niveau racine du package SPM ainsi que le README.md
respectif pour plus de détails.
Afin d'utiliser FOG LLMS dans l'écosystème Spezi, le Spezillm LLMRunner
doit être initialisé dans la Configuration
de Spezi avec le LLMFogPlatform
. Uniquement après, le LLMRunner
peut être utilisé pour l'inférence avec le FOG LLMS. Voir la documentation Spezillm pour plus de détails. Le LLMFogPlatform
doit être initialisé avec le certificat Root CA personnalisé qui a été utilisé pour signer le certificat de service Web du nœud de brouillard (voir la documentation FogNode/README.md
pour plus d'informations). Copiez le certificat Root CA à partir du nœud de brouillard en tant que ressource à l'application à l'aide SpeziLLMFog
et utilisez-le pour initialiser le LLMFogPlatform
dans la Configuration
de 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 ) )
}
}
}
}
}
L'exemple de code ci-dessous présente l'interaction avec un FOG LLM via le Spezillm LLMRunner
, qui est injecté dans l' Environment
Swiftui via la Configuration
ci-dessus.
Le LLMFogSchema
définit le type et les configurations de la LLMFogSession
-exécutée. Cette transformation se fait via le LLMRunner
qui utilise le LLMFogPlatform
. L'inférence via LLMFogSession/generate()
renvoie un AsyncThrowingStream
qui donne toutes les pièces String
générées. La LLMFogSession
découvre automatiquement tous les nœuds de brouillard LLM disponibles dans le réseau local lors de la configuration et envoie les travaux d'inférence LLM à la ressource informatique du FOG, en diffusant la réponse et le fait surface à l'utilisateur.
Important
Le LLMFogSchema
accepte une fermeture qui renvoie un jeton d'autorisation qui est passé avec chaque demande au nœud de brouillard dans le champ HTTP Bearer
via le LLMFogParameters/init(modelType:systemPrompt:authToken:)
. Le jeton est créé via la fermeture à chaque demande d'inférence LLM, car la LLMFogSession
peut être durable et le jeton pourrait donc expirer. Assurez-vous que la fermeture met en cache de manière appropriée le jeton afin d'éviter lestiné à rafraîchir les jetons inutiles aux systèmes externes.
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.
}
}
}
}
Note
Pour en savoir plus sur l'utilisation de Spezillmfog, veuillez vous référer à la documentation du DOCC.
Les contributions à ce projet sont les bienvenues. Veuillez vous assurer de lire les directives de contribution et le Code de conduite de la clause de contributeur en premier.
Ce projet est autorisé sous la licence du MIT. Voir les licences pour plus d'informations.