El paquete Spezi LLM Swift incluye módulos que son útiles para integrar la funcionalidad relacionada con LLM en su aplicación. El paquete proporciona todas las herramientas necesarias para la ejecución local de LLM, el uso de LLM basados en OpenAI remotos, así como LLM que se ejecutan en recursos de nodo Fog dentro de la red local.
![]() | ![]() | ![]() |
|---|---|---|
OpenAI LLM Chat View | Language Model Download | Local LLM Chat View |
Debe agregar el paquete Spezillm Swift a su aplicación en el paquete Xcode o Swift.
Importante
Si su aplicación aún no está configurada para usar Spezi, siga el artículo de configuración de Spezi para configurar la infraestructura de Spezi Core.
Como Spezi LLM contiene una variedad de objetivos diferentes para funcionalidades específicas de LLM, siga la guía de configuración adicional en la sección objetivo respectivo de este readMe.
Spezi LLM proporciona una serie de objetivos para ayudar a los desarrolladores a integrar LLM en sus aplicaciones basadas en Spezi:
La siguiente sección destaca la configuración y el uso básico de los objetivos Spezillmlocal, Spezillmopenai y Spezillmfog para integrar modelos de lenguaje en una aplicación basada en Spezi.
Nota
Para obtener más información sobre el uso de los objetivos individuales, consulte la documentación de DOCC del paquete.
El objetivo permite a los desarrolladores ejecutar fácilmente modelos de lenguaje de tamaño mediano (LLMS) localmente en el dispositivo. El módulo le permite interactuar con el LLM de ejecución local a través de API puramente rápidas, no es necesaria una interacción con código de bajo nivel, que se desarrolle en la parte superior de la infraestructura del objetivo Spezillm.
Importante
Spezi LLM Local no es compatible con los simuladores. El mlx-swift subyacente requiere una moderna mtlgpufamily de metal y el simulador no lo proporciona.
Importante
Importante: para usar el objetivo local LLM, algunos LLM requieren agregar el derecho de límite de memoria de aumento al proyecto.
Puede configurar la ejecución de Spezi Local LLM dentro del típico SpeziAppDelegate . En el siguiente ejemplo, el LLMRunner del objetivo Spezillm que es responsable de proporcionar la funcionalidad LLM dentro del ecosistema Spezi está configurado con la LLMLocalPlatform del objetivo Spezillmlocal. Esto prepara al LLMRunner para ejecutar localmente modelos de lenguaje.
class TestAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMLocalPlatform ( )
}
}
}
} El ejemplo de código a continuación muestra la interacción con LLM locales a través del Spezillm LLMRunner , que se inyecta en el Environment Swiftui a través de la Configuration que se muestra arriba.
El LLMLocalSchema define el tipo y las configuraciones de la LLMLocalSession de manera ejecutada. Esta transformación se realiza a través del LLMRunner que usa LLMLocalPlatform . La inferencia a través de LLMLocalSession/generate() devuelve un AsyncThrowingStream que produce todas las piezas String generadas.
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.
}
}
}
}
Nota
Para obtener más información sobre el uso de Spezillmlocal, consulte la documentación de DOCC.
Un módulo que le permite interactuar con los modelos de idiomas grandes basados en GPT (LLMS) desde OpenAI dentro de su aplicación Spezi. SpeziLLMOpenAI proporciona una API pura basada en Swift para interactuar con la API Operai GPT, que se construye encima de la infraestructura del objetivo de Spezillm. Además, SpeziLLMOpenAI proporciona a los desarrolladores un lenguaje específico de dominio declarativo para utilizar el mecanismo de llamadas de funciones OpenAI. Esto permite una comunicación estructurada, bidireccional y confiable entre los LLM de OpenAI y las herramientas externas, como el ecosistema Spezi.
Para usar OpenAI LLMS dentro del ecosistema Spezi, el Spezillm LLMRunner debe inicializarse en la Configuration de Spezi con la LLMOpenAIPlatform . Solo después, el LLMRunner se puede usar para la inferencia de Operai LLMS. Consulte la documentación de Spezillm para obtener más detalles.
import Spezi
import SpeziLLM
import SpeziLLMOpenAI
class LLMOpenAIAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMOpenAIPlatform ( )
}
}
}
} Importante
Si usa SpeziLLMOpenAI en MacOS, asegúrese de agregar el derecho de los Keychain Access Groups al proyecto de encerrado Xcode a través de Project_Name> Firma y capacidades> + Capacidad . La variedad de grupos de llavero se puede dejar vacío, solo se requiere el derecho base.
El ejemplo de código a continuación muestra la interacción con un OpenAI LLM a través del Spezillm LLMRunner , que se inyecta en el Environment Swiftui a través de la Configuration que se muestra arriba.
El LLMOpenAISchema define el tipo y las configuraciones de LLMOpenAISession . Esta transformación se realiza a través del LLMRunner que usa LLMOpenAIPlatform . La inferencia a través de LLMOpenAISession/generate() devuelve un AsyncThrowingStream que produce todas las piezas String generadas.
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.
}
}
}
}
Nota
Para obtener más información sobre el uso de SpezillMopenai, consulte la documentación de DOCC.
El objetivo SpeziLLMFog le permite usar LLM que se ejecutan en los recursos informáticos del nodo Fog dentro de la red local. Los nodos de niebla anuncian sus servicios a través de MDNS, lo que permite a los clientes descubrir todos los nodos de niebla que sirven a un host específico dentro de la red local. SpeziLLMFog luego envía trabajos de inferencia de LLM dinámicamente a un nodo niebla aleatoria dentro de la red local y transmite la respuesta a la superficie del usuario.
Importante
SpeziLLMFog requiere un SpeziLLMFogNode dentro de la red local alojada en algún recurso informático que realmente realice las solicitudes de inferencia. SpeziLLMFog proporciona el paquete basado en SpeziLLMFogNode Docker que permite una configuración fácil de estos nodos antiniebla. Consulte el directorio FogNode en el nivel raíz del paquete SPM, así como el README.md respectivo para obtener más detalles.
Para usar Fog LLMS dentro del ecosistema Spezi, el Spezillm LLMRunner debe inicializarse en la Configuration de Spezi con LLMFogPlatform . Solo después, el LLMRunner se puede usar para inferencia con FOG LLMS. Consulte la documentación de Spezillm para obtener más detalles. El LLMFogPlatform debe inicializarse con el certificado de CA raíz personalizado que se utilizó para firmar el certificado de servicio web del nodo FOG (consulte la documentación FogNode/README.md para obtener más información). Copie el certificado de CA root desde el nodo FOG como recurso a la aplicación utilizando SpeziLLMFog y úselo para inicializar el LLMFogPlatform dentro de 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 ) )
}
}
}
}
} El ejemplo de código a continuación muestra la interacción con una niebla LLM a través del Spezillm LLMRunner , que se inyecta en el Environment Swiftui a través de la Configuration que se muestra arriba.
El LLMFogSchema define el tipo y las configuraciones de LLMFogSession de bien ejecutada. Esta transformación se realiza a través del LLMRunner que usa LLMFogPlatform . La inferencia a través de LLMFogSession/generate() devuelve un AsyncThrowingStream que produce todas las piezas String generadas. LLMFogSession descubre automáticamente todos los nodos de niebla LLM disponibles dentro de la red local al configurar y los despachan los trabajos de inferencia de LLM al recurso informático FOG, transmitiendo la respuesta y la superficie al usuario.
Importante
El LLMFogSchema acepta un cierre que devuelve un token de autorización que se pasa con cada solicitud al nodo niebla en el campo HTTP Bearer a través de LLMFogParameters/init(modelType:systemPrompt:authToken:) . El token se crea a través del cierre en cada solicitud de inferencia de LLM, ya que el LLMFogSession puede ser duradero y, por lo tanto, el token podría expirar. Asegúrese de que el cierre almacene en caché adecuadamente el token para evitar la actualización innecesaria de actualización redondra de actualización a los sistemas externos.
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.
}
}
}
}
Nota
Para obtener más información sobre el uso de Spezillmfog, consulte la documentación de DOCC.
Las contribuciones a este proyecto son bienvenidas. Asegúrese de leer las pautas de contribución y el Código de Conducta del Pacto de contribuyente primero.
Este proyecto tiene licencia bajo la licencia MIT. Consulte Licencias para obtener más información.