ai-robot-core/spec/ai-service-admin/design.md

133 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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` 指令控制按钮显隐。