Skip to content

智能路由在多协议场景下,无法根据协议区分同标识符的模型,导致路由目标不明确 #9

@killbus

Description

@killbus

一、问题描述 (Summary)

在一个支持多协议(如 OpenAI, Anthropic)的 Provider下,如果存在两个“模型标识符”相同但“协议”不同的模型,当前的智能路由机制仅根据“模型标识符”或“模型名称”进行模糊匹配。这导致路由无法区分协议,可能会将一个使用 OpenAI 协议的客户端请求错误地路由到 Anthropic 协议的模型上,从而引发协议不兼容的错误。

二、复现步骤 (Steps to Reproduce)

  1. 创建 Provider:

    • 名称: org-a
    • 支持的协议: OpenAI, Anthropic
  2. 添加两个模型:

    • 模型 A:
      • 模型名称: openai/claude-sonnet-4-5
      • 模型标识符: claude-sonnet-4-5-20250929
      • 协议: OpenAI
    • 模型 B:
      • 模型名称: anthropic/claude-sonnet-4-5
      • 模型标识符: claude-sonnet-4-5-20250929
      • 协议: Anthropic
    • 注意:这两个模型拥有完全相同的 模型标识符
  3. 配置智能路由:

    • 路由名称: claude-sonnet-4-5
    • 路由目标: 选择所有包含 claude-sonnet-4-5-20250929 标识符的模型。
  4. 发起请求:

    • 使用一个标准的 OpenAI 客户端(例如,遵循 OpenAI API 格式的请求),向智能路由 claude-sonnet-4-5 发起调用。

三、当前行为 (Current Behavior)

  1. 执行逻辑: 当智能路由接收到请求后,它会使用 Array.prototype.find() 方法在 providerModels 列表中查找匹配的模型。

  2. 匹配条件: 匹配的条件是模型的 model_identifier 或 name 与路由目标中指定的模型字符串相等。

  3. 选取结果: 会选择列表中第一个满足条件的对象。

       resolvedModel = providerModels.find(m =>
         m.is_virtual !== 1 && (
           m.model_identifier === selectedTarget.override_params!.model ||
           m.name === selectedTarget.override_params!.model
         )
       );
    

我们需要在该查找过程补充模型的 protocol 属性校验吗?或者 复现步骤 中是否存在不合理, 不符合项目设计预期的内容?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions