1. 页面概览

LLM 网关页(路由 /admin/llm-gateway)是 AIP 管理后台面向管理员的大模型网关控制台,把平台 LLM 网关的运行态与配置态集中在一页:Provider 状态只读总览(可用性/模型/成本/熔断/健康)、LLM 路由规则与预算限额管理(成本管控,含新增/编辑/删除)、Provider 持久化配置(llm_providers 表列表/编辑/删除,与新增/更新表单,API Key 加密写入)、用量统计面板(summary 指标 + 最近调用记录)以及网关试调。所有请求走 aipClient(/aip-api/v1 → AIP 18080)。

一句话总结:本页是 LLM 网关的「状态台 + 配置台 + 试调台」,管理员在此查看 Provider 健康、调整路由与预算、维护密钥并实时验证调用。

2. 访问入口

3. 界面布局

+--------------------------------------------------------------+
| LLM 网关                                  [刷新]               |
| Provider 状态:名称|类型|可用|模型|成本(每1k)|熔断|健康           |
| LLM 路由规则(成本管控):预算开关/用户限额/应用限额 [+新增路由][刷新]|
|   表格:ID|任务类型|模型别名|候选Provider|降级链|限额(分)|启用|编辑|删除|
| Provider 持久化配置(llm_providers 表):[刷新配置列表]                          |
|   表格:ID|名称|类型|服务地址|默认模型|成本(每1k)|权重|状态|编辑|删除          |
| Provider 配置(新增/更新,API Key 加密写入):[新增 Provider][更新既有]|
|   ID*(更新态)/名称/服务地址/默认模型/每千token成本/权重/API Key/优先级/说明+启用开关|
|    [创建 Provider / 保存 Provider] [清空]                      |
| 用量概览:指标卡 + 最近调用记录表                                |
| 网关试调:任务类型+消息 [发送试调][清空结果] → 结果+usage          |
+--------------------------------------------------------------+

各板块职责:

4. 交互元素

控件位置含义与作用
刷新页面头部并行刷新 providers / routes / usage,加载中禁用
+ 新增路由路由卡片工具栏打开新建路由弹窗(task_type 必填、model_alias 留空默认同 task_type、预算、候选、降级链、说明、启用);提交 POST /llm/routes 并热同步
编辑路由表格操作列打开「编辑路由 #ID」弹窗:预算限额(分,0=不限)、启用开关、候选 Provider(provider_order)、降级链(fallback_order)、说明;保存 PUT /llm/routes/:id 并热同步
删除路由表格操作列window.confirm 二次确认后 DELETE /llm/routes/:id,删除成功刷新列表并热同步(该任务回落默认降级链)
刷新配置列表持久化配置卡片工具栏重拉 GET /llm/provider-configs(llm_providers 行)
编辑持久化配置表格操作列把该行字段带入下方「更新既有 Provider」表单(免手填主键 ID)
删除持久化配置表格操作列window.confirm 二次确认(提示不可撤销、被引用/内置会被拒)后 DELETE /llm/providers/:id;成功刷新配置列表 + 运行时 Provider 状态并提示「已删除并热同步」;409 时展示后端中文原因(列出引用它的任务)
新增/更新既有 ProviderProvider 卡片模式开关切换表单模式:「新增 Provider」(隐藏 ID 字段,提交 POST /llm/providers,name 必填且唯一)与「更新既有 Provider」(按主键 ID 提交 PUT /llm/providers/:id)
创建/保存 ProviderProvider 表单新增模式校验 name 后 POST;更新模式校验 Provider ID 后 PUT,成功后刷新状态表
清空Provider 表单重置表单为初始空值并保留当前模式
发送试调网关试调卡片POST /llm/chat,结果展示 Provider/模型/延迟/成本/降级 + 返回内容 + usage

次要控件:预算 chip、试调「清空结果」、alert「关闭」、is_active 开关;任务类型下拉为 chat/nlq/generate_sql/summarize/esg_report/deep_report。

