llama.cpp 自带的 HTTP 服务器支持 OpenAI-compatible API。起一个服务,SillyTavern、Open WebUI、甚至你自己写的 Python 脚本都能直接连上去,和调云端 API 一模一样。
为什么要搭 API #
本地模型用 llama-cli 在终端里对话,能用但不方便。真正实用的场景是:
- Open WebUI 提供 Web 聊天界面
- 自己的应用 通过 API 调用本地模型
- 多设备访问 手机、平板也能用
这些都需要一个 HTTP API。llama.cpp 自带的 llama-server 就是干这个的——它实现了 OpenAI-compatible API,意味着任何支持 OpenAI API 的客户端都能直接对接。
最简单的启动方式 #
llama-server \
-m ./models/gemma-4-26B-A4B-it-Q4_K_M.gguf \
-ngl 99 \
-c 32768 \
--host 0.0.0.0 --port 8080这就起来了。访问 http://localhost:8080 可以看到自带的 Web UI,直接对话。
--host 0.0.0.0 的作用
默认只监听 localhost(127.0.0.1),只有本机能访问。设成 0.0.0.0 后局域网内的其他设备也能连。手机上打开 http://你电脑的IP:8080 就能用。
完整的启动命令(生产配置) #
这是我日常用的配置,在 RTX 4060 8GB 上跑 Gemma 4 26B:
llama-server \
-m supergemma4-26b-uncensored-fast-v2-Q4_K_M.gguf \
--mtp-head gemma-4-26B-A4B-it-assistant.Q4_K_M.gguf \
--spec-type mtp \
--draft-block-size 3 \
-ngl 99 -ngld 99 -ncmoe 24 \
-t 16 -tb 16 \
-b 512 -ub 128 \
-c 32768 -n 4096 \
-fa on \
-np 1 \
-nocb \
--reasoning off \
--host 0.0.0.0 --port 8080逐个解释关键参数:
| 参数 | 作用 | 我的选择 |
|---|---|---|
-ngl 99 |
主模型尽量放 GPU | 能放多少放多少 |
-ncmoe 24 |
MoE expert 放 CPU 的数量 | 24 是我的甜点区 |
--mtp-head |
MTP 加速头 | Gemma 4 官方 assistant MTP |
--draft-block-size 3 |
MTP 每轮预测 token 数 | 3 最稳 |
-c 32768 |
上下文 32K | 够用,再大显存紧张 |
-n 4096 |
最大输出长度 | 长回复 |
-fa on |
Flash Attention | 省显存,必须开 |
-np 1 |
并行 slot 数 | 单人用 1 |
-nocb |
关闭 continuous batching | 单人不需要 |
--reasoning off |
关闭推理模式 |
-np 和 -nocb 的关系
-np 1 表示只服务一个并发请求。如果你需要同时让多个客户端连(比如同时开两个 SillyTavern tab),把 -np 设大一点,同时去掉 -nocb。但显存会相应增加。
API 接口 #
llama-server 实现了 OpenAI-compatible API,主要接口:
Chat Completions(最常用)
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gemma-4-26b",
"messages": [
{"role": "user", "content": "你好,介绍一下自己"}
],
"temperature": 0.7,
"max_tokens": 512
}'Completions(纯文本续写)
curl http://localhost:8080/completion \
-H "Content-Type: application/json" \
-d '{
"prompt": "从前有座山,山里有座庙,",
"n_predict": 256
}'Models(列出可用模型)
curl http://localhost:8080/v1/models大部分 OpenAI SDK 和客户端可以直接对接,只需要把 base_url 改成 http://localhost:8080/v1。Python 里:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8080/v1", api-key="not-needed")
response = client.chat.completions.create(
model="gemma-4-26b",
messages=[{"role": "user", "content": "你好"}]
)常见问题 #
Q:启动后访问不了?
检查防火墙:
sudo ufw allow 8080/tcpQ:速度比 llama-cli 慢?
正常现象。
Q:回复被截断?
-n 控制最大输出长度。设大一点,或者在请求里指定 max_tokens。
Q:怎么开机自启动?
# 创建 systemd service
sudo tee /etc/systemd/system/llama-server.service << 'EOF'
[Unit]
Description=llama.cpp Server
After=network.target
[Service]
Type=simple
User=你的用户名
WorkingDirectory=/path/to/llama.cpp
ExecStart=/path/to/llama-server -m /path/to/model.gguf -ngl 99 -c 32768 --host 0.0.0.0 --port 8080
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable llama-server
sudo systemctl start llama-server