Skip to content

AI 服务商与个人配置

系统级服务商配置页面菜单路径为 /ai/providers


支持的供应商类型

供应商类型由 ai_provider 枚举定义:

枚举值前端显示状态
openai_compatibleOpenAI Compatible原生支持(tools / vision / reasoning 全能力)
anthropicAnthropic原生支持(/v1/messages + x-api-key,支持 vision / thinking)
geminiGoogle Gemini原生支持(models/{model}:streamGenerateContent?alt=sse,支持 vision)
baidu百度千帆暂未适配(表单中禁用,请通过 OpenAI 兼容网关接入)

当前流式适配器位于 packages/server/src/lib/ai/adapters/openai_compatible/chat/completions 协议发送 stream: true 的 SSE 请求,并携带 stream_options: { include_usage: true } 获取 Token 用量(对不支持该字段的老网关自动降级重试)。

多模型与能力标签

每个配置支持「附加模型」列表(同一服务商多模型,聊天下拉展开为多个条目,发送时通过 model 字段指定),可通过 POST /api/ai/providers/fetch-models 从供应商 /models API 自动发现。

能力标签(capabilities)声明 vision / tools / contextWindow,作为聊天页图片入口与函数调用的开关依据。

配置字段

字段说明
name配置名称,最大 100 字符
provider供应商类型,默认 openai_compatible
baseUrlAPI 地址,最大 500 字符
apiKeyAPI Key,最大 1000 字符;接口返回时脱敏,AES-256-GCM 加密入库
model默认模型名称,最大 100 字符
models附加可选模型列表(最多 50 个)
capabilities能力标签(vision / tools / contextWindow)
systemPrompt系统提示词,最大 4096 字符
maxTokens最大 Token,范围 1–128000,默认 4096
temperature温度参数,数字字符串,默认 0.7
priceInputPerM / priceOutputPerM输入 / 输出单价(分 / 百万 token),可空;用于用量统计的成本估算
fallbackConfigId降级配置 ID:首字前失败自动切换(见下文可靠性)
maxConcurrent并发流上限(空 / 0 = 不限制)
isDefault是否默认服务商
isEnabled是否启用

当某个系统配置被设为默认时,服务端会取消其他配置的默认状态。聊天接口未指定配置时使用启用状态下的系统默认配置;没有可用默认配置时返回 503。

可靠性:主备切换与并发控制

  • 主备切换(failover):配置了 fallbackConfigId 的服务商,在首个内容 token 产出前失败(连接错误 / 5xx / 网关异常)时自动切换到降级配置重试一次,并向前端推送 failover SSE 事件。降级配置自身的 fallback 不再链式生效;不允许指向自身。
  • 并发信号量:配置了 maxConcurrent 的服务商,同时进行的生成流超过上限时新请求排队等待,最长 15 秒后返回「当前模型并发繁忙」错误。信号量为进程内实现(按配置 ID 隔离)。

连接测试

POST /api/ai/providers/test-connection(需要 ai:provider:edit 权限)使用给定配置向 {baseUrl}/chat/completions 发送非流式测试请求,请求内容为一条 Hi 消息,max_tokens 为 10,超时时间为 15 秒。编辑已有配置时,如果 API Key 为空或为脱敏值,后端会按配置 ID 读取真实密钥进行测试。

个人 AI 配置

个人配置接口挂载路径为 /api/ai/user-configs

聊天页启动时会读取系统配置 ai_allow_user_custom_key

  • false:页面只加载系统模型列表,不展示「我的 AI 配置」按钮;服务端同样拒绝 configSource = user 的聊天请求(403)。
  • true:页面展示「我的 AI 配置」入口,并把启用且填写模型的个人配置加入模型选择器。

个人配置字段包括 nameproviderbaseUrlapiKeymodeltemperaturemaxTokenssystemPromptisEnabled。聊天时选择个人配置会传入 configSource = user 与对应 configId,服务端只允许读取当前登录用户自己的配置,并要求配置启用且包含 API 地址、API Key 和模型名称;个人配置中的 temperaturemaxTokenssystemPrompt 会在聊天时生效(对话级角色模板优先于个人 systemPrompt)。

个人配置的接口响应会对 API Key 做脱敏展示;保存时若提交的是脱敏值,服务端保留原始密钥。

接口一览

方法路径说明权限
GET/api/ai/providers配置列表ai:provider:list
GET/api/ai/providers/{id}配置详情ai:provider:list
POST/api/ai/providers创建配置ai:provider:create
PUT/api/ai/providers/{id}更新配置ai:provider:edit
DELETE/api/ai/providers/{id}删除配置ai:provider:delete
POST/api/ai/providers/{id}/set-default设为默认ai:provider:edit
POST/api/ai/providers/test-connection连接测试ai:provider:edit
POST/api/ai/providers/fetch-models自动发现模型列表ai:provider:edit
GET/api/ai/models聊天模型轻量列表(不含密钥)登录用户
GET/POST/PUT/DELETE/api/ai/user-configs*个人配置 CRUD登录用户

Built with VitePress for local documentation preview.