arle(1)
纯 rust · 单个二进制 · apple silicon + nvidia · anthropic + openai api
rle

把你的 coding agent
指向本地模型

Claude Code、opencode、aider:每一轮都把整段对话重发一遍。ARLE 让 KV cache 跨轮常驻,每轮只 prefill 新增的部分 —— 第 20 轮和第 2 轮一样快

api anthropic /v1/messages · openai v1 metal beta · apple silicon cuda stable · ampere+ kv prefix cache survives turns spec mtp · dspark · bit-identical release v0.5.8 · 2026-08-21
arle — zsh ~/code
$ arle serve --backend metal --model-path mlx-community/Qwen3.6-35B-A3B-4bitserving on http://127.0.0.1:8000  · /v1/messages · /v1/chat/completions $ ANTHROPIC_BASE_URL=http://localhost:8000 ANTHROPIC_API_KEY=local claude# turn 1: cold prefill of the system promptprefix-lookup  prompt=4850 licensed_blocks=0# turn 2 … turn 12: only the new tokens prefillprefix-attach  matched=8640 restored=8640 committed=8651

为什么做这个

多数本地服务器是围着单条 prompt 设计的。agent 会话是一个循环:同一段系统提示加上越来越长的工具历史,重复二十遍。ARLE 围着这个循环设计。

reason · 01多轮不变慢。

coding agent 每一轮都把整段对话重发一遍。ARLE 把上一轮的 KV 留在加速器上,前缀页经 radix cache 跨请求共享,每轮只 prefill 新增的 token。MacBook 上 12 轮 agent 形状的对话:每轮 180 ms,同一份权重上 mlx-lm 是 249 ms —— 实测,不是推算。

reason · 02两种 agent 方言都会说。

Anthropic /v1/messages:流式事件、tool_use、extended thinking 块;OpenAI /v1/chat/completions:流式与工具调用。Claude Code 只需要一个环境变量;任何 model 字串都会路由到当前服务的模型。

reason · 03一个二进制,没有 Python。

从 HTTP 层到调度器到 KV cache 全部是 Rust。Metal 走 MLX C++ bridge,NVIDIA 走 FlashMLA、DeepGEMM、DeepEP 加 CUDA graph。brew install、一行 curl 或一个 Docker 镜像 —— 从 clone 到第一个 token 只要几分钟

reason · 04数字都有日期。

这一页的每个数字都能在 docs/experience/wins/ 找到带日期的快照:命令、环境、以及它击败的那条臂。推测解码逐比特对齐 greedy;恢复的前缀用 needle 阶梯对照冷 prefill 做门控。

架构

一套运行时、三个表面、两个后端。serving、本地 agent、OPD 训练跑同一份 Rust 与模型代码;依赖严格向下流动,infer-core 不依赖任何后端。权威拓扑见 docs/codebase-map.md

bin
arle the only binary the workspace builds · src/main.rs
control plane
cliagentchattools REPL · session loop · protocol · sandboxed tools
front door
infer-api InferenceEngine · LoadedInferenceEngine · backends plug in here
server · core
infer-serverinfer-core Anthropic + OpenAI facade (axum) · Engine<E,K> · scheduler · radix prefix cache
seam · ir
infer-seaminfer-plan BackendExecutor + KvPool seam · ForwardPlan IR — host-only
backends
infer-cudainfer-metal feature-gated · metal’s host KV pool doubles as the cpu smoke path
kernels
cuda-kernelsmlx-syskv-native-sys CUDA C / TileLang · MLX C++ bridge · KV persistence
纯叶子 · infer-topo · infer-moe · infer-utilspecs · qwen3 · qwen35 · deepseekffi · deepep-sys · xgrammar-systrain · autograd + train —— 仅 OPD;teacher 就是 serving 引擎

安装与接入

每个平台一行能跑的命令,然后给 agent 一个环境变量。预编译 tarball 与 SHA 见每次 GitHub Release;curl 安装脚本会先校验 SHA256 再解压。

Apple Silicon · Homebrew zsh / bash
$ brew install cklxx/tap/arle
$ arle serve --backend metal --model-path mlx-community/Qwen3.6-35B-A3B-4bit
Linux x86_64 / macOS · curl sh 兼容
$ curl -fsSL https://github.com/acupof-ai/arle/releases/latest/download/install.sh \
    | sh
$ arle --doctor
CUDA · GPU 容器 docker / nvidia
$ docker run --rm --gpus all -p 8000:8000 \
    -v $PWD/models:/models:ro ghcr.io/acupof-ai/arle:latest \
    serve --backend cuda --model-path /models/Qwen3.6-27B
