Spezi LLM Swift軟件包包含有助於在應用程序中集成LLM相關功能的模塊。該軟件包為本地LLM執行,基於OpenAI的LLM的使用以及在本地網絡中運行的FOG節點資源上運行的LLM提供了所有必要的工具。
![]() | ![]() | ![]() |
---|---|---|
OpenAI LLM Chat View | Language Model Download | Local LLM Chat View |
您需要在XCode或Swift軟件包中將Spezillm Swift軟件包添加到您的應用程序中。
重要的
如果您的應用程序尚未配置為使用SPEZI,請按照Spezi設置文章進行設置,以設置Core Spezi基礎架構。
由於Spezi LLM包含針對特定LLM功能的各種不同目標,因此請遵循此讀數的相應目標部分中的其他設置指南。
Spezi LLM提供了許多目標,以幫助開發人員在其基於SPEZI的應用程序中集成LLM:
下面的部分強調了Spezillmlocal,Spezillmopenai和Spezillmfog目標的設置和基本用途,以便將語言模型集成到基於Spezi的應用程序中。
筆記
要了解有關單個目標使用情況的更多信息,請參考包裝的DOCC文檔。
該目標使開發人員可以輕鬆地在本地執行中型語言模型(LLMS)。該模塊允許您通過純粹基於SWIFT的API與本地運行的LLM進行交互,不需要與低級代碼的交互作用,這是在Spezillm目標基礎架構之上構建的。
重要的
Spezi LLM Local與模擬器不兼容。基礎的mlx-swift
需要現代的金屬mtlgpufamily,並且模擬器不提供。
重要的
重要的是:要使用LLM本地目標,一些LLM需要將增加的存儲器限制為項目。
您可以在典型的SpeziAppDelegate
中配置SPEZI本地LLM執行。在下面的示例中,來自Spezillm目標的LLMRunner
負責在Spezi生態系統內提供LLM功能,從Spezillmlocal目標配置了LLMLocalPlatform
。這為LLMRunner
準備了本地執行語言模型。
class TestAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMLocalPlatform ( )
}
}
}
}
下面的代碼示例通過SPEZILLM LLMRunner
展示了與本地LLMS的交互,該相互作用通過上面顯示的Configuration
注入SwiftUI Environment
。
LLMLocalSchema
定義了執行的LLMLocalSession
的類型和配置。這種轉換是通過使用LLMLocalPlatform
的LLMRunner
完成的。通過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文檔。
一個模塊,使您可以在SPEZI應用程序中與OpenAI的基於GPT的大型語言模型(LLM)進行交互。 SpeziLLMOpenAI
提供了一種基於Swift的API,用於與OpenAI GPT API進行交互,該API建立在Spezillm目標基礎設施之上。此外, SpeziLLMOpenAI
為開發人員提供了特定的域名域語言來利用OpenAI函數調用機制。這可以實現OpenAI LLM和外部工具(例如Spezi生態系統)之間的結構化,雙向和可靠的通信。
為了在Spezi生態系統中使用OpenAI LLM,Spezillm LLMRunner
需要在Spezi Configuration
中以LLMOpenAIPlatform
進行初始化。只有之後, LLMRunner
才能用於推斷OpenAI LLMS。有關更多詳細信息,請參見Spezillm文檔。
import Spezi
import SpeziLLM
import SpeziLLMOpenAI
class LLMOpenAIAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMOpenAIPlatform ( )
}
}
}
}
重要的
如果在MacOS上使用SpeziLLMOpenAI
,請確保通過Project_Name>簽名和能力> +功能將Keychain Access Groups
添加到封閉XCode項目中。鑰匙鏈組的數組可以空空,只需要基本權利。
下面的代碼示例通過Spezillm LLMRunner
展示了與OpenAI LLM的交互作用,該相互作用通過上面顯示的Configuration
將其註入SwiftUI Environment
。
LLMOpenAISchema
定義了執行的LLMOpenAISession
的類型和配置。這種轉換是通過使用LLMOpenAIPlatform
的LLMRunner
進行的。通過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
目標使您可以使用本地網絡中的霧節點計算資源上運行的LLM。 FOG節點通過MDN宣傳其服務,使客戶能夠發現所有服務於本地網絡中特定主機的FOG節點。然後, SpeziLLMFog
將LLM推理作業動態派遣到本地網絡中的隨機霧節點,並將其響應呈現給用戶。
重要的
SpeziLLMFog
需要在某些計算資源上託管的本地網絡中的SpeziLLMFogNode
,實際上執行了推理請求。 SpeziLLMFog
提供了基於SpeziLLMFogNode
Docker的軟件包,可輕鬆設置這些霧節點。有關更多詳細信息,請參見SPM軟件包的根級別的FogNode
目錄以及相應的README.md
。
為了在SPEZI生態系統中使用FOG LLM,SPEZILLM LLMRunner
需要在SPEZI Configuration
中使用LLMFogPlatform
初始化。只有之後, LLMRunner
才能用於使用FOG LLMS進行推理。有關更多詳細信息,請參見Spezillm文檔。需要使用用於簽署FOG節點Web服務證書的自定義根CA證書初始化LLMFogPlatform
(有關更多信息,請參見Fog Node Web服務證書(請參閱FogNode/README.md
文檔)。使用SpeziLLMFog
將root CA證書從FOG節點作為資源複製到應用程序,並使用它在Spezi Configuration
中初始化LLMFogPlatform
。
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 ) )
}
}
}
}
}
下面的代碼示例通過Spezillm LLMRunner
展示了與霧LLM的相互作用,該相互作用通過上面顯示的Configuration
將其註入SwiftUI Environment
。
LLMFogSchema
定義了執行的LLMFogSession
的類型和配置。這種轉換是通過使用LLMFogPlatform
的LLMRunner
完成的。通過LLMFogSession/generate()
推斷返回一種產生所有生成的String
件的AsyncThrowingStream
。 LLMFogSession
在設置後自動發現本地網絡中的所有可用LLM FOG節點,並將LLM推理作業發送到FOG計算資源,並將響應播放並浮出水面。
重要的
LLMFogSchema
接受封閉,該封閉返回授權令牌,每個請求將通過LLMFogParameters/init(modelType:systemPrompt:authToken:)
Bearer
HTTP字段中的霧節點)傳遞給霧節點。令牌是通過每個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許可獲得許可。有關更多信息,請參見許可證。