# ai-platform **Repository Path**: xai_3/ai-platform ## Basic Information - **Project Name**: ai-platform - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-31 - **Last Updated**: 2026-07-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI 对话与管理平台 企业级 AI 平台,**管理端与用户端是两个独立前端工程**,共用一个后端与一个共享包: - **管理端**(`frontend/apps/admin`):配置模型、服务商、API Key、Agent、应用、技能、工具、知识库、工作流、用户与权限、角色、部门、多级菜单、主题、使用额度、调用/登录/操作日志、开放平台密钥 - **用户端**(`frontend/apps/user`):AI 对话、应用广场、我的应用、技能库、Agent 广场、知识库检索、工作流执行、历史会话、外观主题与自定义背景 - **共享包**(`frontend/packages/shared`):API 客户端、类型、状态、主题引擎、通用组件与 hooks 技术栈:Java 21 + Spring Boot 3.3 + PostgreSQL 16(pgvector) + Redis 7 + React 18 + Ant Design 5 + Vite + npm workspaces。 --- ## 端口与入口 | 入口 | 默认地址 | 说明 | | --- | --- | --- | | 用户端 | | 普通用户使用 | | 管理端 | | 管理员配置 | | 后端 API | | 建议仅内网,由前端 Nginx 反代 | | 接口文档 | | Swagger UI | | 开放平台 | `<后端地址>/v1/**` | OpenAI 兼容,供外部系统接入 | 初始账号:`admin / admin123`(管理员)、`demo / demo123`(普通用户),首次启动自动创建。 --- ## 快速开始 ```bash cp .env.example .env # 至少修改 JWT_SECRET、CRYPTO_AES_KEY、DB_PASSWORD 与初始账号密码 # 有大模型 API Key 时填入 LLM_BASE_URL / LLM_API_KEY 可自动完成模型初始化 vim .env docker compose up -d --build docker compose logs -f backend ``` 本地开发: ```bash cd frontend && npm install # workspaces 一次装齐三个包 npm run dev:user # 用户端 http://localhost:5173 npm run dev:admin # 管理端 http://localhost:5174 npm run build # 两端一起打包 npm run typecheck # 两端类型检查 cd ../backend && mvn spring-boot:run # 需先起 postgres 与 redis ``` --- ## 功能清单 ### 管理端 | 模块 | 能力 | | --- | --- | | 服务商目录 | 预置 OpenAI / Azure / DeepSeek / 百炼 / 智谱 / Moonshot / 硅基流动 / 火山方舟 / Ollama / vLLM;**新增平台只加一条记录,不改代码** | | API Key | 凭证 AES-256-GCM 加密落库,掩码回显,一键测试连通性,选服务商自动带出 Base URL | | 模型 | 对话/向量模型,采样参数、上下文、单价、默认模型、启停 | | Agent | 系统提示词、开场白、绑定模型/知识库/工具、记忆轮数、采样参数 | | 应用 | 三种类型(对话/绑定 Agent/绑定工作流),绑定模型+知识库+工具+技能,推荐问题,发布下线,可见性(全员/仅自己/按成员授权)与成员授权(按用户/角色/部门) | | 技能 | 可复用提示词能力块,`{{变量}}` 声明与表单化填值,绑定模型/知识库/工具,内置 6 个技能 | | 工具 | HTTP 与内置工具,JSON Schema 参数,`{{占位符}}` 注入,试运行 | | 知识库 | 多知识库、文档上传(pdf/docx/xlsx/pptx/txt/md/html/csv)、手工录入、切分向量化、切片预览、重建索引 | | 工作流 | JSON DAG,7 类节点,发布/下线、试运行、节点级执行轨迹、运行记录 | | 用户 | CRUD、启停、重置密码、部门归属、主角色 + 附加角色、权限覆盖(额外授予/显式拒绝) | | 角色 | 角色 CRUD、数据范围(全部/本部门/本部门及下级/仅本人)、按模块分组的权限勾选 | | 组织架构 | 树形部门 CRUD | | 多级菜单 | 任意层级菜单树,按端(管理端/用户端/两端)区分,绑定权限点,前端导航与路由由后端下发 | | 主题 | 6 套内置主题预设,可自建;设为默认 | | 使用额度 | 全局/角色/用户三级,按日/月/累计限制次数与 Token,Redis 实时计数,分钟级限流 | | 日志 | 调用日志(含渠道 WEB/OPENAPI)、登录日志、操作日志(注解 + AOP,敏感参数掩码)、仪表盘趋势图 | | 开放平台 | 接入密钥(SHA-256 存储、明文仅创建时可见、轮换)、scopes 权限范围、分钟限流、每日 Token 上限、IP 白名单、内置多语言接入示例 | ### 用户端 AI 对话(SSE 流式、停止生成、Markdown、知识库引用、工具调用过程、附件抽取文本、技能选择与变量填写)、应用广场、**我的应用**(用户自建并发布)、**技能库 + 我的技能**(用户自建)、Agent 广场、知识库检索、工作流执行与运行记录、历史会话、个人设置、**外观主题**(主题预设 / 主色 / 深浅色 / 布局 / 圆角 / 字号 / 紧凑 / 对话字号 / 自定义背景:纯色·渐变·图片 + 不透明度 + 模糊)、用量与额度。 --- ## 目录结构 ``` ai-platform/ ├── docker-compose.yml # postgres + redis + backend + frontend-user + frontend-admin ├── .env.example ├── docs/API-CONTRACT-V3.md # V3 新增模块的接口契约(前后端共同遵循) ├── backend/ # Spring Boot,176 个 Java 文件 │ └── src/main/ │ ├── java/com/aiplatform/ │ │ ├── common/ # 统一响应、异常、分页、JSON、AES 加解密 │ │ ├── config/ # Security / Redis / CORS / 线程池 / OpenAPI / 初始化 │ │ ├── security/ # JWT、登录用户、权限工具 │ │ ├── llm/ # OpenAI 兼容客户端(chat / stream / embeddings) │ │ └── modules/ │ │ ├── user/ # 认证、用户、权限点 │ │ ├── system/ # 角色、部门、多级菜单 │ │ ├── model/ # 服务商、凭证、模型 │ │ ├── agent/ app/ skill/ # Agent、应用、技能 │ │ ├── kb/ # 知识库、切分、向量化、pgvector 检索 │ │ ├── tool/ chat/ workflow/ # 工具、对话编排、DAG 引擎 │ │ ├── quota/ log/ audit/ # 额度限流、调用日志、登录与操作审计 │ │ ├── theme/ # 主题预设与用户外观偏好 │ │ ├── open/ # 开放平台密钥 + /v1 OpenAI 兼容入口 │ │ └── file/ # 上传与文本抽取 │ └── resources/db/migration/ # Flyway V1 建表 / V2 种子 / V3 系统与应用扩展 └── frontend/ # npm workspaces 单仓多包,199 个 TS/TSX 文件 ├── package.json # workspaces: packages/* + apps/* ├── packages/shared/src/ │ ├── api/ # http + 按域拆分的 14 个接口文件 + SSE 流式读取 │ ├── types/ # 按域拆分的类型定义 │ ├── store/ # auth / appearance(zustand) │ ├── theme/ # 主题引擎:预设、解析、Provider、背景层 │ ├── layout/ # BasicLayout / SiderNav / TopNav / HeaderBar / 守卫 / 登录页 │ ├── components/ # PageCard / ModalForm / PermissionTree / VariablesEditor 等 │ └── hooks/ # useCrud / usePagedTable / useOptions ├── apps/admin/src/pages/ # 一页一目录:XxxPage.tsx + columns.tsx + components/* └── apps/user/src/pages/ # 同上;chat 页拆成 8 个组件 + 5 个 hook ``` 前端约定:**一个页面一个目录**,页面文件只做状态编排,表格列在 `columns.tsx`,弹窗/抽屉/表单在 `components/` 下各自独立成文件。 --- ## 关键设计 **多平台接入**:所有模型统一走 OpenAI 兼容协议(`/chat/completions`、`/embeddings`)。`ai_provider` 表是服务商目录,接入新平台只需在管理端新增一条记录填对 Base URL。反向地,平台自身也通过 `/v1/**` 暴露 OpenAI 兼容接口,任何支持 OpenAI SDK 的系统都能把本平台当作模型服务接入。 **多级菜单与权限**:菜单树存在 `sys_menu`,按 `scope` 区分管理端/用户端,每个节点可绑定权限点。`GET /api/menus/mine` 按当前用户权限剪枝后下发,前端 `DynamicMenu` 递归渲染,支持任意层级;有效权限 = 主角色 ∪ 附加角色权限 + 用户额外授予 − 显式拒绝,结果缓存 Redis 并在配置变更时失效。 **应用与技能的双向开放**:`ai_app` / `ai_skill` 都有 `scope`(ADMIN 平台 / USER 个人)与 `owner_id`,同一套表既承载管理员统一维护的平台资产,也承载用户自建资产;可见性支持全员、仅自己、按成员授权(用户/角色/部门)。 **主题与自定义背景**:`sys_theme` 存主题预设(antd token JSON),`sys_user_setting` 存每个用户的覆盖项。前端 `resolveAppearance()` 合并两者后交给 `ConfigProvider`,`BackgroundLayer` 固定铺满视口渲染纯色/渐变/图片背景并支持不透明度与模糊;有自定义背景时布局底色自动透明并加毛玻璃。 **知识库 RAG**:Tika 抽取文本 → 按段落/句子递归切分 → 向量模型 → `kb_chunk.embedding vector(1536)`,检索用 pgvector 余弦距离 `<=>` 并按阈值过滤,命中片段拼进系统提示词,前端展示引用来源。 **对话提示词组装顺序**:应用/Agent 系统提示词 → 命中技能的 instruction(变量替换后)→ 知识库检索上下文 → 历史对话 → 本轮提问。