跳转至

统一 API 接口

文档版本: 1.0.0
最后更新: 2025-08-19
Git 提交: c1aa5b0f
作者: Lincoln

JAiRouter 提供兼容 OpenAI 格式的统一 API 接口,支持多种 AI 模型服务。所有接口都使用 /v1 前缀,确保与 OpenAI API 的兼容性。

聊天完成接口

POST /v1/chat/completions

处理聊天完成请求,支持流式和非流式响应。

请求参数

{
  "model": "gpt-3.5-turbo",
  "messages": [
    {
      "role": "system",
      "content": "你是一个有用的助手。"
    },
    {
      "role": "user", 
      "content": "你好!"
    }
  ],
  "stream": false,
  "max_tokens": 1000,
  "temperature": 0.7,
  "top_p": 1.0,
  "top_k": 50,
  "frequency_penalty": 0.0,
  "presence_penalty": 0.0,
  "stop": null,
  "user": "user-123"
}

参数说明

参数类型必需说明
modelstring要使用的模型名称
messagesarray对话消息列表
streamboolean是否启用流式响应,默认 false
max_tokensinteger生成的最大令牌数
temperaturenumber采样温度,0-2 之间,默认 1
top_pnumber核采样参数,0-1 之间,默认 1
top_kintegerTop-K 采样参数
frequency_penaltynumber频率惩罚,-2 到 2 之间,默认 0
presence_penaltynumber存在惩罚,-2 到 2 之间,默认 0
stopstring/array停止序列
userstring用户标识符

消息格式

{
  "role": "user|assistant|system",
  "content": "消息内容",
  "name": "可选的消息发送者名称"
}

响应格式

非流式响应:

{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1677652288,
  "model": "gpt-3.5-turbo",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "你好!我是一个AI助手,很高兴为你服务。"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 20,
    "completion_tokens": 15,
    "total_tokens": 35
  },
  "system_fingerprint": "fp_44709d6fcb"
}

流式响应:

data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"gpt-3.5-turbo","choices":[{"index":0,"delta":{"role":"assistant","content":"你好"},"finish_reason":null}]}

data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"gpt-3.5-turbo","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}

data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"gpt-3.5-turbo","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: [DONE]

文本嵌入接口

POST /v1/embeddings

将文本转换为向量表示,用于语义搜索、相似度计算等任务。

请求参数

{
  "model": "text-embedding-ada-002",
  "input": "要嵌入的文本内容",
  "encoding_format": "float",
  "dimensions": 1536,
  "user": "user-123"
}

参数说明

参数类型必需说明
modelstring嵌入模型名称
inputstring/array要嵌入的文本,可以是字符串或字符串数组
encoding_formatstring编码格式,支持 "float" 或 "base64"
dimensionsinteger输出向量的维度
userstring用户标识符

响应格式

{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "embedding": [0.0023064255, -0.009327292, ...],
      "index": 0
    }
  ],
  "model": "text-embedding-ada-002",
  "usage": {
    "prompt_tokens": 8,
    "total_tokens": 8
  }
}

重排序接口

POST /v1/rerank

对文档列表进行重新排序,根据查询的相关性进行排名。

请求参数

{
  "model": "rerank-multilingual-v2.0",
  "query": "什么是人工智能?",
  "documents": [
    "人工智能是计算机科学的一个分支",
    "机器学习是人工智能的子领域",
    "深度学习使用神经网络"
  ],
  "top_n": 3,
  "return_documents": true
}

参数说明

参数类型必需说明
modelstring重排序模型名称
querystring查询文本
documentsarray要排序的文档列表
top_ninteger返回的文档数量
return_documentsboolean是否返回文档内容

响应格式

{
  "id": "rerank-123",
  "results": [
    {
      "index": 0,
      "score": 0.95,
      "document": "人工智能是计算机科学的一个分支"
    },
    {
      "index": 1,
      "score": 0.87,
      "document": "机器学习是人工智能的子领域"
    }
  ],
  "model": "rerank-multilingual-v2.0",
  "usage": {
    "total_tokens": 25
  }
}

文本转语音接口

POST /v1/audio/speech

将文本转换为语音音频文件。

请求参数

{
  "model": "tts-1",
  "input": "你好,这是一段测试语音。",
  "voice": "alloy",
  "response_format": "mp3",
  "speed": 1.0
}

参数说明

