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许可获得许可。有关更多信息,请参见许可证。