OpenAI-compatible /chat/completionsmodel 字段无法使用 /models 返回的标准模型标识 #3

Open
opened 2026-05-16 01:44:12 +08:00 by chensipeng · 0 comments
Owner

问题描述

当前 AI 网关的 /api/v1/models/api/v1/chat/completions 在模型标识字段上存在不一致。
按 OpenAI-compatible 接口惯例,客户端会从 /models 获取模型列表,并使用模型对象的可调用模型标识作为 /chat/completions 请求体里的 model 字段。
但当前接口中,/models 返回的 modelName / providerModelName / id 都无法用于 /chat/completions,实际只有 modelAlias / displayName 可以调用成功。
这会导致标准 OpenAI-compatible 客户端或自动生成客户端难以判断应该使用哪个字段作为 chat completion 的 model 值。

复现环境

Base URL:

http://localhost:8088/api/v1

复现步骤

  1. 调用模型列表接口:
GET /api/v1/models
Authorization: Bearer <token>

返回的某个模型记录示例:

{
  "id": "78ebcd29-addb-4e24-914b-7b83537cf4ef",
  "provider": "volces-openai",
  "platformName": "火山引擎(OpenAI兼容)",
  "modelName": "doubao-seed-2-0-mini-260215",
  "providerModelName": "doubao-seed-2-0-mini-260215",
  "modelAlias": "Doubao Seed 2.0 Mini",
  "displayName": "Doubao Seed 2.0 Mini",
  "modelType": ["image_analysis", "text_generate", "tools_call"],
  "enabled": true
}
  1. 使用 modelName 调用聊天接口:
POST /api/v1/chat/completions
Authorization: Bearer <token>
Content-Type: application/json

请求体:

{
  "model": "doubao-seed-2-0-mini-260215",
  "messages": [
    { "role": "user", "content": "ping" }
  ]
}

实际结果:

{
  "code": "no_model_candidate",
  "message": "no enabled platform model matches request",
  "status": 404
}
  1. 使用 /models 返回的 id 调用:
{
  "model": "78ebcd29-addb-4e24-914b-7b83537cf4ef",
  "messages": [
    { "role": "user", "content": "ping" }
  ]
}

实际结果同样是 404。
4. 使用 modelAlias / displayName 调用:

{
  "model": "Doubao Seed 2.0 Mini",
  "messages": [
    { "role": "user", "content": "ping" }
  ]
}

实际结果:HTTP 200,返回正常 chat completion。

期望行为

建议至少满足其中一种:

  1. /chat/completionsmodel 字段支持 /models 返回的稳定可调用标识,例如 modelNameproviderModelNameid
  2. /models 返回 OpenAI-compatible 的标准结构,例如:
{
  "id": "Doubao Seed 2.0 Mini",
  "object": "model"
}

并明确该 id 就是 /chat/completionsmodel 可调用值。
3. 在 OpenAPI 文档中明确说明:/chat/completionsmodel 字段必须使用 /models 返回的 modelAlias,而不是 modelNameproviderModelNameid

影响

当前行为会导致接入方误用 modelName / providerModelName / id 作为 chat completion 的 model 值,从而收到:

{
  "code": "no_model_candidate",
  "message": "no enabled platform model matches request",
  "status": 404
}
## 问题描述 当前 AI 网关的 `/api/v1/models` 与 `/api/v1/chat/completions` 在模型标识字段上存在不一致。 按 OpenAI-compatible 接口惯例,客户端会从 `/models` 获取模型列表,并使用模型对象的可调用模型标识作为 `/chat/completions` 请求体里的 `model` 字段。 但当前接口中,`/models` 返回的 `modelName` / `providerModelName` / `id` 都无法用于 `/chat/completions`,实际只有 `modelAlias` / `displayName` 可以调用成功。 这会导致标准 OpenAI-compatible 客户端或自动生成客户端难以判断应该使用哪个字段作为 chat completion 的 `model` 值。 ## 复现环境 Base URL: ```text http://localhost:8088/api/v1 ``` ## 复现步骤 1. 调用模型列表接口: ```http GET /api/v1/models Authorization: Bearer <token> ``` 返回的某个模型记录示例: ```json { "id": "78ebcd29-addb-4e24-914b-7b83537cf4ef", "provider": "volces-openai", "platformName": "火山引擎(OpenAI兼容)", "modelName": "doubao-seed-2-0-mini-260215", "providerModelName": "doubao-seed-2-0-mini-260215", "modelAlias": "Doubao Seed 2.0 Mini", "displayName": "Doubao Seed 2.0 Mini", "modelType": ["image_analysis", "text_generate", "tools_call"], "enabled": true } ``` 2. 使用 `modelName` 调用聊天接口: ```http POST /api/v1/chat/completions Authorization: Bearer <token> Content-Type: application/json ``` 请求体: ```json { "model": "doubao-seed-2-0-mini-260215", "messages": [ { "role": "user", "content": "ping" } ] } ``` 实际结果: ```json { "code": "no_model_candidate", "message": "no enabled platform model matches request", "status": 404 } ``` 3. 使用 `/models` 返回的 `id` 调用: ```json { "model": "78ebcd29-addb-4e24-914b-7b83537cf4ef", "messages": [ { "role": "user", "content": "ping" } ] } ``` 实际结果同样是 404。 4. 使用 `modelAlias` / `displayName` 调用: ```json { "model": "Doubao Seed 2.0 Mini", "messages": [ { "role": "user", "content": "ping" } ] } ``` 实际结果:HTTP 200,返回正常 chat completion。 ## 期望行为 建议至少满足其中一种: 1. `/chat/completions` 的 `model` 字段支持 `/models` 返回的稳定可调用标识,例如 `modelName`、`providerModelName` 或 `id`。 2. `/models` 返回 OpenAI-compatible 的标准结构,例如: ```json { "id": "Doubao Seed 2.0 Mini", "object": "model" } ``` 并明确该 `id` 就是 `/chat/completions` 的 `model` 可调用值。 3. 在 OpenAPI 文档中明确说明:`/chat/completions` 的 `model` 字段必须使用 `/models` 返回的 `modelAlias`,而不是 `modelName`、`providerModelName` 或 `id`。 ## 影响 当前行为会导致接入方误用 `modelName` / `providerModelName` / `id` 作为 chat completion 的 `model` 值,从而收到: ```json { "code": "no_model_candidate", "message": "no enabled platform model matches request", "status": 404 } ```
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: BCAI/easyai-ai-gateway#3
No description provided.