sparkle-server / README.md
iridescent
🐳 chore: 在 Dockerfile 中添加 git 依赖,更新 README 文档以包含核心概念与配置建议
4a07037
---
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*