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