Skip to content

Feature: 模型能力描述

一句话目标

前端根据模型能力描述决定哪些上游数据可以注入下游生成请求,并在连线时给出兼容性提示。模型能力由后端模型列表接口提供,前端查询、缓存并消费。

行为约束

约束 1:模型能力数据结构

前置条件: 后端模型列表接口返回模型信息 行为: 每个模型包含 acceptedInputs 字段,描述该模型接受的输入类型及数量限制 后置条件: 前端可通过模型 key 查询其支持的输入类型

数据结构:

typescript
interface ModelInputCapability {
  type: 'text' | 'image' | 'video'
  maxCount?: number // text 类型无需此字段
}

acceptedInputs 为空数组或字段缺失 = 仅接受 prompt(纯文本输入,无额外媒体支持)。

约束 2:模型能力查询

前置条件: 前端需要知道某个模型支持哪些输入 行为: 通过 modelsStore 按模型 key 查询 acceptedInputs后置条件: 返回该模型的输入能力列表;模型不存在或未加载时返回空(视为仅支持 prompt)

约束 3:能力数据缓存(仅内存)

前置条件: 模型列表已从后端获取 行为: acceptedInputs 随模型列表一起缓存在 modelsStore 的运行时状态中,不写入 localStorage,刷新页面后重新请求 后置条件: 同一会话内后续查询不触发额外网络请求;新会话需重新加载

约束 4:数据流注入时的能力过滤

前置条件: 下游节点触发生成,已收集上游输出 行为: 查询下游节点当前模型的 acceptedInputs,仅注入模型支持的输入类型;超出 maxCount 的按连线顺序截断 后置条件: 生成请求只包含模型支持的输入参数

约束 5:连线兼容性数据供给

前置条件: 用户创建连线或切换下游模型 行为: 提供上游输出类型与下游模型 acceptedInputs 的匹配结果 后置条件: edge-system 可据此渲染兼容/不兼容状态

连线的视觉渲染和交互行为属于 edge-system AC-11/AC-12,本模块只提供数据。

约束 6:后端未返回能力字段时的降级

前置条件: 后端模型列表未包含 acceptedInputs 字段(过渡期) 行为: 视为该模型仅支持 text 输入(保守降级) 后置条件: 不阻塞生成流程,连线不显示兼容性提示

Acceptance Criteria

  • [ ] AC-01:模型列表接口返回的每个模型包含 acceptedInputs 字段
  • [ ] AC-02acceptedInputs 包含 type(text/image/video)和可选 maxCount
  • [ ] AC-03:通过模型 key 查询其支持的输入类型列表
  • [ ] AC-04:模型能力缓存在 modelsStore 运行时状态中,不持久化到 localStorage
  • [ ] AC-05:刷新页面后模型能力数据重新从后端加载
  • [ ] AC-06:数据流注入时,仅注入下游模型 acceptedInputs 中包含的输入类型
  • [ ] AC-07:上游同类型输入数量超过 maxCount 时,按连线顺序截断
  • [ ] AC-08:为连线兼容性判断提供上游输出类型与下游模型能力的匹配结果
  • [ ] AC-09:后端未返回 acceptedInputs 时,降级为仅支持 text 输入

BDD Scenarios

gherkin
Feature: 模型能力描述

  # AC-01, AC-02, AC-03
  Scenario: 查询多模态模型的输入能力
    Given 模型列表已加载
    And 模型 "gemini-flash" 的 acceptedInputs 为 [text, image(maxCount:5)]
    When 查询 "gemini-flash" 的输入能力
    Then 返回支持 text 和 image,image 最多 5 张

  # AC-06
  Scenario: 注入时按模型能力过滤不支持的输入类型
    Given 图片节点 A 已生成图片
    And A 连线到文本节点 B
    And B 的模型仅支持 text 输入(不支持 image)
    When 用户在 B 中点击生成
    Then B 的生成请求不包含 images 参数

  # AC-07
  Scenario: 超出 maxCount 时按连线顺序截断
    Given 图片节点 A、C、D、E 各生成了一张图片
    And 四个节点按 A→C→D→E 顺序连线到图片节点 B
    And B 的模型 image maxCount 为 3
    When 用户在 B 中点击生成
    Then B 的 images 参数包含 A、C、D 的图片(前 3 张)

  # AC-08
  Scenario: 连线兼容性数据供给
    Given 视频节点 A 已生成视频
    And A 连线到图片节点 B
    And B 的模型不支持 video 输入
    When 系统评估该连线兼容性
    Then 返回不兼容状态

  # AC-09
  Scenario: 后端未返回能力字段时降级
    Given 模型 "legacy-model" 的 acceptedInputs 字段缺失
    And 图片节点 A 连线到使用 "legacy-model" 的文本节点 B
    When 用户在 B 中点击生成
    Then 仅注入上游文本到 prompt,图片不注入

  # AC-04, AC-05
  Scenario: 刷新页面后重新加载模型能力
    Given 模型列表已加载并缓存
    When 用户刷新页面
    Then 模型能力数据被清空
    And 重新从后端请求模型列表

TDD 单元测试要点

模型能力查询(modelsStore 扩展):

  • [ ] 模型存在且有 acceptedInputs 时,返回完整能力列表
  • [ ] 模型存在但 acceptedInputs 缺失时,降级返回 [{ type: 'text' }]
  • [ ] 模型不存在时,返回空(仅支持 prompt)

能力过滤函数(新增纯函数):

  • [ ] 模型支持 image 时保留 imageUrls,不支持时过滤掉
  • [ ] 模型支持 video 时保留 videoUrls,不支持时过滤掉
  • [ ] 超出 maxCount 时截断,保留前 N 个
  • [ ] 无 maxCount 时不截断
  • [ ] 文本类不受 maxCount 限制

兼容性匹配函数(新增纯函数):

  • [ ] 上游输出类型在 acceptedInputs 中 → 兼容
  • [ ] 上游输出类型不在 acceptedInputs 中 → 不兼容
  • [ ] acceptedInputs 缺失时 → 仅 text 兼容

Out of Scope

  • 模型能力的管理后台(增删改模型能力字段)— 属于后端
  • 模型能力变更的实时推送(WebSocket)— 当前按页面会话缓存即可
  • 连线的视觉渲染(警告态样式、动画)— 属于 edge-system AC-11/AC-12
  • 输入数量超限时的用户提示 UI — 属于节点 UI 层
  • 模型能力的版本管理或 A/B 测试