狼小嗷

API 文档

狼小嗷把你的本地大模型反向代理为 OpenAI 兼容接口,任何支持 OpenAI 格式的客户端都可以直接接入。

基本信息

项目说明
基础地址同当前域名
鉴权方式Authorization: Bearer <API 密钥>
或 X-API-Key: <API 密钥>
密钥获取「管理后台」中生成
Content-Typeapplication/json
如果服务端关闭了鉴权(AUTH_ENABLED=false),则无需提供密钥。

接口列表

GET/v1/models

获取可用模型列表。

curl {BASE_URL}/v1/models \
  -H "Authorization: Bearer sk-xxxxxxxx"
{
  "object": "list",
  "data": [
    { "id": "qwen2.5:7b", "object": "model", "created": 1720000000, "owned_by": "local" }
  ]
}
POST/v1/chat/completions

对话补全(核心接口,支持流式与非流式)。

请求参数

字段类型必填说明
modelstring否模型名,缺省用默认模型
messagesarray是消息数组
streamboolean否是否流式,默认 false
temperaturenumber否采样温度 0~2
max_tokensinteger否最大生成 token 数
top_pnumber否核采样参数

非流式示例

curl {BASE_URL}/v1/chat/completions \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen2.5:7b",
    "messages": [
      { "role": "system", "content": "你是狼小嗷,一只乐于助人的小狼。" },
      { "role": "user", "content": "你好!" }
    ]
  }'
{
  "id": "chatcmpl-xxxxxxxx",
  "object": "chat.completion",
  "created": 1720000000,
  "model": "qwen2.5:7b",
  "choices": [
    {
      "index": 0,
      "message": { "role": "assistant", "content": "你好嗷!有什么可以帮你的吗?" },
      "finish_reason": "stop"
    }
  ],
  "usage": { "prompt_tokens": 12, "completion_tokens": 8, "total_tokens": 20 }
}

流式请求(SSE)

curl {BASE_URL}/v1/chat/completions \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen2.5:7b",
    "messages": [ { "role": "user", "content": "你好!" } ],
    "stream": true
  }'
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"你"},"finish_reason":null}]}

data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"好"},"finish_reason":null}]}

data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: [DONE]
POST/v1/completions

文本补全(旧版接口),输入为 prompt 字符串。

curl {BASE_URL}/v1/completions \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{ "model": "qwen2.5:7b", "prompt": "Once upon a time", "max_tokens": 50 }'
POST/v1/embeddings

文本向量化,输入为 input(字符串或数组)。

curl {BASE_URL}/v1/embeddings \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{ "model": "qwen2.5:7b", "input": "Hello world" }'
GET/healthz

健康检查(无需鉴权)。

错误处理

出错时返回 OpenAI 风格错误对象:

{
  "error": {
    "message": "API 密钥无效、已禁用或已过期。",
    "type": "authentication_error",
    "code": "invalid_api_key"
  }
}
状态码含义
401缺少或无效的 API 密钥
404接口不存在
502上游大模型服务错误
500服务器内部错误

客户端接入

任何 OpenAI SDK 都可以通过设置 base_url 与 api_key 接入,例如 Python:

from openai import OpenAI

client = OpenAI(
    base_url="{BASE_URL}/v1",
    api_key="sk-xxxxxxxx"
)

resp = client.chat.completions.create(
    model="qwen2.5:7b",
    messages=[{"role": "user", "content": "你好,狼小嗷!"}]
)
print(resp.choices[0].message.content)