用 Rust 运行 Laya:官方 SDK、sys1 与 ollaya
用官方 laya-onnx SDK 在 Rust 程序里直接运行 Laya(基于 ONNX Runtime),或用社区项目 sys1、ollaya 提供兼容 Jev 的接口服务。
cargo add laya-onnx --git https://github.com/NandhaKishorM/laya官方 SDK 需要先用仓库自带的 Python 脚本导出一次 ONNX 模型。sys1 和 ollaya 是社区项目,部署前请到各自仓库确认许可证和支持的模型。
let engine = laya::LayaEngine::from_directory("path/to/laya-multilingual")?;
let result = engine.predict(state, &questions)?;
// 想要 HTTP 服务:cargo install sys1 --features cpu用 Rust 运行 Laya 有两种方式,部署的机器上都不需要 Python:
- 嵌进你自己的程序:用 Laya 官方仓库里的 Rust SDK。一次决策就是一次函数调用,不用起服务,也没有网络往返。
- 作为 HTTP 服务:用 sys1 或 ollaya 两个社区项目。它们都提供兼容 Jev 的
POST /v1/systemone接口,任何 Jev 或 Laya 客户端都能直接调用。
官方 Rust SDK:laya-onnx
从 Laya 0.4.11 起,上游仓库带有 laya-rust:Python 包的 Rust 版,通过 ort crate 在 ONNX Runtime 上运行英文、多语言和 typed-decisions 三个 checkpoint。分词、校准和答案都和 Python 版一致,并用 Python 代码录下的输出做对照测试。默认跑 CPU,cuda 和 directml 是 cargo feature。
包名是 laya-onnx,代码里按 laya 导入。截至 2026 年 11 月 4 日它还没发布到 crates.io,需要从仓库添加:
cargo add laya-onnx --git https://github.com/NandhaKishorM/laya
SDK 读取的是 ONNX 文件,而 ONNX 版本还没上传到 Hugging Face,要用仓库自带的脚本导出一次。只有这一步需要 Python,部署运行不需要:
git clone https://github.com/NandhaKishorM/laya && cd laya
pip install "torch>=2.9" onnx onnxscript onnxruntime transformers safetensors huggingface_hub numpy
pip install -e .
python laya-rust/tools/export_onnx.py --model all
把 LayaEngine::from_directory(或环境变量 LAYA_ONNX_ROOT)指向导出的某个 checkpoint 目录,就可以提类型化问题:
use laya::{LayaEngine, Question, QuestionSet};
use serde_json::json;
let engine = LayaEngine::from_directory("path/to/laya-multilingual")?;
let questions = QuestionSet::new().with("department", Question::choice(
"Which department should handle this request?",
[
("billing", "invoices, payments, refunds"),
("technical", "bugs, outages, system errors"),
("other", "everything else"),
],
)?)?;
let result = engine.predict(json!({"body": "We were billed twice for March."}), &questions)?;
println!("{}", result["department"].as_choice().unwrap().choice); // billing
SDK 支持 predict、predict_batch、处理超出模型窗口长文本的 predict_long、min_confidence 弃答门槛、按语言设置温度、路由、语言检测、邮件清洗和 embedding 预筛选。直方图分箱校准和单次调用的 hooks 还没移植。调用是同步的:创建一个 LayaEngine,用 Arc 共享;异步代码里用 spawn_blocking 包一层。
sys1:基于 candle 的 Rust 服务
sys1 是用 tokio、axum 和 serde 写的 System One 接口服务,在 candle 上运行 Laya 的 ModernBERT 编码器和决策头。安装时选择后端:
cargo install sys1 --features cpu
cargo install sys1 --no-default-features --features metal # Apple Silicon
cargo install sys1 --no-default-features --features cuda # NVIDIA GPU
用 Laya 的 checkpoint 启动:
sys1 --model-id convaiinnovations/laya --dtype auto
它监听 3000 端口,提供 POST /v1/systemone 和 POST /v1/decide 两个接口。请求按 token 数量动态合并批处理,项目报告在 NVIDIA RTX Pro 6000 上每次查询约 14 毫秒。README 目前列出的是英文 Laya checkpoint,更多模型在计划中。
ollaya:像 Ollama 一样用决策模型
ollaya 的用法和 Ollama 类似:一个后台服务加一个命令行,按名字拉取和运行决策模型。它在 CPU 上用 ONNX Runtime,在 NVIDIA 显卡上用 CUDA,也原生支持 Apple Silicon。
curl -fsSL https://ollaya.dev/install.sh | sh
ollaya serve
ollaya run laya --preset triage "My payment failed twice"
laya 会在 laya:en(ModernBERT-large,4.21 亿参数)和 laya:multilingual(mmBERT-base,3.22 亿参数)之间自动选择。ollaya 还能运行 Decider、NLI 分类器等其他决策模型。它监听 11435 端口,设置 TYPESAFE_BASE_URL=http://localhost:11435 后,官方 TypeSafe SDK 不用改代码就能用。ollaya 只分发很小的 ONNX 计算图,权重从 Hugging Face 原仓库读取并用 sha256 校验,不会重新托管权重。
选哪个
| laya-onnx(官方 SDK) | sys1 | ollaya | |
|---|---|---|---|
| 是什么 | 嵌进程序的库 | HTTP 服务 | 后台服务加命令行 |
| 安装方式 | cargo add --git | cargo install | 安装脚本、Docker 或 Windows 安装程序 |
| 后端 | ONNX Runtime:CPU、CUDA、DirectML | CPU、CUDA、Metal | CPU(ONNX Runtime)、CUDA、Apple Silicon |
| 调用方式 | Rust 函数 | POST /v1/systemone,端口 3000 | POST /v1/systemone,端口 11435 |
| 支持的 Laya checkpoint | 英文、多语言、typed-decisions | 英文 | 英文和多语言,自动路由 |
| 模型文件 | 自己导出一次 ONNX | Hugging Face 上的原始权重 | 很小的 ONNX 计算图加原始权重,sha256 校验 |
| 更适合 | 在 Rust 代码里直接调用,没有网络往返 | 自己编译的 Rust 服务 | 开箱即用的本地后台服务,带模型管理 |
决策跑在 Rust 服务内部,就用官方 SDK;多个程序、或者其他语言的程序要共用一个 Laya 服务,就用 sys1 或 ollaya。sys1 和 ollaya 是社区项目,不属于 Laya 官方包,部署前请到各自仓库确认许可证和当前支持的模型。
相关阅读
- Laya 与 Ollama:用 ollaya 获得 Ollama 式体验,并对比其他本地方案
- 用官方 Python 服务自托管 Laya
- Jev 替代品
- Laya 运行时总览
最后核验:laya-rust 对照上游仓库,2026 年 11 月 4 日;sys1 和 ollaya,2026 年 9 月 25 日。