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.