O pacote SPEZI LLM SWIFT inclui módulos úteis para integrar a funcionalidade relacionada ao LLM em seu aplicativo. O pacote fornece todas as ferramentas necessárias para a execução local do LLM, o uso de LLMs baseados em OpenAI remoto, bem como LLMs em execução em recursos de nó de nevoeiro na rede local.
![]() | ![]() | ![]() |
|---|---|---|
OpenAI LLM Chat View | Language Model Download | Local LLM Chat View |
Você precisa adicionar o pacote Spezillm Swift ao seu aplicativo no pacote Xcode ou Swift.
Importante
Se o seu aplicativo ainda não estiver configurado para usar o Spezi, siga o artigo Spezi Setup para configurar a infraestrutura principal do Spezi.
Como a Spezi LLM contém uma variedade de alvos diferentes para funcionalidades específicas do LLM, siga o guia de configuração adicional na respectiva seção de destino deste ReadMe.
A Spezi LLM fornece uma série de metas para ajudar os desenvolvedores a integrar o LLMS em seus aplicativos baseados em Spezi:
A seção abaixo destaca a configuração e o uso básico dos alvos SpezillMlocal, SpezillMopenai e Spezillmfog, a fim de integrar modelos de idiomas em um aplicativo baseado em Spezi.
Observação
Para saber mais sobre o uso dos objetivos individuais, consulte a documentação do PACOLC do pacote.
O destino permite que os desenvolvedores executem facilmente modelos de idiomas de tamanho médio (LLMS) localmente no dispositivo. O módulo permite que você interaja com o LLM de execução localmente por meio de APIs puramente baseadas em Swift, não é necessária interação com o código de baixo nível, com base na parte superior da infraestrutura do alvo Spezillm.
Importante
Spezi LLM Local não é compatível com simuladores. O mlx-swift subjacente requer uma moderna mtlgpufamily e o simulador não fornece isso.
Importante
IMPORTANTE: Para usar o alvo local LLM, alguns LLMs exigem adicionar o aumento do direito do limite de memória ao projeto.
Você pode configurar a execução Spezi Local LLM dentro do típico SpeziAppDelegate . No exemplo abaixo, o LLMRunner do alvo Spezillm, responsável por fornecer a funcionalidade LLM dentro do ecossistema Spezi, está configurado com o alvo SpezillMlocal LLMLocalPlatform . Isso prepara o LLMRunner para executar localmente os modelos de linguagem.
class TestAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMLocalPlatform ( )
}
}
}
} O exemplo de código abaixo mostra a interação com os LLMs locais através do Spezillm LLMRunner , que é injetado no Environment Swiftui através da Configuration mostrada acima.
O LLMLocalSchema define o tipo e as configurações da LLMLocalSession -a ser executada. Essa transformação é feita através do LLMRunner que usa o LLMLocalPlatform . A inferência via LLMLocalSession/generate() retorna um AsyncThrowingStream que produz todas as peças String geradas.
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.
}
}
}
}
Observação
Para saber mais sobre o uso do SpezillMlocal, consulte a documentação do DOCC.
Um módulo que permite interagir com os modelos de grandes idiomas baseados em GPT (LLMS) do OpenAI no seu aplicativo Spezi. SpeziLLMOpenAI fornece uma API pura baseada em SWIFT para interagir com a API do Openai GPT, construindo no topo da infraestrutura do alvo Spezillm. Além disso, SpeziLLMOpenAI fornece aos desenvolvedores uma linguagem específica de domínio declarativo para utilizar o mecanismo de chamada de função do OpenAI. Isso permite uma comunicação estruturada, bidirecional e confiável entre o OpenAi LLMS e as ferramentas externas, como o ecossistema Spezi.
Para usar o OpenAI LLMS dentro do ecossistema Spezi, o Spezillm LLMRunner precisa ser inicializado na Configuration Spezi com o LLMOpenAIPlatform . Somente depois, o LLMRunner pode ser usado para inferência do Openai LLMS. Consulte a documentação do Spezillm para obter mais detalhes.
import Spezi
import SpeziLLM
import SpeziLLMOpenAI
class LLMOpenAIAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMOpenAIPlatform ( )
}
}
}
} Importante
Se estiver usando SpeziLLMOpenAI no macOS, certifique -se de adicionar os Keychain Access Groups , com direito ao projeto Xcode de anexo via Project_Name> Signation & Capability> + Capability . A matriz de grupos de chaveiro pode ser deixada vazia, apenas o direito base é necessário.
O exemplo de código abaixo mostra a interação com um Openai LLM através do The Spezillm LLMRunner , que é injetado no Environment Swifttui através da Configuration mostrada acima.
O LLMOpenAISchema define o tipo e as configurações da LLMOpenAISession a ser executada. Essa transformação é feita através do LLMRunner que usa o LLMOpenAIPlatform . A inferência via LLMOpenAISession/generate() retorna um AsyncThrowingStream que produz todas as peças String geradas.
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.
}
}
}
}
Observação
Para saber mais sobre o uso do SpezillMopenai, consulte a documentação do DOCC.
O SpeziLLMFog Target permite que você use o LLMS em execução em recursos de computação de nó de neblina dentro da rede local. Os nós de neblina anunciam seus serviços via MDNS, permitindo que os clientes descubram todos os nós de nevoeiro que servem um host específico na rede local. SpeziLLMFog despacha os trabalhos de inferência LLM dinamicamente para um nó de nevoeiro aleatório dentro da rede local e transmite a resposta para superá -lo ao usuário.
Importante
SpeziLLMFog requer um SpeziLLMFogNode dentro da rede local hospedada em algum recurso de computação que realmente executa as solicitações de inferência. SpeziLLMFog fornece o pacote SpeziLLMFogNode Docker que permite uma configuração fácil desses nós de nevoeiro. Consulte o diretório FogNode no nível raiz do pacote SPM, bem como o respectivo README.md para obter mais detalhes.
Para usar o FOG LLMS dentro do ecossistema Spezi, o Spezillm LLMRunner precisa ser inicializado na Configuration Spezi com o LLMFogPlatform . Somente depois, o LLMRunner pode ser usado para inferência no FOG LLMS. Consulte a documentação do Spezillm para obter mais detalhes. O LLMFogPlatform precisa ser inicializado com o certificado CA Root personalizado que foi usado para assinar o certificado de serviço da Web Node Fog (consulte a documentação FogNode/README.md para obter mais informações). Copie o certificado ROOT CA do nó de neblina como recurso para o aplicativo usando SpeziLLMFog e use -o para inicializar o LLMFogPlatform na 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 ) )
}
}
}
}
} O exemplo de código abaixo mostra a interação com um FOG LLM através do The Spezillm LLMRunner , que é injetado no Environment Swiftui através da Configuration mostrada acima.
O LLMFogSchema define o tipo e as configurações da LLMFogSession a ser executada. Essa transformação é feita através do LLMRunner que usa o LLMFogPlatform . A inferência via LLMFogSession/generate() retorna um AsyncThrowingStream que produz todas as peças String geradas. O LLMFogSession descobre automaticamente todos os nós de nevoeiro LLM disponíveis na rede local após a configuração e despacha os trabalhos de inferência LLM para o recurso de computação de nevoeiro, transmitindo a resposta e a superam para o usuário.
Importante
O LLMFogSchema aceita um fechamento que retorna um token de autorização que é passado com todas as solicitações ao nó de neblina no campo HTTP Bearer via LLMFogParameters/init(modelType:systemPrompt:authToken:) . O token é criado através do fechamento em todas as solicitações de inferência do LLM, pois o LLMFogSession pode ser duradouro e o token poderia, portanto, expirar. Certifique -se de que o fechamento cache adequadamente o token, a fim de impedir a atualização desnecessária do token, as itens redondas para 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.
}
}
}
}
Observação
Para saber mais sobre o uso do Spezillmfog, consulte a documentação do DOCC.
As contribuições para este projeto são bem -vindas. Certifique -se de ler as diretrizes de contribuição e o Código de Conduta do Covenant colaborador primeiro.
Este projeto está licenciado sob a licença do MIT. Consulte licenças para obter mais informações.