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.