fischer-agentkit/docs/brainstorms/2026-06-21-admin-console-re...

8.3 KiB
Raw Blame History

Admin Console — Enterprise Department-Scoped Management

Date: 2026-06-21 Status: Draft (revised 2026-06-21 — SaaS multi-tenant → enterprise department-scoped) Branch: feat/admin-console Author: brainstorm session

Outcome

为 Fischer AgentKit 构建统一的企业管理端,采用"嵌入主应用 /admin 路由组 + 架构预留拆分能力"方案。Web UI 和 CLI 双通道共享同一套 service 层。核心模型是单企业部署 + 部门级权限隔离 + 能力按部门绑定:人事部有人事 skill + 人事系统 DB 权限,研发部有编码 skill部门间资源隔离、用户可多部门权限并集。MVP 覆盖 5 个管理领域部门与用户、LLM 配置、Skill 与 KB、用量仪表盘与配额。

Background

当前 AgentKit 没有统一管理端:

  • 后端 admin 端点只有 4 个session 管理),无 user CRUD / LLM 配置 / 用量分用户
  • 前端只有 1 个 admin 页面(/admin/users,仅会话管理)
  • LLM 配置只在 agentkit.yaml,运行时不可改
  • KB/Skill 有 CRUD API 但不是 admin-only无部门隔离
  • 权限模型有 3 级member/operator/admin但实际使用率极低
  • 管理工作流是"零散脚本不成体系"

Actual Usage Scenario (revised)

单企业部署一套 AgentKit按部门/职能划分权限:

  • 人事部:拥有人事专用 skill + 访问人事系统数据库的权限,无编码能力
  • 研发部:拥有编码 skill + 代码仓库访问权限
  • 财务部:拥有财务分析 skill + 财务系统访问权限
  • 个人用户属于一个或多个部门(权限并集),如 CFO 可兼管财务和运营
  • 管理员按部门分配能力,用户继承所属部门的能力

这不是 SaaS 多租户——不需要租户计费、跨租户数据隔离、租户 CRUD。核心是部门(能力组)+ 用户多部门归属 + 能力按部门绑定

Primary Actors

  • 超级管理员(企业 IT管理所有部门、全局 LLM 配置、跨部门用量监控、用户管理
  • 部门管理员(部门负责人):管理本部门成员、本部门 Skill/KB、本部门用量
  • 普通用户:属于一个或多个部门,继承部门能力,受部门配额约束
  • 运维自动化:通过 CLI agentkit admin <domain> <action> 执行管理操作,与 Web UI 等价

Scope

MVP第一期

  1. 部门与用户管理

    • 部门 CRUD创建、列表、编辑、禁用/启用、删除(人事/研发/财务等)
    • 部门能力绑定:每个部门可绑定专属 skill、KB、工具权限、LLM 配额
    • 用户 CRUD创建、列表、编辑、禁用/启用、删除
    • 用户多部门归属:一个用户可属于多个部门(user_departments 多对多表),权限取并集
    • 角色管理:超级管理员 / 部门管理员 / 普通用户
    • 密码重置:管理员重置任意用户密码
    • 当前已有的会话管理revoke/list保留并集成
    • 数据隔离所有资源表skills、kb_documents、llm_usage 等)加 department_id 列,用户访问时只能看到所属部门的资源(多部门取并集)
  2. LLM 配置管理

    • Provider/Model/API Key CRUD运行时增删改不重启服务
    • Fallback 链配置:可视化编辑 provider fallback 顺序
    • 按部门配额:每部门可配置独立的 provider/model 白名单和 token 上限
    • 成本上限:按部门/用户设置日/月成本上限,超限硬拒绝(返回 429
    • 配置从 agentkit.yaml 迁移到数据库,支持运行时热重载
    • 向后兼容:首次启动时自动从 agentkit.yaml 导入现有配置
  3. Skill 与 KB 管理

    • Skill 启停/编辑/导入admin 可启用/禁用任意 skill编辑 skill 配置YAML 导入
    • Skill 按部门绑定:人事 skill 只对人事部可见,编码 skill 只对研发部可见
    • KB 文档 CRUD/同步/重建索引admin 可管理所有 KB 文档
    • KB 按部门隔离:每部门有独立的 KB 资源池
  4. 用量仪表盘 + 配额

    • 按部门/用户/时间维度查看 LLM token 用量、成本、调用次数
    • 可视化图表:时间序列、按 provider/model 分桶、按用户排行
    • 报表导出CSV/JSON
    • 配额上限:按部门/用户设置 token/成本上限超限硬拒绝429
    • 告警:配额达到 80%/100% 时触发MVP 只做日志告警)