接入 · Claude Code / OpenAI 客户端 任意 shell
$ ANTHROPIC_BASE_URL=http://localhost:8000 ANTHROPIC_API_KEY=local claude
$ export OPENAI_BASE_URL=http://localhost:8000/v1 OPENAI_API_KEY=local
# opencode、aider、openai SDK —— 任何说 OpenAI API 的工具

基准

直接来自 docs/experience/wins/benchmarks/ 的带日期快照。解码与 prefill 分开报告,没有端到端混合数。

2026-09-02 beta · 默认开启

metal · M4 Pro 48 GB · Qwen3.5-0.8B-MLX-4bit · 12 轮 agent 对话,4.8K token 系统提示,每轮追加约 350 token · 两台服务器权重与请求字节完全一致

TTFT · 第 2 到 12 轮中位数
180ms
mlx-lm 0.31.2 · 同条件
249ms
TTFT · 第 12 轮
202ms · 8.6K token
恢复 vs 冷启
18/18needle 精确 · DET
scripts/bench_multiturn_ttft.py --turns 12 --warmup 完整快照 ↗
2026-06-14 beta · 快照

metal · M4 Pro 48 GB · Qwen3.6-35B-A3B-4bit(MoE,约 3B 激活)· 512-in / 128-out · 单流 · 6 次中位数

解码
85.3tok/s
每 token
11.7ms
TTFT · 512 token
1.23s
Qwen3.5-0.8B 解码
318tok/s
arle serve --backend metal --model-path mlx-community/Qwen3.6-35B-A3B-4bit 完整快照 ↗
2026-08-14 stable · 锚点

cuda · 1×H20 · Qwen3.6-27B-FP8 + 块草稿推测解码(DSpark)· 32K token 多轮 agent 提示 · 单请求解码

解码 · c=1
91.8tok/s
解码 · c=8
20.5tok/s
35B-A3B MoE · c=1
149.3tok/s
对比 SGLang 0.5.13 · 解码
−2.8% 每 token
arle serve --backend cuda --spec-type dspark · bench-agent-32k 完整快照 ↗
2026-08-20 beta · 默认开启

cuda · 1×H20 · Qwen3.8-27B-NVFP4Qwen3.6-27B-FP8 · 同一二进制两条臂背靠背 · 权重不存两份

解码 · c=1
+21.3% 对 FP8
端到端 · c=4
+15.3% 对 FP8
常驻
22.4GB · FP8 29.4
GSM8K 形状
188/200FP8 189/200
arle serve --backend cuda --model-path unsloth/Qwen3.8-27B-NVFP4 完整快照 ↗
2026-08-23 beta · 默认开启

cuda · 4×H20 TP=4 · DeepSeek-V4-Flash · c=1 解码主体按 slot 捕获成一张 CUDA graph · 32K agent 提示

解码 · NVFP4 专家
44.2tok/s · 原 40.8
解码 · FP8 专家
59.5tok/s · 原 52.4
ITL p50
22.2ms · 原 24.1
MMLU · 200 题
0逐题差异
arle serve --backend cuda --tensor-parallel-size 4 完整快照 ↗
2026-06-20 beta · 多种子

train · On-Policy Distillation · teacher 就是 serving 引擎,student 在自己的 rollout 上训练 · Qwen3.5-4BQwen3.5-27B

MATH-500 · 4B
+27pp · 0.518 → 0.792
Terminal-Bench · 27B
+5.1pp pass@1
BFCL-live 弃答
1.00自 0.60
热路径上的 python
0个进程
arle train opd 完整快照 ↗

支持矩阵

两种后端,一份运行时契约。权威矩阵见 docs/support-matrix.md

后端稳定度系统 / 硬件模型量化API
cudastableLinux + NVIDIA Ampere+ · 1 到 8 卡(TP / EP)Qwen3.5 / 3.6 / 3.8 · DeepSeek-V4-Flash · GLM-5.2BF16 · FP8 · NVFP4 · W4AFP8 · INT8/FP8 分页 KVAnthropic + OpenAI
metalbetaApple Silicon(M1+)Qwen3.5 / 3.6 MoE(canonical)· Qwen3 dense · DeepSeek-OCRMLX 4-bit · BF16Anthropic + OpenAI
cpudev only便携冒烟Qwen3.5(小尺寸)BF16Anthropic + OpenAI

贡献会落在哪

没有排队,没有委员会 —— 一个周末的 PR 就能改动头条数字,战线全部公开。从 CONTRIBUTING.md 开始。

Star 是小项目唯一的指标。如果 ARLE 让你的 agent 循环比原来快了,留一颗。它决定这件事能得到多少时间。

★ Star acupof-ai/arle

文件

仓库一览。每条都指回 acupof-ai/arle 的标准路径。