2.5 平台资源池 — AI 模型 / MCP 工具 / 技能分类
这一章统一管理三个平台级资源池:
- AI 模型 — 智能体可以调用的 LLM 列表(GPT-4 / Claude / DeepSeek / 本地模型 / ...)
- MCP 工具 — 智能体可以调用的外部能力(查数据库 / 调 API / 控制浏览器 / ...)
- 技能分类 — 技能包的分组体系
普通用户在创建智能体时选用这些资源,但配置和维护由管理员完成。
2.5.1 AI 模型管理 [A]
路径:/ai-models权限:无特殊限制(默认所有组织内 admin 可见可改;部分部署收紧到 super_admin)
列表表格
| 列 | 说明 |
|---|---|
| 名称 | 用户起的别名 + 「默认」徽章(如有) |
| 类型 | 徽章:⚡ Auto / OpenAI / Claude / Azure OpenAI / DeepSeek / Qwen / Local / HuggingFace TEI / Custom |
| 模型名称 | 真实模型 ID,如 gpt-4-turbo、claude-3-5-sonnet-20241022 |
| 状态 | 启用 / 禁用 |
| 创建时间 |
行操作
| 按钮 | 行为 |
|---|---|
| 🧪 测试 | 弹 AIModelTestDialog,发一个测试请求验证连通性 |
| 💰 定价 | 弹 AIModelPricingDialog,配置 input/output token 单价 |
| 🛡️ 熔断器 | 盾牌图标 → 弹 CircuitBreakerStatusDialog,查看 closed/open/half_open 状态、近 60 秒滑动窗口(总数/失败/错误率),可「立即重置」 |
| ✏️ 编辑 | 弹 AIModelDialog 修改配置 |
| 🗑️ 删除 | 二次确认 → 若被引用返回 409 → 强制删除选项 |
创建/编辑模型对话框
| 字段 | 必填 | 编辑时是否回显 | 说明 |
|---|---|---|---|
| 名称 | ✓ | ✓ | 用户起的别名,在智能体里下拉看到的就是这个 |
| 提供商 | ✓ | ✓ | ⚡ Auto / OpenAI / Claude / Azure / DeepSeek / Qwen / Local / HuggingFace TEI / Custom |
| 模型名称 | ✓ | ✓ | 真实 model ID(auto 仅占位) |
| 模型类型 | ✓ | ✓ | 复选:LLM / EMBEDDING / VISION / RERANK(默认 LLM) |
| API Key | 创建时✓ | ❌ 留空 | 编辑时留空表示不变,填新值则覆盖(Local / Custom / Auto 不需要) |
| API Base URL | ✓ | 自定义端点(Azure 必填;Local/TEI 有默认值,TEI 默认 http://reranker:80) | |
| API Version | ✓ | Azure 必填 | |
| 输出维度(embedding_dimensions) | ✓ | 仅勾了 EMBEDDING 时显示;如 1024 / 1536 / 2048 / 3072 | |
| 温度 | ✓ | 默认温度 0~2(0.7) | |
| 最大令牌数 | ✓ | 默认 4096,范围 1~1,000,000 | |
| 上下文窗口 | ✓ | 模型总 token 容量,默认 100000 | |
| 超时(秒) | ✓ | 默认 300 | |
| Top P | ✓ | 0~1 | |
| 频率惩罚 / 出现惩罚 | ✓ | -2~2 | |
| 自定义参数(extra_body) | ✓ | 高级配置折叠区,JSON;Claude 不支持 | |
| 配额限制(Quota) | ✓ | 多条配额规则(范围/窗口/指标/上限/模式);TEI 模型不显示 | |
| 启用 | ✓ | 是否激活 | |
| 设为默认 | ✓ | 同一提供商内一个默认 |
⚡ Auto 路由:提供商选
auto时,对话框隐藏上面的常规字段,只显示「智能调度规则(AutoRouting)」编辑器 —— 有序路由规则(condition→target_model_id)+ 必须含 catch-all + fallback_chain。详见 模型策略文档。
敏感字段处理
- 创建时:API Key 必填,提交后后端加密存储,前端不回显
- 编辑时:API Key 输入框留空表示不变;填新值则覆盖
- 创建后会弹出 toast 提示:「API Key 已加密保存,如需查看请重新生成」
删除冲突
🚫 如果有智能体 / 编排器引用该模型,直接删返回 HTTP 409。弹冲突对话框列出引用方,提供「强制删除」选项 — 引用方下次执行会找不到模型并报错。
定价对话框 AIModelPricingDialog
| 字段 | 说明 |
|---|---|
| Input 单价 | USD / 1M tokens(如 OpenAI 官方计价规则) |
| Output 单价 | USD / 1M tokens |
| 币种 | USD / CNY(默认 USD) |
| 生效日期 | 默认今天,可指定未来某天起新价生效 |
定价用于 用量统计 的成本计算。没有定价 = 成本显示 0。
测试对话框 AIModelTestDialog
发送一条测试 prompt(默认 "Hello"),看返回:
- ✅ 成功:显示响应时间、原文
- ❌ 失败:显示错误码 + 详细信息
2.5.2 MCP 工具管理 [A]
路径:/mcp-tools权限:同 AI 模型(默认 admin)
MCP(Model Context Protocol)= AI 的"动手能力"。比如查询数据库、调用外部 API、操作浏览器、读取文件,都是通过 MCP 工具实现。
页面 Tab 结构
整页分两个 Tab:
- 已安装工具 — 当前组织已配置的工具列表
- 工具市场 — 从公共 MCP Registry 浏览/安装新工具
Tab 1:已安装工具
表格列
| 列 | 说明 |
|---|---|
| 名称 | 内部标识 |
| 显示名称 | UI 名称 |
| 类型 | 徽章:manual / service / registry |
| 状态 | 启用 / 禁用 |
| 创建时间 |
行操作
| 按钮 | 行为 |
|---|---|
| 🧪 测试 | 联通性测试,返回工具能力清单 |
| ✏️ 编辑 | 打开 MCPToolDialog |
| 🗑️ 删除 | 二次确认 + 引用冲突检查 |
顶部按钮
- 「刷新」
- 「批量测试」— 一键测试所有 Service 类型工具,toast 汇总成功/失败数
- 「添加工具」— 弹 MCPToolDialog
MCPToolDialog(创建/编辑工具)
字段较多,按区块说明。
基本信息
| 字段 | 必填 | 说明 |
|---|---|---|
| 名称 | ✓ | 内部标识 |
| 显示名称 | ✓ | UI 名称 |
| 描述 | 给 AI 看 — 重要,决定 AI 何时调用 | |
| 分类 | 自定义分组 |
工具类型
| 类型 | 含义 | 必填字段 |
|---|---|---|
manual | 手动声明能力,无自动发现 | 无额外 |
service | 远程 MCP Server,HTTP / stdio / SSE 协议 | 服务地址、协议类型 |
registry | 从 MCP Registry(/Users/cjzhao/goworkspace/registry)安装 | 已通过市场 Tab 安装 |
Service 类型字段
| 字段 | 默认 | 说明 |
|---|---|---|
| 服务地址 | - | https://api.example.com/mcp 或 stdio://path/to/binary |
| 协议类型 | streamable-http | streamable-http / stdio / sse |
| 超时(秒) | 30 | |
| 最大重试次数 | 3 | |
| 并发限制 | 10 | |
| 健康检查间隔(秒) | 300 |
认证配置
| 字段 | 说明 |
|---|---|
| 认证类型 | none(无认证) / api_key(API 密钥) / bearer(Bearer 令牌) / basic(基础认证) |
| 认证配置 | 按类型变化:用户名/密码、token、key 名/值等 |
🔐 OAuth 2.0 / 个人身份 MCP(如 Notion、GitHub 等与个人身份绑定的服务)不在此处配置 —— 平台不托管用户的 OAuth token。这类 MCP 需在员工本地 sandrpod 里完成 OAuth 授权,由员工自己的沙箱持有凭证。
用户上下文透传(passUserContext)
| 字段 | 说明 |
|---|---|
| 用户上下文透传 | 逐工具开关,默认关。开启后,调用该 MCP Server 时透传 X-Sira-* 头(如 X-Sira-User-Id / X-Sira-Channel-User-Id),供 Server 端做 ACL / 审计。仅在信任该 Server 时开启 |
服务器配置
| 字段 | 说明 |
|---|---|
| 自定义请求头 | key-value 对,可加多个 |
| 启用日志 | checkbox |
| 日志级别 | DEBUG / INFO / WARN / ERROR |
HITL 配置(Human In The Loop)
某些工具(如"发送邮件""执行 SQL")需要人工审批:
| 字段 | 说明 |
|---|---|
| 需要审批 | checkbox |
| HITL 模式 | all(所有调用都审批) / whitelist(列表内审批) / blacklist(列表外审批) |
| 工具列表 | 当模式非 all 时,具体哪些子工具名 |
权限与可见性
| 字段 | 说明 |
|---|---|
| 启用 | 是否激活 |
| 公开 | 是否对全组织可见 |
| 已验证 | 系统标记;一般由市场安装的工具自动为 ✓ |
| 访问级别 | public / private / limited |
元数据
| 字段 | 说明 |
|---|---|
| 版本 | 自填 |
| 作者 | |
| 主页 | URL |
| 标签 | 逗号分隔 |
| 能力列表 | JSON 编辑,描述工具支持的子操作 |
| Schema 定义 | JSON Schema,描述参数 |
测试 MCP 工具
测试对话框流程:
| 工具类型 | 行为 |
|---|---|
| Service | POST /api/mcp-services/preview-test,透传配置 |
| Registry | POST /api/mcp-tools/{id}/test |
返回:
- success: 布尔
- message: 文字说明
- response_time: 毫秒
- mcp_tools: 该 Server 提供的子工具清单
- mcp_capabilities: 协议能力(streaming, resources, prompts 等)
删除冲突(同 AI 模型)
如果有智能体引用,弹冲突对话框,可选强制删除。
Tab 2:工具市场
搜索面板
- 搜索框 + 搜索按钮(实时)
- 版本筛选(可选)
市场卡片
每个卡片显示:
- 服务器名 + 描述
- 作者、最新版本、安装计数
- 仓库链接按钮(点击复制 GitHub / GitLab URL 到剪贴板)
- 详情按钮 →
ServerDetailsDialog,展示完整信息 - 安装按钮 →
InstallServerDialog
安装对话框
| 字段 | 说明 |
|---|---|
| 目标组织 | 多租户场景下选目标组织;单组织默认本组织 |
| 初始参数 | 部分工具需要 API Key 等初始化参数 |
确认后:工具被加入「已安装」Tab,类型为 registry。
2.5.3 技能分类管理 [A]
路径:/admin/skill-categories权限:admin(非 admin 访问返回"权限不足")
控制普通用户在 技能包 列表里看到哪些分类下拉项,以及分类的中英文名、排序。
分类行
每行字段(grid 布局):
| 字段 | 编辑性 | 说明 |
|---|---|---|
| Slug | 只读 | 灰底代码框,如 quality_control |
| 中文名 | ✓ 内联编辑 | |
| English | ✓ 内联编辑 | 可空 |
| 排序权重 | ✓ 内联编辑 | 数字,小数优先 |
| 在用数 | 只读 | 该分类下技能包数 |
| 系统标记 | - | 锁图标 + tooltip:「系统预置分类」 |
行操作
| 按钮 | 行为 |
|---|---|
| 👁️ 切换可见 | visible ↔ hidden;隐藏后普通用户下拉看不到,但已绑定的 skill 仍显示分类名 |
| 💾 保存 | 仅当行有未保存修改时显示 |
| 🗑️ 删除 | 系统分类 disabled;有 skill 在用也 disabled,tooltip 解释原因 |
新建分类对话框
| 字段 | 必填 | 校验 |
|---|---|---|
| Slug | ✓ | ^[a-z][a-z0-9_]{2,49}$,创建后不可改 |
| 中文名 | ✓ | |
| English | ||
| Icon | lucide-react 图标名,如 ShieldCheck | |
| 排序权重 | 默认 500,数字 |
页面底部使用说明卡片
- slug 是 skill 存储的实际值,创建后不可改 — 想换语义只能新建再迁移
- 系统预置分类不能删除,可隐藏
- 有技能在用的分类不能删除,先把那些 skill 改到别的分类
- sort_order 小数优先,置顶用 1~9
2.5.4 常见问题
Q1:加新的 AI 模型,普通用户看不到?
检查:
- 模型
is_active是否启用 - 该模型所属组织是否匹配
- 用户浏览器缓存:刷新一次
Q2:MCP 工具能跨组织共享吗?
可以。在 MCPToolDialog 勾选「公开」即可全平台可见。但 API Key 等敏感字段仍按组织隔离 — 各组织各配各的凭证。
Q3:技能分类删不掉?
按下面顺序检查:
- 是不是系统预置(锁图标)→ 只能隐藏
- 是不是有技能包在用 → 先编辑那些技能包改分类,再删
- slug 是否冲突 → 这个不影响删除
Q4:模型定价改了之后,历史用量成本会重算吗?
不会。用量记录入库时已固化当时的成本计算结果。改定价只影响未来的调用。
Q5:MCP 工具的测试为什么有时假阳性(测试通过但实际不能用)?
测试只验证连通性 + 协议握手。具体业务调用(如查特定数据库表)需要在智能体里实际跑一遍才能确认。
Q6:能批量导入 AI 模型 / MCP 工具配置吗?
UI 不支持。运维可用后端 CLI:
siracli model import models.yaml
siracli mcp-tool import tools.yaml