参数类型必需说明
modelstringTTS 模型名称
inputstring要转换的文本
voicestring语音类型
response_formatstring音频格式,默认 mp3
speednumber语音速度,0.25-4.0,默认 1.0

响应格式

返回音频文件的二进制数据,Content-Type 根据 response_format 设置。

语音转文本接口

POST /v1/audio/transcriptions

将音频文件转换为文本。

请求参数

使用 multipart/form-data 格式:

file: (音频文件)
model: whisper-1
language: zh
response_format: json
temperature: 0

参数说明

参数类型必需说明
filefile音频文件
modelstringSTT 模型名称
languagestring音频语言代码
response_formatstring响应格式,默认 json
temperaturenumber采样温度

响应格式

{
  "text": "转录的文本内容"
}

图像生成接口

POST /v1/images/generations

根据文本描述生成图像。

请求参数

{
  "model": "dall-e-3",
  "prompt": "一只可爱的小猫在花园里玩耍",
  "n": 1,
  "size": "1024x1024",
  "quality": "standard",
  "response_format": "url",
  "style": "vivid",
  "user": "user-123"
}

参数说明

参数类型必需说明
modelstring图像生成模型名称
promptstring图像描述文本
ninteger生成图像数量,默认 1
sizestring图像尺寸,默认 1024x1024
qualitystring图像质量,standard 或 hd
response_formatstring响应格式,url 或 b64_json
stylestring图像风格,vivid 或 natural
userstring用户标识符

响应格式

{
  "created": 1677652288,
  "data": [
    {
      "url": "https://example.com/image.png",
      "revised_prompt": "修订后的提示词"
    }
  ]
}

图像编辑接口

POST /v1/images/edits

编辑现有图像。

请求参数

使用 multipart/form-data 格式:

image: (原始图像文件)
mask: (可选的遮罩文件)
prompt: 编辑描述
model: dall-e-2
n: 1
size: 1024x1024
response_format: url
user: user-123

响应格式

{
  "created": 1677652288,
  "data": [
    {
      "url": "https://example.com/edited-image.png"
    }
  ]
}

错误处理

错误响应格式

{
  "error": {
    "message": "Invalid request: missing required parameter 'model'",
    "type": "invalid_request_error",
    "param": "model",
    "code": "missing_parameter"
  }
}

常见错误类型

错误类型说明
invalid_request_error请求参数错误
authentication_error认证失败
permission_error权限不足
not_found_error资源不存在
rate_limit_error请求频率超限
api_errorAPI 内部错误
overloaded_error服务过载

使用示例

cURL 示例

# 聊天完成
curl -X POST "http://localhost:8080/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-api-key" \
  -d '{
    "model": "gpt-3.5-turbo",
    "messages": [
      {"role": "user", "content": "你好!"}
    ]
  }'

# 文本嵌入
curl -X POST "http://localhost:8080/v1/embeddings" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-api-key" \
  -d '{
    "model": "text-embedding-ada-002",
    "input": "要嵌入的文本"
  }'

Python 示例

import requests

# 配置
base_url = "http://localhost:8080"
api_key = "your-api-key"
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {api_key}"
}

# 聊天完成
response = requests.post(
    f"{base_url}/v1/chat/completions",
    headers=headers,
    json={
        "model": "gpt-3.5-turbo",
        "messages": [
            {"role": "user", "content": "你好!"}
        ]
    }
)
print(response.json())

# 文本嵌入
response = requests.post(
    f"{base_url}/v1/embeddings",
    headers=headers,
    json={
        "model": "text-embedding-ada-002",
        "input": "要嵌入的文本"
    }
)
print(response.json())

JavaScript 示例

const baseUrl = 'http://localhost:8080';
const apiKey = 'your-api-key';

// 聊天完成
async function chatCompletion() {
  const response = await fetch(`${baseUrl}/v1/chat/completions`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${apiKey}`
    },
    body: JSON.stringify({
      model: 'gpt-3.5-turbo',
      messages: [
        { role: 'user', content: '你好!' }
      ]
    })
  });

  const data = await response.json();
  console.log(data);
}

// 文本嵌入
async function embedding() {
  const response = await fetch(`${baseUrl}/v1/embeddings`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${apiKey}`
    },
    body: JSON.stringify({
      model: 'text-embedding-ada-002',
      input: '要嵌入的文本'
    })
  });

  const data = await response.json();
  console.log(data);
}