docs(spec): add frontend design for ai-service-admin [AC-ASA-01]

This commit is contained in:
MerCry 2026-02-24 14:09:53 +08:00
parent 71e966d62a
commit 60953a14c5
1 changed files with 132 additions and 0 deletions

View File

@ -0,0 +1,132 @@
---
module: ai-service-admin
title: "AI 中台管理界面ai-service-admin前端技术设计"
status: "draft"
version: "0.1.0"
owners:
- "frontend"
- "backend"
last_updated: "2026-02-24"
---
# AI 中台管理界面前端技术设计Design
## 1. 架构概览Architecture Overview
本模块作为 AI 中台ai-service的管理侧前端基于 Vue 3 + Pinia + Element Plus 构建,旨在提供一套高效、响应式的 AI 资产管理与调试工具。
### 1.1 核心技术栈
- **框架**Vue 3 (Composition API)
- **状态管理**Pinia
- **组件库**Element Plus
- **网络请求**Axios + OpenAPI Generated SDK
- **工程基座**RuoYi-Vue-Plus 前端基座(复用权限与布局)
---
## 2. 页面布局与交互设计UI/UX Design
### 2.1 知识库管理KB Management
- **布局**:列表页 + 抽屉/详情页。
- **核心功能**
- **文档列表**:支持文件名称、上传时间、索引状态筛选。
- **上传组件**
- 集成 Element Plus `el-upload`,支持多文件并发。
- 列表展示文件切片与向量化进度条(基于任务轮询)。
- **任务轮询策略**
- 进入详情页或上传后,每 3s 调用 `/admin/kb/index/jobs/{jobId}`
- 状态流转:`pending` (排队) -> `processing` (处理中) -> `completed` (完成) / `failed` (失败)。
- 失败任务点击“错误详情”展示后端返回的 `errorMsg`
### 2.2 RAG 实验室RAG Lab
- **布局****双栏对比视图**。
- **左侧:调试输入**
- 输入 Query 文本框。
- 参数配置面板Top-K, Score Threshold, Prompt Version 选择)。
- **右侧:实验结果(分屏或页签)**
- **召回片段栏**:展示 `retrievalResults` 列表,高亮显示 Score 分值与来源。
- **最终 Prompt 栏**代码块展示Read-only直观呈现变量替换后的上下文效果。
- **交互**点击“运行实验”按钮Loading 状态锁定右侧视图,完成后平滑更新数据。支持保存实验快照进行历史对比。
### 2.3 会话监控Session Monitoring
- **列表页**
- 支持多字段过滤:租户 ID、会话 ID、时间范围、模型/场景、是否包含错误。
- 列表展示:会话摘要、首字耗时、总消息数、状态码。
- **详情详情弹窗**
- **全链路追踪视图**:采用 Timeline 或消息气泡流。
- **Trace 信息排查**:点击单条回复,展开展示对应的检索命中、工具调用参数及结果。
---
## 3. 状态管理与拦截器设计State & Security
### 3.1 租户状态管理Pinia
创建 `tenant` store用于持久化维护当前操作的租户上下文。
```typescript
// store/modules/tenant.ts
export const useTenantStore = defineStore('tenant', {
state: () => ({
currentTenantId: localStorage.getItem('X-Tenant-Id') || 'default'
}),
actions: {
setTenant(id: string) {
this.currentTenantId = id;
localStorage.setItem('X-Tenant-Id', id);
}
}
});
```
### 3.2 Axios 自动注入Interceptor
在全局请求拦截器中,自动从 Store 读取并注入 `X-Tenant-Id`
```typescript
// utils/request.ts
service.interceptors.request.use(config => {
const tenantStore = useTenantStore();
if (tenantStore.currentTenantId) {
config.headers['X-Tenant-Id'] = tenantStore.currentTenantId;
}
return config;
}, error => {
return Promise.reject(error);
});
```
---
## 4. 组件封装Component Design
### 4.1 基础封装
- **BaseTable**:二次封装 `el-table`,内置分页逻辑与 `X-Tenant-Id` 联动。
- **BaseForm**:统一的字段校验与错误反馈提示。
### 4.2 业务专用组件
- **RagResultCard**:用于展示 RAG 召回片段,支持预览原始文档。
- **PromptEditor**:基于 Monaco Editor 或简易 Textarea集成 `{{variable}}` 语法高亮提示。
---
## 5. 异常处理策略Exception Handling
### 5.1 统一拦截机制
在 Axios 响应拦截器中对 `401``403` 进行分流处理:
- **401 Unauthorized**
- 清除本地 Token 与缓存。
- 引导用户重定向至登录页Login Page
- 提示信息:“登录已失效,请重新登录”。
- **403 Forbidden**
- **非阻塞提示**:使用 `el-message` 报错“当前操作无权限”。
- **阻塞处理**若为页面初始化失败展示“403 无权访问”占位图。
### 5.2 统一错误模型映射
后端返回的错误结构(如 `code`, `message`, `requestId`)将被映射到 UI 层,便于管理员复制 `requestId` 进行后端日志追溯。
---
## 6. 数据流设计Data Flow
- **数据获取**:组件挂载 -> 注入 `X-Tenant-Id` -> 调用 SDK -> 更新本地状态。
- **权限控制**:基于后端返回的 `permissions` 数组,通过 `v-hasPermi` 指令控制按钮显隐。