Пакет Spezi LLM Swift включает в себя модули, которые полезны для интеграции функциональности, связанных с LLM, в ваше приложение. Пакет предоставляет все необходимые инструменты для локального выполнения LLM, использование удаленных LLM на основе OpenAI, а также LLMS, работающие на ресурсах туманного узла в локальной сети.
![]() | ![]() | ![]() |
---|---|---|
OpenAI LLM Chat View | Language Model Download | Local LLM Chat View |
Вам нужно добавить пакет Spezillm Swift в приложение в XCode или Swift Package.
Важный
Если ваше приложение еще не настроено для использования SPEZI, следуйте статье Spezi Setup, чтобы настроить основную инфраструктуру Spezi.
Поскольку Spezi LLM содержит множество различных целей для конкретных функций LLM, пожалуйста, следуйте дополнительному руководству по настройке в соответствующем целевом разделе этого чтения.
Spezi LLM предоставляет ряд целей, чтобы помочь разработчикам интегрировать LLMS в свои приложения на основе SPEZI:
В разделе ниже подчеркивается настройка и основное использование целей Spezillmlocal, Spezillmopenai и Spezillmfog для интеграции языковых моделей в приложение на основе Spezi.
Примечание
Чтобы узнать больше об использовании отдельных целей, пожалуйста, обратитесь к документации DOCC о пакете.
Целевая цель позволяет разработчикам легко выполнять языковые модели среднего размера (LLMS) локально на грани. Модуль позволяет вам взаимодействовать с локально запущенным LLM через чисто Swift API, не требуется взаимодействие с низкоуровневым кодом, построение на вершине инфраструктуры цели Spezillm.
Важный
Spezi LLM Local не совместим с симуляторами. Базовый mlx-swift
требует современного металлического MTLGPUmily, а симулятор не предоставляет этого.
Важный
ВАЖНО: Чтобы использовать локальную цель LLM, некоторые LLMS требуют добавления права увеличения лимита памяти в проект.
Вы можете настроить локальное выполнение LLM Spezi в типичном SpeziAppDelegate
. В приведенном ниже примере LLMRunner
из цели Spezillm, который отвечает за предоставление функциональности LLM в экосистеме Spezi, настроен с LLMLocalPlatform
из целевого Spezillmlocal. Это готовит LLMRunner
к локально выполнять языковые модели.
class TestAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMLocalPlatform ( )
}
}
}
}
Приведенный ниже пример кода демонстрирует взаимодействие с локальными LLMS через Spezillm LLMRunner
, который вводится в Environment
Swiftui через Configuration
показанную выше.
LLMLocalSchema
определяет тип и конфигурации подготовленного LLMLocalSession
. Это преобразование осуществляется через LLMRunner
, который использует LLMLocalPlatform
. Вывод через LLMLocalSession/generate()
возвращает AsyncThrowingStream
, который дает все сгенерированные кусочки String
.
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.
}
}
}
}
Примечание
Чтобы узнать больше об использовании Spezillmlocal, пожалуйста, обратитесь к документации DOCC.
Модуль, который позволяет вам взаимодействовать с крупными языковыми моделями на основе GPT (LLMS) от OpenAI в вашем приложении Spezi. SpeziLLMOpenAI
обеспечивает чистый API на основе Swift для взаимодействия с API Openai GPT, построенный на вершине инфраструктуры цели Spezillm. Кроме того, SpeziLLMOpenAI
предоставляет разработчикам декларативную область, специфичную для использования механизма вызова Openai. Это обеспечивает структурированную, двунаправленную и надежную связь между Openai LLM и внешними инструментами, такими как экосистема Spezi.
Чтобы использовать Openai LLM в экосистеме Spezi, Spezillm LLMRunner
должен быть инициализирован в Configuration
Spezi с LLMOpenAIPlatform
. Только после того, что LLMRunner
может быть использован для вывода Openai LLMS. Смотрите документацию Spezillm для получения более подробной информации.
import Spezi
import SpeziLLM
import SpeziLLMOpenAI
class LLMOpenAIAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMOpenAIPlatform ( )
}
}
}
}
Важный
При использовании SpeziLLMOpenAI
в MacOS, обеспечите добавление Keychain Access Groups
ключам в проект xcode через проект xcode через Project_name> Подписание и возможности> + Возможности . Массив групп ключей может быть оставлена пустой, требуется только базовое право.
Пример кода, приведенный ниже, демонстрирует взаимодействие с OpenAI LLM через Spezillm LLMRunner
, который вводится в Environment
Swiftui через Configuration
показанную выше.
LLMOpenAISchema
определяет тип и конфигурации подготовленного LLMOpenAISession
. Это преобразование осуществляется через LLMRunner
, который использует LLMOpenAIPlatform
. Вывод через LLMOpenAISession/generate()
возвращает AsyncThrowingStream
, который дает все сгенерированные кусочки String
.
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.
}
}
}
}
Примечание
Чтобы узнать больше об использовании Spezillmopenai, пожалуйста, обратитесь к документации DOCC.
Цель SpeziLLMFog
позволяет использовать LLMS, работающие на вычислительных ресурсах узлов FOG в локальной сети. Узлы FOG рекламируют свои услуги через MDNS, что позволяет клиентам обнаружить все туманные узлы, обслуживающие конкретный хост в локальной сети. Затем SpeziLLMFog
направляет задания LLM -вывода динамически динамически на случайный туманный узел в локальной сети и передает ответ на поверхность его на пользователя.
Важный
SpeziLLMFog
требует SpeziLLMFogNode
в локальной сети, размещенной в некотором вычислительном ресурсе, который фактически выполняет запросы на вывод. SpeziLLMFog
предоставляет пакет на основе Docker на основе SpeziLLMFogNode
, который обеспечивает легкую настройку этих туманных узлов. См. Каталог FogNode
на корневом уровне пакета SPM, а также соответствующий README.md
для получения более подробной информации.
Чтобы использовать Fog LLM в экосистеме Spezi, Spezillm LLMRunner
должен быть инициализирован в Configuration
Spezi с помощью LLMFogPlatform
. Только после того, что LLMRunner
может использоваться для вывода с FOG LLMS. Смотрите документацию Spezillm для получения более подробной информации. LLMFogPlatform
необходимо инициализировать с помощью пользовательского сертификата CA CA, который использовался для подписи сертификата веб -службы Node FOG (см. Документацию FogNode/README.md
для получения дополнительной информации). Скопируйте сертификат root CA из узла FOG в качестве ресурса в приложение с помощью SpeziLLMFog
и используйте его для инициализации LLMFogPlatform
в 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 ) )
}
}
}
}
}
Приведенный ниже пример кода демонстрирует взаимодействие с FOG LLM через Spezillm LLMRunner
, который вводится в Environment
Swiftui через Configuration
показанную выше.
LLMFogSchema
определяет тип и конфигурации LLMFogSession
для BE. Это преобразование осуществляется через LLMRunner
, который использует LLMFogPlatform
. Вывод через LLMFogSession/generate()
возвращает AsyncThrowingStream
, который дает все сгенерированные кусочки String
. LLMFogSession
автоматически обнаруживает все доступные туманные узлы LLM в локальной сети после настройки, и отправляет задания LLM вывода на вычислительный ресурс FOG, передавая ответ и передает его пользователю.
Важный
LLMFogSchema
принимает закрытие, которое возвращает токен авторизации, который передается с каждым запросом в туманный узел в поле HTTP Bearer
через LLMFogParameters/init(modelType:systemPrompt:authToken:)
. Токен создается посредством закрытия при каждом запросе вывода LLM, так как LLMFogSession
может быть длительным, и поэтому же токен может срок действия истечения. Убедитесь, что закрытие соответствующим образом кэширует токен, чтобы предотвратить ненужные обновления токена обновления к внешним системам.
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.
}
}
}
}
Примечание
Чтобы узнать больше об использовании Spezillmfog, пожалуйста, обратитесь к документации DOCC.
Вклад в этот проект приветствуются. Пожалуйста, не забудьте сначала прочитать руководящие принципы взноса и кодекс поведения участника.
Этот проект лицензирован по лицензии MIT. Смотрите лицензии для получения дополнительной информации.