一个简单、可读的库,可让您与 LLM 本地互动
LLM.swift
LLM.swift
是一个简单易读的库,它可以帮助您轻松地在 macOS、iOS、visionOS、watchOS 和 tvOS 上与 LLM 本地交互。
概述
LLM.swift
基本上是 llama.cpp
包上的一层轻量级抽象层,因此它始终保持最佳性能并始终保持最新状态。它只是一个单文件库,因此您可以根据需要复制、研究和修改代码。
值得特别注意以下几行,以便了解其内部结构:
public typealias Chat = (role: Role, content: String)
public enum Role {
case user
case bot
}
public var history: [Chat]
public var preProcess: (_ input: String, _ history: [Chat]) -> String
public var postProcess: (_ output: String) -> Void
public var update: @MainActor (_ output: String) -> Void
public func respond(to input: String) async {
let processedInput = preProcess(input, history)
let response = getResponse(from: processedInput)
var output = ""
await update(output)
for await responseDelta in response {
output += responseDelta
await update(output)
}
history += [(.user, input), (.bot, output)]
if historyLimit < history.count {
history = .init(history.dropFirst(2))
}
postProcess(output)
}
用法
您只需使用 SPM,或将代码复制到项目中,因为它只是一个文件。
dependencies: [
.package(url: "https://github.com/eastriverlee/LLM.swift/", branch: "main"),
],
示例
如果您在初始化 LLM
时提供 endString
参数,即使它不是 EOS 令牌,输出也会在遇到 endString
时停止生成。这对制作健壮的聊天机器人非常有用。