Spezi LLM Swiftパッケージには、アプリケーションにLLM関連の機能を統合するのに役立つモジュールが含まれています。このパッケージは、ローカルLLMの実行、リモートOpenaiベースのLLMの使用、およびローカルネットワーク内のFOGノードリソースで実行されるLLMSに必要なすべてのツールを提供します。
![]() | ![]() | ![]() |
---|---|---|
OpenAI LLM Chat View | Language Model Download | Local LLM Chat View |
Spezillm SwiftパッケージをXcodeまたはSwiftパッケージのアプリに追加する必要があります。
重要
アプリケーションがまだSpeziを使用するように構成されていない場合は、Speziセットアップ記事に従ってコアSpeziインフラストラクチャを設定します。
Spezi LLMには、特定のLLM機能のさまざまなターゲットが含まれているため、このREADMEのそれぞれのターゲットセクションの追加セットアップガイドに従ってください。
Spezi LLMは、開発者がSpeziベースのアプリケーションにLLMを統合できるようにするための多くのターゲットを提供します。
以下のセクションでは、Spezillmlocal、Spezillmopenai、およびSpezillmfogターゲットのセットアップと基本的な使用を強調して、Speziベースのアプリケーションに言語モデルを統合します。
注記
個々のターゲットの使用に関する詳細については、パッケージのDOCCドキュメントを参照してください。
このターゲットにより、開発者は中型言語モデル(LLM)をローカルで簡単に実行できます。このモジュールを使用すると、純粋に迅速にベースのAPIを介してローカルに実行されるLLMと対話できます。低レベルコードとの相互作用は必要ありません。
重要
Spezi LLM Localは、シミュレーターと互換性がありません。基礎となるmlx-swift
には、最新の金属MTLGPUFAMILYが必要であり、シミュレーターはそれを提供しません。
重要
重要:LLMローカルターゲットを使用するには、一部のLLMはプロジェクトにメモリ制限の資格を増やす必要があります。
典型的なSpeziAppDelegate
内でSpeziローカルLLM実行を構成できます。以下の例では、Speziエコシステム内でLLM機能の提供を担当するSpezillmターゲットのLLMRunner
、SpezillmlocalターゲットのLLMLocalPlatform
で構成されています。これにより、 LLMRunner
言語モデルをローカルに実行する準備をします。
class TestAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMLocalPlatform ( )
}
}
}
}
以下のコード例ではConfiguration
Spezillm LLMRunner
を介したローカルLLMとの相互作用を示してEnvironment
ます。
LLMLocalSchema
、実行されるLLMLocalSession
のタイプと構成を定義します。この変換は、 LLMLocalPlatform
を使用するLLMRunner
を介して行われます。 LLMLocalSession/generate()
を介した推論は、生成されたすべてのString
ピースを生成するAsyncThrowingStream
を返します。
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ベースの大手言語モデル(LLMS)と対話できるモジュール。 SpeziLLMOpenAI
、Spezillmターゲットのインフラストラクチャの上に構築され、Openai GPT APIと相互作用するための純粋なSwiftベースのAPIを提供します。さらに、 SpeziLLMOpenAI
、OpenAI関数呼び出しメカニズムを利用するために、開発者に宣言的なドメイン固有言語を提供します。これにより、OpenAI LLMSとSpeziエコシステムなどの外部ツールとの間の構造的で双方向かつ信頼できるコミュニケーションが可能になります。
Speziエコシステム内でOpenai LLMを使用するには、 LLMOpenAIPlatform
使用して、Spezillm LLMRunner
Spezi Configuration
で初期化する必要があります。その後のみ、 LLMRunner
OpenAI LLMSの推論に使用できます。詳細については、Spezillmのドキュメントを参照してください。
import Spezi
import SpeziLLM
import SpeziLLMOpenAI
class LLMOpenAIAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMOpenAIPlatform ( )
}
}
}
}
重要
MacOSでSpeziLLMOpenAI
を使用する場合は、 Project_name> signing&capabilities> + capabilityを介して、 Keychain Access Groups
プロジェクトを囲むXcodeプロジェクトのXcode Projectの資格を追加することを確認してください。キーチェーングループの配列は空のままにすることができ、ベースの資格のみが必要です。
以下のコード例ではConfiguration
Spezillm LLMRunner
を介しEnvironment
Openai LLMとの相互作用を示しています。
LLMOpenAISchema
、実行されるLLMOpenAISession
のタイプと構成を定義します。この変換は、 LLMOpenAIPlatform
を使用するLLMRunner
を介して行われます。 LLMOpenAISession/generate()
を介した推論は、生成されたすべてのString
ピースを生成するAsyncThrowingStream
を返します。
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
ターゲットを使用すると、ローカルネットワーク内のFOGノードコンピューティングリソースで実行されているLLMSを使用できます。 FOGノードはMDNを介してサービスを宣伝し、クライアントがローカルネットワーク内の特定のホストにサービスを提供するすべてのFOGノードを発見できるようにします。 SpeziLLMFog
、LLM推論ジョブをローカルネットワーク内のランダムフォグノードに動的にディスパッチし、それをユーザーに表現するための応答をストリーミングします。
重要
SpeziLLMFog
は、実際に推論要求を実行するコンピューティングリソースでホストされているローカルネットワーク内のSpeziLLMFogNode
が必要です。 SpeziLLMFog
、これらの霧ノードの簡単なセットアップを可能にするSpeziLLMFogNode
Dockerベースのパッケージを提供します。詳細については、SPMパッケージのルートレベルのFogNode
ディレクトリとそれぞれのREADME.md
参照してください。
Speziエコシステム内でFOG LLMSを使用するには、 LLMFogPlatform
を使用してSpezi Configuration
でSpezillm LLMRunner
初期化する必要があります。後にのみ、 LLMRunner
FOG LLMSの推論に使用できます。詳細については、Spezillmのドキュメントを参照してください。 LLMFogPlatform
、FOGノードWebサービス証明書に署名するために使用されたカスタムルートCA証明書で初期化する必要があります(詳細については、 FogNode/README.md
ドキュメントを参照)。 fogノードからルートCA証明書をリソースとしてリソースとしてコピーしてSpeziLLMFog
を使用してアプリケーションにコピーし、それを使用して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
を介したFog LLMとの相互作用Configuration
示してEnvironment
ます。
LLMFogSchema
、実行されているLLMFogSession
のタイプと構成を定義します。この変換は、 LLMFogPlatform
を使用するLLMRunner
を介して行われます。 LLMFogSession/generate()
を介した推論は、生成されたすべてのString
ピースを生成するAsyncThrowingStream
を返します。 LLMFogSession
、セットアップ時にローカルネットワーク内で利用可能なすべてのLLMフォグノードを自動的に発見し、LLM推論ジョブをFOGコンピューティングリソースに発見し、応答をバックバックしてユーザーに表面化します。
重要
LLMFogSchema
LLMFogParameters/init(modelType:systemPrompt:authToken:)
を介して、 Bearer
httpフィールドのfogノードにすべての要求で渡される承認トークンを返す閉鎖を受け入れます。トークンは、 LLMFogSession
長続きする可能性があり、したがってトークンが期限切れになる可能性があるため、すべてのLLM推論要求に応じて閉鎖を介して作成されます。閉鎖が、外部システムへの不必要なトークンリフレッシュラウンドトリップを防ぐために、トークンを適切にキャッシュすることを確認してください。
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ライセンスの下でライセンスされています。詳細については、ライセンスを参照してください。