--- 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*