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适配器,无需改动调用方。

