↓ 跳过正文
  1. 文章/

用 llama.cpp server 搭一个本地 OpenAI-compatible API

Llama.cpp API OpenAI 本地推理 服务器

目录
本地大模型 - 这篇文章属于一个选集。
§ 5: 本文
一句话

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 API 的兼容性

大部分 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/tcp

Q:速度比 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
本地大模型 - 这篇文章属于一个选集。
§ 5: 本文

相关文章