Skip to content

AI 基础设施 ​

Nexus 把「调用大模型」抽象为统一的 Provider 适配器,屏蔽 OpenAI / Anthropic 等厂商的协议差异,并提供生成任务编排(对话、生图、生视频)与模型能力管理。

Provider 适配器抽象 ​

text
调用方(server/api/ai/*)
   │  getProvider(key)
   ↓
Provider 工厂(server/utils/ai/factory.ts)
   ├─ protocol === 'anthropic' → AnthropicProvider
   └─ protocol !== 'anthropic' → OpenAIProvider(兼容 OpenAI 协议者统一归此类)
   ↓
统一 Provider 接口(server/utils/ai/provider.ts):
   chat / chatStream / image / video
   + 可选 submitImageTask / queryImageTask / submitVideoTask(异步轮询)
  • 统一接口:Provider 接口声明 chat(文生文)、chatStream(流式)、image(生图)、video(生视频),以及可选的异步任务方法。调用方先查 capabilities 再调用,不支持的能力返回明确错误(assertCapability)。
  • 工厂 + 缓存:getProvider(key) 按「apiKey 尾号 + baseUrl + 是否启用」的配置签名缓存实例;配置变化自动重建;未启用或未配置 API Key 时明确报错。
  • 协议归一:Anthropic 走原生协议适配器,其余兼容 OpenAI 协议的厂商统一用 OpenAIProvider,新增厂商只需在 providers.ts 的 MODEL_PROVIDERS 注册元数据。

模型能力管理 ​

  • 模型解析:model-resolver.ts 负责把请求路由到正确的 Provider 与具体模型。
  • 后台管理:/admin/ai_llm(AI LLM 页)可视化配置 Provider、模型能力与启用状态;AiProviderEditDialog / AiProviderSelectorDialog 提供编辑与选择交互。

生成任务编排 ​

图像、视频等耗时生成走异步任务模式,避免请求长时间挂起:

text
提交生成请求
   ↓
Provider.submitImageTask / submitVideoTask
   ├─ 返回 taskId  → 进入轮询
   └─ 直接返回 URL → 视为已完成
   ↓(有 taskId)
ai-task-poller 定时轮询 queryImageTask / queryVideoTask
   ↓
结果写回 result-urls(server/utils/ai/result-urls.ts)

server/plugins/ai-task-poller.ts 在服务端运行,持续轮询未完成任务并回写结果。

相关接口 ​

路由说明
/api/ai/chat/*对话(含流式)
/api/ai/images/*文生图 / 图生图
/api/ai/videos/*文生视频
/api/ai/tasks/*生成任务状态查询

后台管理 ​

  • AI 模型与 Provider:/admin/ai_llm

扩展新供应商只需在 server/utils/ai/providers.ts 注册 MODEL_PROVIDERS 元数据,并实现/复用对应 Provider 适配器,无需改动调用方。