产品形态

  • Web UI/admin/* 路由组,独立 AdminLayout + 左侧导航 + 5 个管理页面
  • CLIagentkit admin <domain> <action> 镜像所有 Web UI 操作
  • 后端:独立 admin_router APIRouter 实例,未来可拆分到独立 FastAPI 应用
  • 认证:共享现有 JWT 认证admin 端点要求 admin 角色

架构决策

  • 部门隔离:共享数据库 + department_id 列。DepartmentContextMiddleware 在请求级别注入用户所属部门列表,所有 repository 层强制按 department_id IN (...) 过滤(多部门取并集)。
  • 配置存储LLM 配置从 agentkit.yaml 迁移到数据库(llm_providers / llm_models / llm_api_keys 表),支持运行时热重载。首次启动自动从 YAML 导入。
  • CLI/Web 一致性CLI 和 Web UI 调用同一套 service 层,避免双份业务逻辑。
  • 预留拆分admin_router 是独立 APIRouter 实例,AdminLayout 是独立路由树。未来需要独立部署时,把 admin_router 挂到独立 FastAPI 实例,前端 AdminLayout 独立构建即可。

Success Criteria

  • 超级管理员可在 Web UI 或 CLI 完成全部 4 个领域的管理操作,无需手动编辑 YAML 或操作数据库
  • 部门隔离通过安全测试:人事部用户无法访问研发部的 skill/KB/用量数据(除非同时属于两个部门)
  • LLM 配置可在运行时修改并立即生效,无需重启服务
  • 用量仪表盘可按部门/用户/时间维度展示,数据延迟 < 1 分钟
  • 配额超限时系统返回 429不会超支
  • CLI 与 Web UI 操作结果一致,调用同一 service 层
  • 用户多部门归属正确CFO 兼管财务和运营时,可访问两个部门的所有资源

Non-Goals

  • SaaS 多租户(外部多客户、租户计费、跨租户物理隔离)——本场景是单企业部署
  • 物理隔离的独立数据库(部门数据隔离靠 department_id 列,不靠物理隔离)
  • 计费系统集成(只做用量采集和配额,不做实际计费/扣款)
  • 审计日志(第二期)
  • SLA 监控(第二期)
  • 独立管理应用部署架构预留但不实现MVP 嵌入主应用)
  • SSO/SAML 集成(第二期)

Dependencies / Assumptions

  • 假设:现有 users / auth_sessions 表可平滑加 department_idSQLite ALTER TABLE 支持 ADD COLUMNNULL 表示未分配部门的全局用户)
  • 假设LLM 配置从 YAML 迁移到数据库后,agentkit.yaml 仍可作为首次导入源,不破坏现有部署
  • 依赖:现有 JWT 认证 + RBAC 权限模型3 级)可扩展支持部门管理员角色
  • 依赖:现有 agentkit CLI 框架Typer支持新增 admin 命令组
  • 风险:部门隔离 middleware 完整性是关键风险——任何遗漏 department_id 过滤的查询都是数据泄露漏洞。通过 repository 层强制 department_id IN (...) 参数缓解,但需要安全测试覆盖。
  • 风险LLM 配置热重载需要处理并发修改冲突(乐观锁或版本号)
  • 风险:用户多部门归属的权限并集计算可能产生意外权限提升(如用户从 A 部门调离但未及时移除归属)

Open Questions (Resolved)

  • 租户的粒度是"组织"还是"工作空间"已明确:单企业部署 + 部门级隔离,不是 SaaS 多租户
  • 跨租户用户的关系如何建模?已明确user_departments 多对多表,权限取并集
  • 配额超限时的行为:硬拒绝还是软降级?已明确硬拒绝429

Delivery Strategy

MVP 范围较大4 领域),建议按领域分批交付:

  1. 批次 1:部门与用户管理(部门 CRUD + 用户多部门归属 + 隔离 middleware其他领域依赖
  2. 批次 2LLM 配置管理(含 YAML→DB 迁移)
  3. 批次 3Skill 与 KB 管理(按部门绑定/隔离)
  4. 批次 4:用量仪表盘 + 配额(依赖前 3 批的 department_id 埋点)

每批次独立可交付、可测试、可合并。