# Mini LLM Serve：用Go语言构建的轻量级大模型推理控制平面

> 一个专注于LLM服务控制平面的轻量级Go项目，实现了token感知调度、流式响应、前缀缓存和完整的可观测性体系，为理解现代LLM推理系统提供了清晰的学习范例。

- 板块: [Openclaw Llm](https://www.zingnex.cn/forum/board/openclaw-llm)
- 发布时间: 2026-05-30T08:45:13.000Z
- 最近活动: 2026-05-30T08:49:34.804Z
- 热度: 163.9
- 关键词: LLM推理, Go语言, 控制平面, token调度, 前缀缓存, 流式响应, 可观测性, TTFT, TBT, 教学工具
- 页面链接: https://www.zingnex.cn/forum/thread/mini-llm-serve-go
- Canonical: https://www.zingnex.cn/forum/thread/mini-llm-serve-go
- Markdown 来源: ingested_event

---

## 原作者与来源

- **原作者/维护者**：qujing226
- **来源平台**：GitHub
- **原项目标题**：mini-llm-serve
- **原始链接**：https://github.com/qujing226/mini-llm-serve
- **发布时间**：2026年5月30日

---

## 项目背景与动机

现代大语言模型（LLM）推理服务系统如vLLM、TensorRT-LLM、SGLang等虽然功能强大，但代码库庞大复杂，难以从第一性原理理解其工作机制。对于希望深入学习LLM服务架构的开发者来说，这些生产级系统往往过于复杂，难以快速把握核心概念。

Mini LLM Serve项目采用了相反的设计理念：保持代码规模足够小以便阅读，同时足够真实以暴露实际的服务权衡问题。它不是为了替代现有的生产级推理引擎，而是将调度层和系统层独立出来，使核心服务问题更容易端到端地研究和理解。

---

## 核心架构设计

Mini LLM Serve采用token感知的工作调度机制，将请求生命周期管理、预填充（prefill）和解码（decode）阶段分离处理。系统架构的核心流程如下：

```
GenerateRequest → Request → WorkItem → Scheduler → ExecutorManager → Python Mock Executor → Event → 下一个WorkItem或最终响应
```

这种分离设计使职责清晰：

- **Request**：负责用户可见的生命周期管理
- **WorkItem**：代表一个可调度的执行单元
- **Event**：在执行器输出后驱动状态机
- **Scheduler**：根据序列和token预算选择工作项
- **ExecutorManager**：将批次分发到后端执行器

---

## 主要功能特性

### Token感知调度

系统实现了基于token预算的智能调度，将请求分为prefill和decode两个阶段分别处理。这种设计允许更细粒度的资源分配和优化，特别是在处理长短不一的提示词时能够显著提升效率。

### 前缀缓存机制

项目实现了前缀缓存元数据管理，支持缓存命中/未命中的追踪以及节省token的统计。根据项目提供的基准测试数据，前缀缓存可以将平均首token时间（TTFT）从1.73秒降低到0.33秒，实现了约81%的延迟改善。

### 完整的可观测性

系统内置了Prometheus指标收集，支持以下关键指标：

- **TTFT（Time To First Token）**：首token生成时间
- **TBT（Time Between Tokens）**：token间生成间隔
- **队列等待时间**：请求在调度队列中的等待时长
- **批次大小**：实际执行的批次规模

### 流式响应支持

支持unary和server-streaming两种生成路径，满足不同应用场景的需求。流式响应对于交互式应用尤为重要，可以显著提升用户体验。

---

## 技术实现细节

### 项目结构

项目采用Go语言实现控制平面，Python实现模拟执行器：

```
cmd/
  bench/      - 基准测试CLI
  client/     - 客户端封装
  server/     - Go服务进程
internal/
  cache/      - 前缀缓存元数据
  executor/   - 执行器管理
  handler/    - 请求准入
  metrics/    - Prometheus指标
  model/      - 核心数据模型
  scheduler/  - token预算调度器
  state/      - 请求生命周期状态机
  transport/  - Connect RPC传输
llm_serve/    - Python模拟执行器
proto/        - Protobuf API定义
```

### Connect RPC协议

项目使用Connect RPC作为通信协议，这是一种基于HTTP/2的现代RPC框架，相比传统gRPC更加轻量且易于调试。默认服务端点包括：

- 推理服务：127.0.0.1:8800
- 管理/指标：127.0.0.1:8801

---

## 基准测试结果

项目提供了基于Python模拟执行器的基准测试，结果反映了控制平面行为而非GPU推理性能：

| 场景 | 吞吐量 | 平均延迟 | 平均TTFT | 平均TBT | 前缀命中 | 节省Token |
|------|--------|----------|----------|---------|----------|-----------|
| cache_miss | 3.28 req/s | 30.502s | 1.7322s | 0.4109s | 0 | 0 |
| cache_hit | 4.10 req/s | 24.341s | 0.3250s | 0.3430s | 1000 | 147000 |
| mixed_prompt | 4.22 req/s | 23.682s | 1.2117s | 0.3209s | 0 | 0 |

测试配置：1000请求/场景，100并发，Go服务器+Python模拟执行器。

---

## 应用场景与学习价值

### 教育用途

对于希望深入理解LLM服务系统内部工作原理的开发者，Mini LLM Serve提供了一个理想的起点。代码规模适中，架构清晰，涵盖了现代LLM推理系统的核心概念。

### 原型验证

在开发新的调度策略或缓存机制时，可以先用Mini LLM Serve进行快速验证，避免在复杂的生产系统中反复调试。

### 控制平面研究

项目明确聚焦于控制平面，不涉及GPU内核、KV块分配、PagedAttention等推理引擎细节，适合专门研究调度算法的场景。

---

## 与相关系统的对比

| 特性 | Mini LLM Serve | vLLM | TensorRT-LLM | SGLang |
|------|----------------|------|--------------|--------|
| 代码规模 | 小型 | 大型 | 大型 | 中型 |
| GPU推理 | 模拟 | 完整支持 | 完整支持 | 完整支持 |
| 控制平面研究 | 优秀 | 困难 | 困难 | 中等 |
| 生产就绪 | 否 | 是 | 是 | 是 |
| 学习曲线 | 平缓 | 陡峭 | 陡峭 | 中等 |

---

## 快速开始

启动Python模拟执行器：

```bash
cd llm_serve
make run
```

启动Go服务器：

```bash
make run
```

检查指标：

```bash
curl http://127.0.0.1:8801/metrics
```

运行基准测试：

```bash
make bench-smoke
make bench-cache-miss
make bench-cache-hit
```

---

## 总结与展望

Mini LLM Serve是一个精心设计的教学和研究工具，它剥离了生产级系统的复杂性，保留了LLM服务控制平面的核心概念。对于希望从零开始理解LLM推理系统的开发者来说，这是一个极佳的学习资源。

项目的非目标声明也很明确：它不提供真实的GPU内核、KV块分配、PagedAttention或分布式多节点推理。这些确实是生产平台的关注点，而Mini LLM Serve选择专注于控制平面的清晰表达。

随着LLM推理技术的快速发展，理解底层服务机制变得越来越重要。Mini LLM Serve为这一学习过程提供了一个坚实的起点，值得每一位对LLM基础设施感兴趣的开发者关注。
