初始化项目代码
This commit is contained in:
399
文件/AIChatController_流程图.md
Normal file
399
文件/AIChatController_流程图.md
Normal file
@@ -0,0 +1,399 @@
|
||||
# AIChatController 交互流程图
|
||||
|
||||
## 1. AI流式问答流程 (/ai/chat/stream)
|
||||
|
||||
### 1.1 流程图
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[开始: 用户发起AI问答] --> B{用户已登录?}
|
||||
B -->|否| C[返回错误: 用户未登录]
|
||||
B -->|是| D{用户信息获取成功?}
|
||||
D -->|否| E[返回错误: 用户信息获取失败]
|
||||
D -->|是| F[获取部门信息]
|
||||
F --> G[获取用户可访问知识库]
|
||||
G --> H{知识库列表为空?}
|
||||
H -->|是| I[返回错误: 没有可用的知识库]
|
||||
H -->|否| J[获取或生成session_id]
|
||||
J --> K[从数据库获取历史记录]
|
||||
K --> L[调用AI服务进行流式问答]
|
||||
L --> M[返回SseEmitter流式响应]
|
||||
C --> N[结束]
|
||||
E --> N
|
||||
I --> N
|
||||
M --> N
|
||||
```
|
||||
|
||||
### 1.2 时序图
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
autonumber
|
||||
participant Client as 用户
|
||||
participant AI as AIChatController
|
||||
participant Auth as AuthService
|
||||
participant Dept as DepartmentService
|
||||
participant KB as KnowledgeBasePathService
|
||||
participant Chat as ChatService
|
||||
participant AIChat as AiChatService
|
||||
|
||||
Client->>+AI: POST /ai/chat/stream
|
||||
AI->>+Auth: validateToken(token)
|
||||
Auth-->>-AI: User对象
|
||||
|
||||
AI->>+Dept: getDepartmentById(deptId)
|
||||
Dept-->>-AI: Department
|
||||
|
||||
AI->>+KB: getUserAccessibleKnowledgeBaseNames(userId, deptId, deptCode)
|
||||
KB-->>-AI: List<String> collections
|
||||
|
||||
alt 知识库为空
|
||||
AI-->>Client: 错误: 没有可用的知识库
|
||||
end
|
||||
|
||||
AI->>+Chat: getSessionMessagesAsHistory(sessionId)
|
||||
Chat-->>-AI: List<HistoryItem>
|
||||
|
||||
AI->>+AIChat: streamFromRagService(request, userId, deptId)
|
||||
loop 流式响应
|
||||
AIChat-->>Client: SSE事件流
|
||||
end
|
||||
AIChat-->>-AI: SseEmitter
|
||||
|
||||
AI-->>-Client: SseEmitter流式响应
|
||||
```
|
||||
|
||||
### 1.3 流程说明
|
||||
|
||||
| 步骤 | 说明 | 代码位置 |
|
||||
|------|------|----------|
|
||||
| 1. 用户发起请求 | POST /ai/chat/stream | AIChatController:56 |
|
||||
| 2. 验证登录状态 | 检查Authorization header | AIChatController:61-73 |
|
||||
| 3. 验证用户信息 | validateToken获取用户 | AIChatController:75-87 |
|
||||
| 4. 获取部门信息 | 根据deptId获取Department | AIChatController:94-104 |
|
||||
| 5. 获取知识库列表 | getUserAccessibleKnowledgeBaseNames | AIChatController:106 |
|
||||
| 6. 生成session_id | 无session_id时生成新的 | AIChatController:123-127 |
|
||||
| 7. 获取历史记录 | getSessionMessagesAsHistory | AIChatController:134-140 |
|
||||
| 8. 调用AI服务 | streamFromRagService | AIChatController:145 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 获取用户会话列表 (/ai/sessions)
|
||||
|
||||
### 2.1 流程图
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[开始: 获取会话列表] --> B{用户已登录?}
|
||||
B -->|否| C[返回: success=false, 用户未登录]
|
||||
B -->|是| D[获取用户所有会话]
|
||||
D --> E[实现简单分页]
|
||||
E --> F[返回会话列表及分页信息]
|
||||
C --> G[结束]
|
||||
F --> G
|
||||
```
|
||||
|
||||
### 2.2 时序图
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
autonumber
|
||||
participant Client as 用户
|
||||
participant AI as AIChatController
|
||||
participant Auth as AuthService
|
||||
participant Chat as ChatService
|
||||
|
||||
Client->>+AI: GET /ai/sessions
|
||||
AI->>+Auth: validateToken(token)
|
||||
Auth-->>-AI: User对象
|
||||
|
||||
AI->>+Chat: getUserSessions(userId)
|
||||
Chat-->>-AI: List<ChatSession>
|
||||
|
||||
Note over AI: 实现简单分页<br/>计算start/end
|
||||
|
||||
AI-->>-Client: 返回会话列表及分页信息
|
||||
```
|
||||
|
||||
### 2.3 流程说明
|
||||
|
||||
| 步骤 | 说明 | 代码位置 |
|
||||
|------|------|----------|
|
||||
| 1. 用户发起请求 | GET /ai/sessions | AIChatController:163 |
|
||||
| 2. 验证登录状态 | getCurrentUserId | AIChatController:170-175 |
|
||||
| 3. 获取会话列表 | chatService.getUserSessions | AIChatController:177 |
|
||||
| 4. 分页处理 | 计算start/end | AIChatController:179-185 |
|
||||
| 5. 返回结果 | 返回data/total/page等信息 | AIChatController:187-192 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 获取会话详情 (/ai/session/{sessionId})
|
||||
|
||||
### 3.1 流程图
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[开始: 获取会话详情] --> B{用户已登录?}
|
||||
B -->|否| C[返回: 用户未登录]
|
||||
B -->|是| D[获取用户所有会话]
|
||||
D --> E{会话属于当前用户?}
|
||||
E -->|否| F[返回: 无权访问该会话]
|
||||
E -->|是| G[获取会话消息列表]
|
||||
G --> H[实现简单分页]
|
||||
H --> I[返回会话详情及分页信息]
|
||||
C --> J[结束]
|
||||
F --> J
|
||||
I --> J
|
||||
```
|
||||
|
||||
### 3.2 时序图
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
autonumber
|
||||
participant Client as 用户
|
||||
participant AI as AIChatController
|
||||
participant Auth as AuthService
|
||||
participant Chat as ChatService
|
||||
|
||||
Client->>+AI: GET /ai/session/{sessionId}
|
||||
AI->>+Auth: validateToken(token)
|
||||
Auth-->>-AI: User对象
|
||||
|
||||
AI->>+Chat: getUserSessions(userId)
|
||||
Chat-->>-AI: List<ChatSession>
|
||||
|
||||
Note over AI: 验证会话所属权
|
||||
|
||||
alt 会话不属于用户
|
||||
AI-->>Client: 错误: 无权访问该会话
|
||||
else 会话属于用户
|
||||
AI->>+Chat: getSessionMessages(sessionId)
|
||||
Chat-->>-AI: List<ChatMessage>
|
||||
Note over AI: 实现简单分页
|
||||
AI-->>-Client: 返回会话详情及分页信息
|
||||
end
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. 删除单个会话 (/ai/session/{sessionId})
|
||||
|
||||
### 4.1 流程图
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[开始: 删除单个会话] --> B{用户已登录?}
|
||||
B -->|否| C[返回: 用户未登录]
|
||||
B -->|是| D[获取用户所有会话]
|
||||
D --> E{会话属于当前用户?}
|
||||
E -->|否| F[返回: 无权删除该会话]
|
||||
E -->|是| G[执行删除操作]
|
||||
G --> H{删除成功?}
|
||||
H -->|是| I[返回: 删除成功]
|
||||
H -->|否| J[返回: 删除失败]
|
||||
C --> K[结束]
|
||||
F --> K
|
||||
I --> K
|
||||
J --> K
|
||||
```
|
||||
|
||||
### 4.2 时序图
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
autonumber
|
||||
participant Client as 用户
|
||||
participant AI as AIChatController
|
||||
participant Auth as AuthService
|
||||
participant Chat as ChatService
|
||||
|
||||
Client->>+AI: DELETE /ai/session/{sessionId}
|
||||
AI->>+Auth: validateToken(token)
|
||||
Auth-->>-AI: User对象
|
||||
|
||||
AI->>+Chat: getUserSessions(userId)
|
||||
Chat-->>-AI: List<ChatSession>
|
||||
|
||||
Note over AI: 验证会话所属权
|
||||
|
||||
alt 会话不属于用户
|
||||
AI-->>Client: 错误: 无权删除该会话
|
||||
else 会话属于用户
|
||||
AI->>+Chat: deleteSession(sessionId, userId)
|
||||
Chat-->>-AI: boolean success
|
||||
alt 删除成功
|
||||
AI-->>Client: {success: true, message: "删除成功"}
|
||||
else 删除失败
|
||||
AI-->>Client: {success: false, message: "删除失败"}
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 批量删除会话 (/ai/sessions)
|
||||
|
||||
### 5.1 流程图
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[开始: 批量删除会话] --> B{用户已登录?}
|
||||
B -->|否| C[返回: 用户未登录]
|
||||
B -->|是| D{sessionIds列表有效?}
|
||||
D -->|否| E[返回: 会话ID列表不能为空]
|
||||
D -->|是| F[获取用户所有会话]
|
||||
F --> G[提取用户会话ID集合]
|
||||
G --> H{所有会话属于用户?}
|
||||
H -->|否| I[返回: 无权删除部分会话]
|
||||
H -->|是| J[执行批量删除]
|
||||
J --> K{删除成功?}
|
||||
K -->|是| L[返回: 批量删除成功]
|
||||
K -->|否| M[返回: 批量删除失败]
|
||||
C --> N[结束]
|
||||
E --> N
|
||||
I --> N
|
||||
L --> N
|
||||
M --> N
|
||||
```
|
||||
|
||||
### 5.2 时序图
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
autonumber
|
||||
participant Client as 用户
|
||||
participant AI as AIChatController
|
||||
participant Auth as AuthService
|
||||
participant Chat as ChatService
|
||||
|
||||
Client->>+AI: DELETE /ai/sessions
|
||||
AI->>+Auth: validateToken(token)
|
||||
Auth-->>-AI: User对象
|
||||
|
||||
alt sessionIds为空
|
||||
AI-->>Client: 错误: 会话ID列表不能为空
|
||||
end
|
||||
|
||||
AI->>+Chat: getUserSessions(userId)
|
||||
Chat-->>-AI: List<ChatSession>
|
||||
|
||||
Note over AI: 提取用户会话ID集合<br/>验证所有会话属于用户
|
||||
|
||||
alt 部分会话不属于用户
|
||||
AI-->>Client: 错误: 无权删除部分会话
|
||||
else 所有会话属于用户
|
||||
AI->>+Chat: deleteSessions(sessionIds, userId)
|
||||
Chat-->>-AI: boolean success
|
||||
alt 删除成功
|
||||
AI-->>Client: {success: true, deletedCount: N}
|
||||
else 删除失败
|
||||
AI-->>Client: {success: false, message: "批量删除失败"}
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 中断AI流式问答 (/ai/chat/stop)
|
||||
|
||||
### 6.1 流程图
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[开始: 中断AI问答] --> B{用户已登录?}
|
||||
B -->|否| C[返回: 用户未登录]
|
||||
B -->|是| D[调用sseEmitterManager.stop]
|
||||
D --> E{中断成功?}
|
||||
E -->|是| F[返回: 已中断AI回答]
|
||||
E -->|否| G[返回: 未找到活跃AI进程]
|
||||
C --> H[结束]
|
||||
F --> H
|
||||
G --> H
|
||||
```
|
||||
|
||||
### 6.2 时序图
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
autonumber
|
||||
participant Client as 用户
|
||||
participant AI as AIChatController
|
||||
participant Auth as AuthService
|
||||
participant SSE as SseEmitterManager
|
||||
|
||||
Client->>+AI: POST /ai/chat/stop
|
||||
AI->>+Auth: validateToken(token)
|
||||
Auth-->>-AI: User对象
|
||||
|
||||
AI->>+SSE: stop(sessionId)
|
||||
SSE-->>-AI: boolean success
|
||||
|
||||
alt 中断成功
|
||||
AI-->>Client: {success: true, message: "已中断AI回答"}
|
||||
else 中断失败
|
||||
AI-->>Client: {success: false, message: "未找到活跃的AI进程或已结束"}
|
||||
end
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 核心服务调用关系
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph Controller
|
||||
AI[AIChatController]
|
||||
end
|
||||
|
||||
subgraph Service
|
||||
AS[AuthService]
|
||||
CS[ChatService]
|
||||
ACS[AiChatService]
|
||||
SS[SseEmitterManager]
|
||||
KBS[KnowledgeBasePathService]
|
||||
DS[DepartmentService]
|
||||
end
|
||||
|
||||
subgraph Entity
|
||||
U[User]
|
||||
D[Department]
|
||||
CS1[ChatSession]
|
||||
CM[ChatMessage]
|
||||
CR[ChatReference]
|
||||
end
|
||||
|
||||
subgraph Database
|
||||
DB[(MySQL)]
|
||||
end
|
||||
|
||||
AI --> AS
|
||||
AI --> CS
|
||||
AI --> ACS
|
||||
AI --> SS
|
||||
AI --> KBS
|
||||
AI --> DS
|
||||
|
||||
AS --> U
|
||||
CS --> CS1
|
||||
CS --> CM
|
||||
CS --> CR
|
||||
KBS --> DB
|
||||
DS --> U
|
||||
DS --> D
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 接口汇总
|
||||
|
||||
| 接口 | 方法 | 路径 | 功能 |
|
||||
|------|------|------|------|
|
||||
| chatStream | POST | /ai/chat/stream | AI流式问答 |
|
||||
| getUserSessions | GET | /ai/sessions | 获取用户会话列表 |
|
||||
| getSessionDetail | GET | /ai/session/{sessionId} | 获取会话详情 |
|
||||
| getMessageReferences | GET | /ai/message/{messageId}/references | 获取消息引用 |
|
||||
| getSessionReferences | GET | /ai/session/{sessionId}/references | 获取会话引用 |
|
||||
| deleteSession | DELETE | /ai/session/{sessionId} | 删除单个会话 |
|
||||
| deleteSessions | DELETE | /ai/sessions | 批量删除会话 |
|
||||
| stopChatStream | POST | /ai/chat/stop | 中断AI流式问答 |
|
||||
Reference in New Issue
Block a user