增删改查已全量接线(含 Provider 删除):后端 admin 组已注册 POST /llm/routes、DELETE /llm/routes/:id、POST /llm/providers、DELETE /llm/providers/:id、GET /llm/provider-configs(platform/llm/handler.go 的 RegisterRoutes,分别接线仓储 UpsertRoute/DeleteRouteByID/CreateProvider/DeleteProviderByID/ListProviders),前端据此提供真实入口:路由可新增(按 task_type + model_alias 唯一键 Upsert)与删除(二次确认),Provider 可新增(name 唯一,重名 409)、可列表、可删除(二次确认)。Provider 删除的拒绝语义:① 被启用中路由引用 → 409 LLM_PROVIDER_IN_USE(报文列出引用它的 task_type,不产生半删除);② 内置 Provider(config/env 装配的 deepseek-v4-flash/qwen/local_rule)→ 409 LLM_PROVIDER_BUILTIN(删 DB 影子行不改变运行时池、重启即恢复,停用请改 is_active=false)。删除成功后网关 SyncFromDB 双向收敛(DB 行消失 → 运行时池同步摘除,无幽灵 Provider)。

5. 后端关联

5.1 端点表

方法路径用途
GET/llm/providersProvider 运行态(name/kind/available/model/cost_per_1k/circuit_state/health),登录组
GET/llm/usage?limit=100用量 summary + 最近 records,登录组
POST/llm/chat网关试调,登录组
GET/llm/routes路由列表 + 预算(enabled/user_limit_cents/app_limit_cents),admin 组
POST/llm/routes新增路由(按 task_type+model_alias 唯一键 Upsert;新建 201、命中既有行 200),admin 组
PUT/llm/routes/:id部分更新路由,保存后热同步,admin 组
DELETE/llm/routes/:id删除路由(不存在 404 LLM_ROUTE_NOT_FOUND),删除后热同步,admin 组
POST/llm/providers新增 Provider(name 必填且唯一,重名 409 LLM_PROVIDER_NAME_CONFLICT;api_key 加密存储),admin 组
PUT/llm/providers/:id更新 Provider 配置,api_key 加密存储,admin 组
DELETE/llm/providers/:id删除 Provider(404 LLM_PROVIDER_NOT_FOUND;被启用中路由引用 409 LLM_PROVIDER_IN_USE;内置 Provider 409 LLM_PROVIDER_BUILTIN),删除后热同步收敛,admin 组
GET/llm/provider-configsllm_providers 持久化配置列表(不含密钥密文),供逐行删除,admin 组

5.2 关键机制

6. 权限与安全

7. 常见问题与排错

8. 已知缺陷与边界

项说明
Provider 状态只读状态表为运行时只读,修改需走下方「Provider 配置更新」表单
路由增删不可用(已修复)后端 RegisterRoutes 已补 POST /llm/routes(接线 UpsertRoute)与 DELETE /llm/routes/:id(接线 DeleteRouteByID),前端路由卡片提供「+ 新增路由」与行内「删除」(二次确认)
Provider 删除不可用(已修复)后端已补 DELETE /llm/providers/:id(接线 DeleteProviderByID)与 GET /llm/provider-configs,网关 SyncFromDB 升级为双向收敛;前端新增「Provider 持久化配置」表提供行内删除(二次确认)。被启用中路由引用(409 LLM_PROVIDER_IN_USE)或内置 Provider(409 LLM_PROVIDER_BUILTIN)时拒绝删除,页面如实展示后端原因
内置 Provider 不可删除deepseek-v4-flash/qwen/local_rule 由 config/env 装配并登记为内置,DELETE 一律 409;如需停用请用「更新既有 Provider」把 is_active 置 false
路由新增为 Upsert 语义POST /llm/routes 以 task_type + model_alias 为唯一键:同名同别名重复提交即更新既有行(返回 200 created:false),而非报冲突,前端提示按「已创建/已更新」区分
密钥不回显编辑 Provider 时 API Key 留空表示不修改,无法查看已有密钥
用量口径依赖后端summary 指标按后端 recorder 口径聚合,历史窗口与保留策略由后端决定