File size: 5,260 Bytes
81c1559
 
 
 
 
 
 
 
 
 
7dce215
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ef1b34b
7dce215
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4a07037
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7dce215
 
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
---
title: Sparkle-Server - GGUF 大模型 API
emoji: 
colorFrom: indigo
colorTo: purple
sdk: docker
app_port: 8080
pinned: false
---

# Sparkle-Server: 高性能 GGUF 大模型 API 服务

这是一个基于 `FastAPI``llama-cpp-python` 的高性能大语言模型(LLM)推理服务。它经过精心优化,旨在以最简单的方式部署基于 GGUF 格式的本地大模型,并提供兼容 OpenAI 的 API 接口。

## ✨ 特性

- **高性能推理**: 底层使用 `llama.cpp`,在 CPU 上也能实现非常快速的文本生成。
- **兼容 OpenAI**: 提供 `/v1/chat/completions` 接口,可以无缝对接到各种现有的 OpenAI 生态工具中。
- **流式响应**: 支持流式(Server-Sent Events)输出,显著提升客户端的交互体验。
- **灵活配置**: 所有关键参数(如模型ID、文件名、上下文长度等)均可通过环境变量或 `.env` 文件进行配置。
- **轻量级部署**: 采用 Docker 多阶段构建,最终镜像体积小,安全且易于部署。
- **动态模型加载**: 在服务启动时从 Hugging Face Hub 自动下载指定的 GGUF 模型。

## 🚀 快速开始

### 1. 准备工作

- 安装 [Docker](https://www.docker.com/products/docker-desktop/)。
- 克隆本项目。

### 2. 配置模型 (可选)

您可以创建一个 `.env` 文件来配置您想要运行的模型。如果文件不存在,将使用默认的 Qwen3-8B 模型。

创建一个名为 `.env` 的文件,内容如下:

```env
# Hugging Face 上的模型仓库 ID
MODEL_ID="Qwen/Qwen3-14B-GGUF"

# 要下载的 GGUF 模型文件名 (确保它在上面的仓库中存在)
FILENAME="Qwen3-14B-Q5_K_M.gguf"

# 模型的上下文窗口大小
N_CTX=4096

# 要卸载到 GPU 的层数 (0 表示完全使用CPU, -1 表示尽可能多地使用GPU)
N_GPU_LAYERS=0
```

### 3. 构建并运行 Docker 容器

在项目根目录下,执行以下命令:

```bash
docker build -t sparkle-server .
docker run -it -p 8080:8080 --rm --name sparkle-server sparkle-server
```

服务启动后,模型文件会自动从 Hugging Face Hub 下载并加载。您将在终端看到模型加载的日志。

## 🤖 API 使用示例

服务启动后,您可以访问 `http://localhost:8080/docs` 查看交互式 API 文档。

以下是使用 `curl` 的调用示例:

### 示例 1: 标准 JSON 响应

发送一个请求,并等待模型生成完整的回复。

```bash
curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {
        "role": "system",
        "content": "你是一个乐于助人的AI助手。"
      },
      {
        "role": "user",
        "content": "你好!请给我讲一个关于宇宙的笑话。"
      }
    ],
    "max_tokens": 128,
    "temperature": 0.7,
    "stream": false
  }'
```

### 示例 2: 流式响应

发送一个请求,服务器会以数据流的方式实时返回生成的词语。

```bash
curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Accept: text/event-stream" \
  -d '{
    "messages": [
      {
        "role": "user",
        "content": "请写一首关于秋天的五言绝句。"
      }
    ],
    "max_tokens": 100,
    "stream": true
  }'
```

您将看到以 `data:` 开头的 Server-Sent Events (SSE) 数据流。

---

## 🧠 核心概念与配置建议

### 模型大小 vs. 上下文窗口

理解这两个核心概念对于成功运行大模型至关重要:

1.  **模型大小 (Model Size)**
    *   **比喻**: 这是您的"厨师"的"大脑容量"和"技能水平"。它由模型的参数数量(如 7B, 14B)和量化等级(如 Q4_K_M, Q8_0)决定。
    *   **影响**: 决定了模型的"智力"和它在硬盘上以及加载到内存后所占用的**固定内存大小**。例如,`Qwen3-8B-Q8_0` 模型自身会稳定占用约 8.7 GB 内存。

2.  **上下文窗口大小 (Context Window / `N_CTX`)**
    *   **比喻**: 这是厨师的"操作台"大小。操作台越大,厨师能同时处理的食材(文本)就越多。
    *   **影响**: 决定了模型在一次对话中能"记住"的文本长度。它会占用**动态内存**,窗口越大,消耗的内存越多。

**总内存占用 ≈ 模型大小 (固定) + 上下文窗口内存 (动态) + 其他开销**

### 如何根据您的内存进行配置?

您可以通过在 `.env` 文件中设置 `N_CTX` 变量来调整上下文窗口大小。以下是针对不同内存大小的推荐配置:

| 可用内存 | 推荐模型 | `N_CTX` 推荐值 | 说明 |
| :--- | :--- | :--- | :--- |
| **8 GB** | 7B-Q4_K_M (~4.5 GB) | `2048` | 足够进行日常问答和短文处理。 |
| **16 GB**| 8B-Q8_0 (~8.7 GB) | `8192` | **推荐配置**。能处理较长的文档分析和多轮对话。 |
| **32 GB**| 14B-Q6_K (~10.5 GB)| `16384` | 适合需要更强模型能力和更长上下文的专业场景。|
| **64 GB+**| 70B-Q4_K_M (~38 GB)| `32768+`| 面向需要处理海量文本或进行复杂推理的企业级应用。|

**重要提示**:
- 请确保为操作系统和其他程序留出至少 1-2 GB 的内存。
- GGUF 模型主要在 CPU 上运行,因此内存大小 (RAM) 是最关键的限制因素。

---
*Powered by Sparkle-Server*