File size: 5,818 Bytes
c55968e 383dad4 c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 11da80f c55968e 96ed9f1 11da80f 96ed9f1 c55968e 11da80f c55968e 11da80f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | ---
language:
- zh
- en
tags:
- rust
- llm
- streaming
- latency
- inference
- tokio
- framework
license: mit
pretty_name: perch-ultrafast — Hybrid Streaming + Ultrafast Inference
---
> ⭐ **这是栖木 Perch 的开源组件之一。**
> 核心应用(macOS 本地优先 AI 工作台 · 0.08s 首字)在这里 →
> [**🪵 栖木 Perch**](https://huggingface.co/datasets/hongcoding/perch)
# ⚡ perch-ultrafast
### LLM 首字延迟 1 秒 → 80 毫秒。不换模型,不掉质量。
> 你写了个漂亮的 AI 应用,用户点发送,然后……
> **盯着空屏幕等 1 秒**。
>
> 抱歉,你的模型没错。是你的架构错了。
**perch-ultrafast** 是一个 600 行的 Rust 框架,解决这一个问题:
> **两条流同时开**——本机小模型先出草稿(用户立刻有字读),
> 云端大模型第一个字一到,立刻接棒替换(质量升级)。
>
> 用户看到的首字 = **本机延迟(80ms)**
> 最终答案的质量 = **云端质量**
>
> **两头都占,一个子儿都不多花。**
从 [栖木 Perch](https://huggingface.co/hongcoding/perch) 生产环境提取 · MIT · `cargo test` 全绿
---
## 📊 这不是理论,是实测
真实运行 `cargo run --example hybrid_demo` 的输出:
```text
⏱ 开始(0ms)
[82ms] 首字可见 → 我是一个本机小模型,这是我的草稿答案。
[902ms] ⚡ 云端模型已接棒(清空草稿)
这是云端大模型的正式答案,质量更高、信息更全。
[1130ms] ✅ 完成
首字延迟: 82ms(纯云端需要 900ms)—— 快 11 倍
```
| 场景 | 首字延迟 | 用户感受 |
|---|---|---|
| 纯云端 | 0.88 ~ 1.39s | 😐 盯着空屏幕 |
| 纯本机 | 0.04 ~ 0.18s | 😀 快,但质量有限 |
| **本框架** | **< 0.2s 首字 + 云端质量** | 🤩 **立刻有字,随后升级** |
---
## 🚀 三行接入
```rust
use perch_ultrafast::{hybrid::{run_hybrid, HybridConfig}, types::*};
run_hybrid(
local_provider, // 你的本机小模型(预热过)
cloud_provider, // 你的云端大模型
fast_request, // 本机用:关思考 + 小 max_tokens
slow_request, // 云端用:原样
cancel_token,
HybridConfig::default(),
|chunk| match chunk {
StreamChunk::Delta { text } => print!("{text}"),
StreamChunk::Replaced { .. } => println!("\n[云端接棒]"),
_ => {}
},
).await;
```
**只需实现一个 trait** 就能接入任何后端:
```rust
pub trait Provider: Send + Sync {
fn chat_stream(&self, request: ChatRequest, cancel: CancellationToken)
-> BoxFuture<Result<ProviderStream, String>>;
}
```
Ollama / OpenAI 兼容 / 自建推理服务 —— 各几十行适配。
---
## 🧠 附带:Ultrafast 推理框架(三条加速法则)
混合流解决**首字**,Ultrafast 解决**整体**。
### 法则 1 · 关思考
推理模型的 thinking 链会拉高首 token 延迟。加速模式**下发时**强制 `think: Off`。
**只改本次请求,不动用户存档。**
### 法则 2 · 连接池复用
`reqwest::Client` 做成进程级单例。省掉每条请求的 TCP + TLS 握手。
再开 gzip/brotli —— 下行字节更少,正文更早到。
### 法则 3 · 回复预算
兜底 `max_tokens`(默认 2048),不让模型啰嗦。
**用户显式设定优先,绝不覆盖。**
### 法则 4 · 模型锁 🔒
**加速开关无权更换模型。**
速度不能靠"偷偷换成更快的模型"——那会改变答案质量,是欺骗。
用户选了 MiMo 就只用 MiMo。
---
## 🛡️ 四条设计红线(都有测试钉死)
| 红线 | 原因 |
|---|---|
| **加速不换模型** | 偷偷换模型 = 欺骗用户 |
| **只改下发值** | 不动持久化档位,关掉即恢复 |
| **云端失败保留草稿** | 不把用户答案变成错误页 |
| **本机失败静默降级** | 行为等同没用混合流,不打扰用户 |
## 🧩 生产环境的降级矩阵
| 情况 | 行为 |
|---|---|
| 本机预热完成 | 草稿 0.08s 出字,云端 ~0.9s 接棒 |
| 本机冷启动 | 超时 50ms → 纯云端(用户无感) |
| 本机不可用 | 门控跳过 → 纯云端 |
| 云端建流失败 | 本机草稿继续跑完(不丢答案) |
| 云端中途出错 | 保留草稿按完成收尾 |
| 用户取消 | 两条流同时取消 |
---
## 🏗️ 架构(就这么点)
```
src/
├── types.rs Provider trait / StreamChunk / ChatRequest
├── hybrid.rs 混合流 mux(本机草稿 → 云端接棒 + 双向降级)
├── ultrafast.rs 加速规则(关思考 / 预算 / 简洁提示 / 模型锁)
└── pool.rs 连接池单例
examples/
└── hybrid_demo.rs 可运行 demo(真实时序)
```
**600 行 Rust,零业务耦合**,直接嵌进你的项目。
## 🔬 验证
```bash
cargo test # 5 个单元测试 + 1 个文档测试
cargo run --example hybrid_demo # 看真实时序
```
---
## 🔗 相关项目
| 项目 | 说明 | 链接 |
|---|---|---|
| **栖木 Perch**(应用) | macOS 本地优先 AI 工作台:0.08s 首字、真智能体、隐私优先 | https://huggingface.co/datasets/hongcoding/perch |
| **perch-ultrafast**(开源框架) | 就是你正在看的这个 | https://huggingface.co/hongcoding/perch-ultrafast |
| **HF Collection** | 上面两个项目归在一起 | https://huggingface.co/collections/hongcoding/perch-ai-workbench-and-ultrafast-framework |
## 📖 来源
栖木 Perch v5.2.1 的 `commands.rs` + `providers/cloud.rs` 中混合流/加速逻辑的独立提取版,
去掉了 Tauri/数据库/UI 业务耦合,保留可复用的核心。
## 📜 许可
MIT —— 随便用,注明出处即可。
---
**⚡ 别让用户等云端。让本机先开口。**
|