llm_client
Rust 原生 llama.cpp 集成库,全自动工具链 + 类型安全 API + 内置 Web UI,一行代码完成本地大模型推理
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Rust 原生 llama.cpp 集成库,全自动工具链 + 类型安全 API + 内置 Web UI,一行代码完成本地大模型推理
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

假设你是一名 Rust 开发者,想在应用中集成本地大模型推理。摆在面前的选项有哪些?
直接用 Python 的 llama-cpp-python 绑定?那意味着引入 Python 运行时,你的 Rust 应用突然多了一个沉重的依赖。想用纯 Rust 实现?那你得自己写 CGO 绑定、管理 llama.cpp 的 C++ 编译、还要处理跨平台编译问题——光是想想就头皮发麻。
lmcpp 解决的就是这个中间地带的问题:让你用纯 Rust 代码调用 llama.cpp(背后的 llama-server),同时又不把你绑死在 llama.cpp 上。它本质上是一个"被 Rust 驯服过的 llama-server 包装器",提供类型安全的 API、全自动的工具链管理、以及开箱即用的 Web UI。
Shelby Jenkins 是 Rust 社区的活跃贡献者,最早在 llm_client 仓库中尝试做一个"同时支持本地和云端模型"的统一 LLM 接口。项目迭代过程中,他意识到这个目标过于宽泛——大多数用户真正需要的,不过是一个可靠的本地推理入口。因此他在 2024 年进行了彻底的重构,砍掉了云端模型兼容层,将整个项目聚焦到 "Rust 最好用的 llama.cpp 集成库" 这一点上。
这是非常典型的开源项目演进路径:从"大而全"收缩到"小而精",往往意味着更清晰的产品定位和更稳定的使用体验。重构后的产物就是现在的 lmcpp(llama.cpp management + client 的缩写)。
这是 lmcpp 最省心的功能之一。LmcppToolChain 模块会自动下载、编译、缓存指定版本的 llama.cpp 工具链,支持预编译二进制(Linux/macOS/Windows)和从源码编译两种方式。CUDA 用户、Metal 加速的 macOS 用户、纯 CPU 跑的老人机器,各取所需即可。
多版本共存是另一个贴心设计:每个 release tag 和后端(CPU/CUDA/Metal)都被独立缓存,你可以同时安装 v1.0 的 CUDA 版和 v1.1 的 Metal 版,按需切换。
llm_client 通过 Unix Domain Socket(UDS)连接 llama-server,相比 HTTP 减少了一层网络开销。在 Linux/macOS/Windows 三平台上均有支持。作者在 README 中坦诚地写道:"Is it faster than HTTP? Yes. Is it measurably faster? Maybe."——这种既诚实又略带幽默的表述方式,倒是很 Rust 社区的风格。
如果说 llama-server 提供的是"裸 HTTP API",那么 lmcpp 提供的就是"编译期安全的 Rust API"。每个端点(completion、infill、embeddings、tokenize、detokenize)都有对应的请求和响应类型:
let res = server.completion(
CompletionRequest::builder()
.prompt("Tell me a joke about Rust.")
.n_predict(64),
)?;
类型系统替你保证了参数的正确性,IDE 自动补全让你不需要反复翻阅 llama-server 的文档。ServerArgs 结构体实现了 所有 llama-server 命令行参数,在 Rust 类型层面一一对应,这是 lmcpp 文档质量最见功夫的地方。
不想写 Rust 代码?直接用 CLI:
# 默认模型 + Web UI
cargo run --bin lmcpp-server-cli -- --webui
# 指定 HuggingFace GGUF 模型
cargo run --bin lmcpp-server-cli -- -u https://huggingface.co/.../model.gguf
# 指定本地模型
cargo run --bin lmcpp-server-cli -- -l /path/to/local/model.gguf
加上 --webui 参数后,llama-server 自带的 Web 界面就会自动启动,你可以在浏览器里直接对话、调参、查看模型状态。这对于快速验证模型效果非常方便。
lmcpp 采用 Rust 2024 Edition 构建,由四个 Workspace Crate 组成:
| Crate | 职责 |
|---|---|
llm_models | 模型元信息管理(GGUF 格式解析、模型参数) |
llm_models_macros | 过程宏,简化模型配置 |
llm_prompt | Prompt 模板与解析 |
lmcpp | 核心:Server 启动、UDS 通信、API 调用 |
依赖栈非常干净:基于 tokio 异步运行时、serde 序列化、thiserror 错误处理、tracing 结构化日志,没有任何多余的抽象层。workspace 依赖管理也相当规范,所有公共依赖都在根 Cargo.toml 的 [workspace.dependencies] 中统一版本。
cargo run 搞定一切cargo doc,没有独立的文档站点在本地大模型推理这条赛道上,llama.cpp 已经是事实标准。但 llama.cpp 本身是纯 C/C++ 项目,对 Rust 开发者(或任何想要类型安全接口的开发者)来说,直接使用总有些"隔着一层"的感觉。lmcpp 填补的正是这个空白。
从 Swift Package Registry 官方将 ShelbyJenkins/llm_client(lmcpp 的发布名)列为 Rust 类别下"自动从 crates.io 构建"的标准选项来看,这个库已经被纳入 Rust 生态的正规流通渠道。在 Rust 社区中,它目前是 crates.io 上最接近"标准 llama.cpp Rust 绑定"的存在。
# 安装 Rust(如果你还没有)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 克隆并运行示例
git clone https://github.com/ShelbyJenkins/llm_client.git
cd llm_client
cargo run --release --bin lmcpp-server-cli -- --webui
打开浏览器访问 http://localhost:8080,即可看到 llama-server 的 Web 界面,选择一个 GGUF 模型即可开始对话。
