Files
wecom_it_smart_desk/docs/03-技术架构/00-系统架构设计文档-v1.3.md
T

1003 lines
44 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
# IT智能服务台 — 系统架构设计文档
> **文档版本**: v1.5
> **创建日期**: 2025-07-11
> **最近更新**: 2026-07-04
> **架构师**: 高见远 (Bob)
> **状态**: 正式版
---
## 目录
1. [技术文档索引](#1-技术文档索引)
2. [系统概述](#2-系统概述)
3. [整体架构](#3-整体架构)
4. [技术选型](#4-技术选型)
5. [部署架构](#5-部署架构)
6. [统一入口设计](#6-统一入口设计)
7. [模块架构](#7-模块架构)
8. [AI Wingman 设计](#8-ai-wingman-设计)
9. [外部系统集成](#9-外部系统集成)
10. [安全设计](#10-安全设计)
11. [复杂对话场景设计](#11-复杂对话场景设计)
12. [知识图谱数据模型设计](#12-知识图谱数据模型设计)
13. [数据库设计](#13-数据库设计)
14. [API设计规范](#14-api设计规范)
---
## 1. 技术文档索引
本文档为技术架构主文档,相关详细设计文档如下:
| 文档 | 说明 | 状态 |
|------|------|------|
| **本文档** | 系统架构总览 v1.3 | ✅ 正式 |
| **01-ADRs-架构决策/** | 4项架构决策 | ✅ 已完成 |
| **02-技术方案/** | 具体功能技术方案 | |
| ├── [技术方案-消息功能详细设计.md](./02-技术方案/技术方案-消息功能详细设计.md) | 消息功能详细设计 | ✅ 已实现 |
| ├── [技术方案-摇人协作.md](./02-技术方案/技术方案-摇人协作.md) | 多坐席协作方案 | ✅ 已实现 |
| ├── [技术方案-邀请功能.md](./02-技术方案/技术方案-邀请功能.md) | 邀请功能方案 | ✅ 已实现 |
| ├── [技术方案-复杂场景重构.md](./02-技术方案/技术方案-复杂场景重构.md) | 复杂对话场景技术方案 | ✅ 设计完成 |
| └── [技术方案-ExternalSystemAdapter抽象层.md](./02-技术方案/技术方案-ExternalSystemAdapter抽象层.md) | 外部系统适配层设计 | ✅ 设计完成 |
| **03-技术分析/** | 技术研究分析 | |
| ├── [技术分析-H5右侧栏动态推送评估.md](./03-技术分析/技术分析-H5右侧栏动态推送评估.md) | H5右侧栏动态推送评估 | ✅ 已完成 |
| └── [技术分析-架构消息知识库迭代.md](./03-技术分析/技术分析-架构消息知识库迭代.md) | 架构消息知识库迭代 | ✅ 已完成 |
| **04-数据库设计/** | 数据库设计 | |
| └── [数据库设计-ER图与环境变量清点.md](./04-数据库设计/数据库设计-ER图与环境变量清点.md) | 数据库ER图与环境变量 | ✅ 已完成 |
| **05-架构图/** | Mermaid图表 | |
| └── [架构图集](./05-架构图/) | 各类时序图/类图 | ✅ 已完成 |
| [D-T19-知识图谱数据模型设计.md](../02-产品需求/小组任务书/D-T19-知识图谱数据模型设计.md) | 知识图谱数据模型设计 | ✅ 设计完成 |
---
## 2. 系统概述
### 2.1 项目背景
IT智能服务台是为企业提供 IT support 的智能化服务平台,核心目标:
- **员工侧**:通过 H5 页面提交 IT 问题、AI 自助解答、人工坐席服务
- **坐席侧**:通过自研工作台处理会话、AI 辅助( Wingman )、知识推荐
- **管理侧**:通过管理后台配置系统、管理坐席、查看数据
### 2.2 核心能力
| 能力 | 说明 |
|------|------|
| 消息路由 | AI 与人工无缝切换 |
| 实时会话 | 坐席工作台实时消息 |
| AI 辅助 | Wingman 草稿/摘要/知识推荐 |
| 外部集成 | 联软/火绒/aTrust/eHR 终端数据 |
| 角色管理 | 统一入口 + RBAC 权限 |
| 知识图谱 | Neo4j 图数据库支撑智能对话 |
---
## 3. 整体架构
### 3.1 系统架构图
```
┌─────────────────────────────────────────────────────────────────────┐
│ Linux 服务器 Docker │
│ │
│ ┌──────────┐ ┌──────────────┐ ┌──────────────┐ ┌────────────┐ │
│ │ Nginx │ │ Frontend │ │ Frontend │ │ Frontend │ │
│ │ (反代) │──│ Agent │ │ H5 User │ │ Portal │ │
│ │ :80/:443│ │ (Vue3+EP) │ │ (Vue3+Vant4)│ │ (Vue3) │ │
│ └────┬─────┘ └──────────────┘ └──────────────┘ └────────────┘ │
│ │ :5173 :5174 :5176 │
│ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ FastAPI │ │ Redis │ │PostgreSQL│ │ Neo4j │ │
│ │ Backend │──│ (缓存/Session)│──│ (持久化) │──│ (知识图谱) │ │
│ │ :8000 │ │ :6379 │ │ :5432 │ │ :7687 │ │
│ └────┬─────┘ └──────────┘ └──────────┘ └──────┬───────┘ │
│ │ │ │
│ │ ▼ │
│ │ ┌──────────────┐ │
│ └──────────────────────────────────────▶│ Dify AI │ │
│ │ (外部依赖) │ │
│ └──────────────┘ │
└───────────────────────────────────────────────────────────────────────┘
│ HTTPS
┌───────────────┐
│ 企微服务器 │
│ (消息回调API) │
└───────────────┘
```
### 3.2 前端架构
| 端 | 路径 | 技术栈 | 端口 |
|----|------|--------|------|
| Portal | /itportal/ | Vue3 + Element Plus | 5176 |
| 坐席端 | /itagent/ | Vue3 + Element Plus | 5173 |
| H5用户端 | /itdesk/ | Vue3 + Vant 4 | 5174 |
| 管理后台 | /itadmin/ | Vue3 + Element Plus + Tailwind | 5175 |
---
## 4. 技术选型
### 4.1 核心技术栈
| 层级 | 技术 | 版本 | 说明 |
|------|------|------|------|
| 前端框架 | Vue 3 | ^3.4.0 | Composition API |
| 前端路由 | Vue Router | ^4.3.0 | SPA 路由 |
| 状态管理 | Pinia | ^2.1.0 | 轻量级状态管理 |
| UI 组件 | Element Plus | ^2.7.0 | 坐席端/Portal |
| UI 组件 | Vant 4 | ^4.0 | H5 移动端 |
| 样式 | Tailwind CSS | ^3.4.0 | 管理后台 |
| 构建工具 | Vite | ^5.3.0 | 快速构建 |
| 后端框架 | FastAPI | 0.110+ | 异步高性能 |
| ORM | SQLAlchemy | 2.0+ | async ORM |
| 数据库 | PostgreSQL | 16 | 主数据存储 |
| 图数据库 | Neo4j Community | 5.x | 知识图谱存储 |
| 缓存 | Redis | 7 | Session/Token/缓存 |
| AI 引擎 | Dify | — | 外部依赖 |
---
## 5. 部署架构
### 5.1 部署拓扑
```
┌────────────────────────────┐
│ 企微服务器(外部) │
│ qyapi.weixin.qq.com │
└──────────┬─────────────────┘
│ HTTPS :443
┌──────────────── 办公网络 ────────────────────────────────┐
│ │
│ ┌──────────┐ ┌──────────────────────────┐ │
│ │ 坐席浏览器 │────────▶│ https://itsupport. │ │
│ │ (内网) │ HTTPS │ servyou.com.cn │ │
│ └──────────┘ └──────────┬───────────────┘ │
│ │ │
├────────────────── OA 服务器网络 ──┼───────────────────────┤
│ │ │
│ ┌───────▼──────────────┐ │
│ │ 服务器 (Docker) │ │
│ │ ┌────────────────┐ │ │
│ │ │ Nginx :80/443 │ │ │
│ │ └───────┬────────┘ │ │
│ │ │ │ │
│ │ ┌───────▼────────┐ │ │
│ │ │ FastAPI :8000 │ │ │
│ │ └───────┬────────┘ │ │
│ │ │ │ │
│ │ ┌───────▼────────┐ │ │
│ │ │ PostgreSQL │ │ │
│ │ └───────┬────────┘ │ │
│ │ │ │ │
│ │ ┌───────▼────────┐ │ │
│ │ │ Redis │ │ │
│ │ └───────┬────────┘ │ │
│ └──────────┴───────────┘ │
│ │ │
│ ┌────────▼──────────────┐ │
│ │ 现有 AI 服务(外部依赖)│ │
│ └───────────────────────┘ │
└──────────────────────────────────────────────────────────┘
```
---
## 6. 统一入口设计
### 6.1 概述
统一入口(Portal)是系统的认证入口,按角色分发到对应端。
**核心功能**
- 企微 OAuth2 静默授权(用户端)
- 账号密码+OTP 认证(坐席/管理端)
- 角色检测与路由选择
- 统一 Token 管理
### 6.2 登录方式(v1.5 变更)
> **更新日期**: 2026-07-04 | **核心变更**: 坐席/管理端浏览器直接打开,**无需经过企微工作台**
| 端 | 访问方式 | 登录方式 | 说明 |
|----|----------|----------|------|
| **用户端 (H5)** | 企微工作台 → 应用内嵌打开 | OAuth2 静默授权 | 强制内嵌,保证安全、入口统一、用户粘性 |
| **坐席端** | 浏览器直接打开 | 账号密码+OTP | **无需经过企微**,灵活办公,支持多设备 |
| **管理后台** | 浏览器直接打开 | 账号密码+OTP | **无需经过企微**,安全可控 |
### 6.3 登录流程
```
用户端 (H5) 坐席端 / 管理后台
│ │
▼ ▼
企微工作台打开 浏览器直接访问
│ │
▼ ▼
OAuth2 静默授权 账号密码+OTP验证
(用户无感知) │
│ ▼
▼ 登录成功
跳转 /itdesk/ 跳转 /itagent/ 或 /itadmin/
```
### 6.4 角色路由逻辑
```
OAuth2 授权完成(用户端) / 登录成功(坐席/管理端)
查询角色列表: GET /api/portal/roles
├── 仅 user 角色 → 直接跳转 /itdesk/
├── user + agent → 显示选择页(2张卡片)
├── user + admin → 显示选择页(2张卡片)
└── user + agent + admin → 显示选择页(3张卡片)
```
### 6.5 URL 路径规划
| 端 | 路径 | 说明 |
|---|------|------|
| 统一入口 | /itportal/ | 路由选择页 |
| 用户端 | /itdesk/ | 员工提交工单 |
| 坐席端 | /itagent/ | IT坐席处理会话 |
| 管理端 | /itadmin/ | 系统配置 |
| API | /api/ | 后端接口 |
### 6.6 企微环境检测
| 组件 | 说明 |
|------|------|
| **用户端检测** | `navigator.userAgent.includes('wxwork')`,非企微跳转拦截页 |
| **坐席/管理端** | 无需检测,浏览器直接访问 |
### 6.7 OTP 双因素认证
| 组件 | 说明 |
|------|------|
| **OTP 绑定** | 首次登录引导绑定,支持 TOTPGoogle Authenticator/微信扫码) |
| **OTP API** | `/api/agents/otp-bind``/api/agents/otp-verify` |
| **验证场景** | 坐席/管理员登录时需 OTP 验证 |
| **绑定入口** | 坐席端 TopBar 下拉菜单"OTP二次验证"选项 |
### 6.8 测试账号
| 角色 | 用户名 | 初始密码 | OTP | 说明 |
|------|--------|----------|-----|------|
| 坐席 | `sxn` | `admin123` | 需绑定 | IT 支持组组长 |
| 管理 | `sxn` | `admin123` | 需绑定 | 同上,具有 admin 权限 |
> **注意**:生产环境需修改默认密码;坐席/管理员需先绑定OTP才能登录
---
## 7. 模块架构
### 7.1 管理后台模块
**技术栈**Vue 3 + TypeScript + Element Plus + Tailwind CSS + Pinia
**核心功能**
- 运营仪表盘
- 功能开关配置
- 坐席管理(角色/技能标签)
- 外部系统集成配置
- 快速回复审核
- 会话监控
- 知识图谱管理
### 7.2 坐席工作台模块
**技术栈**Vue 3 + TypeScript + Element Plus + Pinia
**核心功能**
- 会话列表(排队/进行中/已解决)
- 实时聊天
- 快速回复
- AI Wingman 右侧栏
- 消息标记(VIP/招手/情绪)
### 7.3 H5 用户端模块
**技术栈**Vue 3 + Vant 4 + TypeScript
**核心功能**
- 消息发送/接收
- 排查步骤引导
- 会话状态查看
- 满意度评价
---
## 8. AI Wingman 设计
详见 [02-技术方案/技术方案-Wingman设计.md](./02-技术方案/技术方案-Wingman设计.md)
### 8.1 什么是 Wingman
Wingman 是坐席工作台的 AI 辅助系统:
- **草稿回复**:坐席打字 → AI 实时生成 3 条草稿
- **自动摘要**:会话结束 → AI 200 字摘要
- **知识推荐**:对话中识别关键字 → 推 FAQ
- **排查步骤**:员工描述问题 → AI 给 step-by-step
---
## 9. 外部系统集成
### 9.1 系统角色与优先级
| 系统 | 角色 | 核心能力 | 认证方式 |
|------|------|---------|---------|
| 联软LV7000 | 主映射源(P0) | 终端查询、硬件详情、在线状态 | IP白名单+账号密码 |
| 火绒企业版 | 安全源(P0) | 终端列表、漏洞/病毒事件 | HMAC-SHA1 AccessKey |
| aTrust | VPN源(P1) | 在线用户+VPN IP、终端查询 | HMAC-SHA256签名 |
| 北森eHR | 辅助静态数据(P2) | 员工基础信息、任职信息 | OAuth2.0 |
| 企微审批 | 待办同步(P1) | 审批工单同步到坐席待办 | 企微审批应用API |
### 9.2 企微审批工单同步
> **新增日期**: 2026-07-04
| 项目 | 说明 |
|------|------|
| **功能** | 将企微审批工单同步到坐席待办事项面板 |
| **企微API** | `GET /cgi-bin/oa/approvallist` |
| **同步频率** | 每5分钟定时拉取,或 Webhook 实时推送 |
| **数据映射** | 审批标题 → TodoItem.title / 审批状态 → TodoItem.status |
| **依赖** | 需企微管理后台创建审批应用并授权 API |
### 9.3 WebSocket 实时通讯技术方案
> **新增日期**: 2026-07-05 | **状态**: 已实现
#### 9.3.1 技术选型
| 方案 | 优点 | 缺点 | 结论 |
|------|------|------|------|
| WebSocket | 双向实时、低延迟 | 需心跳维护 | ✅ 推荐 |
| SSE | 简单单向 | 仅服务器→客户端 | ❌ 不适合 |
| 轮询 | 实现简单 | 延迟高、资源浪费 | ❌ 不推荐 |
#### 9.3.2 消息类型
| 消息类型 | 方向 | 说明 |
|----------|------|------|
| `message_new` | Server→Client | 新消息推送 |
| `message_recall` | Server→Client | 消息撤回 |
| `typing` | Bidirectional | 对方正在输入 |
| `presence` | Bidirectional | 在线状态 |
| `ping/pong` | Bidirectional | 心跳保活 |
#### 9.3.3 心跳机制
- 客户端每 30 秒发送一次 ping
- 服务端 60 秒内未收到 ping 断开连接
#### 9.3.4 断线重连
- 前端 WebSocket 断开后自动重连
- 最大重连次数: 5
- 重连间隔: 2s, 4s, 8s, 16s, 32s
#### 9.3.5 降级策略
WebSocket 连接失败或断开时,自动降级为轮询(每3-5秒)。
---
## 10. 安全设计
### 10.1 认证安全
| 安全措施 | 说明 |
|----------|------|
| OAuth2 静默授权 | scope=snsapi_base,用户无感知(用户端) |
| 账号密码+OTP | 坐席/管理端认证方式 |
| state 参数防 CSRF | 随机 state,回调时验证 |
| Token 密码学安全 | secrets.token_urlsafe(32) |
| Token TTL 8小时 | Redis 自动过期 |
| redirect_uri 白名单 | 生产环境仅允许正式域名 |
| 企微 UA 检测 | 用户端非企微环境跳转拦截页 |
| OTP 双因素认证 | 坐席/管理员登录需 OTP 验证码 |
### 10.2 角色安全
| 安全措施 | 说明 |
|----------|------|
| 角色最小权限 | 默认仅 user 角色 |
| 角色来源追溯 | user_roles 表记录 source 和 assigned_by |
| 管理端 IP 白名单 | 仅内网/VPN 可访问 |
### 10.3 OTP 双因素认证技术方案
> **新增日期**: 2026-07-05 | **状态**: 规划中
#### 10.3.1 技术选型
| 方案 | 优点 | 缺点 | 结论 |
|------|------|------|------|
| TOTP (Google Authenticator) | 开源成熟无需服务器 | 需手动绑定 | ✅ 推荐 |
| 短信OTP | 用户无需安装App | 有成本,有延迟 | ❌ 不推荐 |
| 邮箱OTP | 无需安装App | 有延迟,不实时 | ❌ 不推荐 |
#### 10.3.2 认证流程
```
用户输入账号密码
验证账号密码成功
返回要求OTP验证
用户输入OTP验证码
验证OTP → 返回结果
```
#### 10.3.3 绑定流程
```
用户首次登录 → 系统检测未绑定OTP → 显示绑定页面 → 用户扫描二维码 → 输入验证码确认 → 绑定成功
```
#### 10.3.4 API 设计
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/api/auth/otp-bind` | 绑定OTP |
| POST | `/api/auth/otp-verify` | 验证OTP |
| POST | `/api/auth/otp-unbind` | 解绑OTP(管理员) |
| GET | `/api/auth/otp-status` | 查询OTP绑定状态 |
#### 10.3.5 数据库设计
```sql
-- 扩展 agents 表新增字段
ALTER TABLE agents ADD COLUMN otp_secret VARCHAR(32) DEFAULT NULL;
ALTER TABLE agents ADD COLUMN otp_bound BOOLEAN DEFAULT FALSE;
ALTER TABLE agents ADD COLUMN otp_bound_at TIMESTAMP DEFAULT NULL;
```
---
## 11. 复杂对话场景设计
### 11.1 设计理念:TeliChat 三重约束
| 约束 | 作用 | 实现方式 |
|------|------|---------|
| 拓扑结构限制 | 限制对话可以走到哪里 | Neo4j DAG 边定义 |
| 信息状态约束 | 决定当前已经知道什么 | 信息项组合状态 |
| Python 代码约束 | 负责真正的业务判断 | FastAPI 业务逻辑 |
### 11.2 全局意图类型
| 意图 | 用户表达示例 | 处理策略 |
|------|-------------|---------|
| SKIP | "这个问题先不管了" | 跳过当前节点 |
| INSERT | "对了,我的打印机也有问题" | 插入新任务到队列 |
| RESUME | "还是说回刚才那个网络问题" | 恢复之前话题 |
| ESCALATE | "叫个人工来" | 转接坐席 |
---
## 12. 知识图谱数据模型设计
详见 [../02-产品需求/小组任务书/D-T19-知识图谱数据模型设计.md](../02-产品需求/小组任务书/D-T19-知识图谱数据模型设计.md)
### 12.1 实体类型
| 实体类型 | 说明 | 示例 |
|----------|------|------|
| Domain | 业务域 | 网络域、安全域、设备域 |
| Issue | 问题 | VPN连不上、打印机故障 |
| Solution | 解决方案 | 密码重置、重启服务 |
| FAQ | 常见问题 | 如何连接VPN |
### 12.2 关系类型
| 关系类型 | 方向 | 含义 | 核心属性 |
|----------|------|------|----------|
| BELONGS_TO | Issue→Domain | 属于 | weight |
| RECOMMENDS | Issue→Solution | 推荐 | priority, confidence |
| CAN_RESOLVE | Solution→Issue | 解决 | success_rate |
---
## 13. 数据库设计
### 13.1 核心表结构
| 表名 | 说明 |
|------|------|
| agents | 坐席信息 |
| conversations | 会话表 |
| messages | 消息表 |
| quick_reply_templates | 快速回复模板 |
| system_configs | 系统配置 |
| roles | 角色表 |
| user_roles | 用户角色关联 |
---
## 14. API设计规范
### 14.1 响应格式
```json
// 成功
{"code": 0, "data": {...}, "message": "success"}
// 失败
{"code": 1001, "data": null, "message": "参数错误"}
```
### 14.2 认证方式
| 端 | localStorage 键 | 说明 |
|----|-----------------|------|
| 坐席端 | `agent_token` | 坐席工作台 |
| 管理后台 | `admin_token` | 管理后台 |
| 统一入口 | `user_token` | Portal |
---
## 15. 阶段5 自动化闭环
> **新增日期**: 2026-07-05 | **架构师**: 高见远 (Gao) | **状态**: 设计完成(待实现)
> **范围**: 在阶段1-4 基础上新增自动化闭环能力——意图识别与场景路由、员工↔终端映射、知识库自助应答、自动化处置执行(双模式)、审批与审计、转人工兜底、自动关单、管理后台配置、实时进度推送、指标看板。
> **技术栈**: FastAPI + SQLAlchemy + PostgreSQL + Redis / Vue3Element Plus / Vant4 / Element+Tailwind)三端。
### 15.1 实现方案与框架选型
#### 15.1.1 核心难点
| 难点 | 说明 | 对策 |
|------|------|------|
| 多外部系统集成 | 火绒(HMAC-SHA1)/联软(三层认证)/Dify/RAGFlow/北森eHR 认证与协议各异 | 抽象 `BaseClient` 统一超时/重试/审计;`ActionRegistry` 按动作类型注册适配器 |
| 风险分级执行 | 只读/低风险自动执行,写/高危需审批或员工二次确认 | 执行引擎 `Executor` 双模式(plan-only / real-exec),`risk_level` 驱动分支 |
| 员工↔终端映射 | 多源、需优先级与兜底 | `MappingResolver`:联软(主) > aTrust(VPN辅,后置) > eHR(静态),结果缓存 `MappingCache` |
| 实时进度 | H5/坐席需秒级看到处置进展 | 复用阶段2 WebSocket,新增 `automation.*` 事件族,由 `ProgressPublisher` 统一发布 |
| 自动关单 | 成功+员工已解决 或 静默10min 无异议 | Redis TTL + 后台任务触发,复用阶段2满意度 |
#### 15.1.2 选型(沿用现有栈,仅新增必要依赖)
- **后端**FastAPI 路由 + Pydantic Schema + SQLAlchemy 模型 + Alembic 迁移;异步 HTTP 用 `httpx`(若未引入);重试用 `tenacity`
- **外部客户端**:自研 `app/core/clients/*`,统一封装 HMAC 签名与三层认证,**不引入重型 SDK**。
- **前端三端**:沿用 Vue3 组合式 API + Pinia + 现有 axios/WebSocket 封装,**不新增 npm 包**。
- **可视化编排引擎**:本期用管理后台**结构化简易配置**(场景开关+触发条件+动作+审批策略),编排引擎列 P2。
- **aTrust VPN 自动化**:密钥未到,列 P2-04 后置,不影响首期。
#### 15.1.3 架构分层
```
[三端前端] ──HTTP/WS──> [FastAPI /itportal/automation]
┌───────────────┼───────────────────────┐
[api/automation] [services/automation] [core/clients]
(路由+WS端点) (会话/意图/映射/执行/ (火绒/联软/Dify/
审批/进度/回滚/异常) RAGFlow/eHR)
[models/automation] ──SQLAlchemy──> PostgreSQL
[Redis] 会话态/映射缓存/静默TTL
```
### 15.2 文件列表及相对路径(标注 新增/修改 + 职责)
#### 15.2.1 后端 `backend/`
| 路径 | 状态 | 职责 |
|------|------|------|
| `app/core/config.py` | 修改 | 新增自动化配置键(Dify/RAGFlow/火绒/联软/eHR 基址、密钥占位、阈值默认) |
| `app/core/constants.py` | 修改 | 新增 WS 事件名 `AUTOMATION_*`、错误码段 `AUT-*` |
| `app/core/clients/__init__.py` | 新增 | 客户端包导出 |
| `app/core/clients/base.py` | 新增 | 带超时/重试/审计的异步 `BaseClient` |
| `app/core/clients/huorong.py` | 新增 | 火绒 HMAC-SHA1`_leak` / `_virus_events` / 病毒隔离(写) |
| `app/core/clients/lianruan.py` | 新增 | 联软 LV7000 三层认证,`strusername` 员工↔终端映射(读) |
| `app/core/clients/dify.py` | 新增 | Dify 意图识别 / AI 编排 |
| `app/core/clients/ragflow.py` | 新增 | RAGFlow 知识库检索(`:9380`) |
| `app/core/clients/ehr.py` | 新增 | 北森 eHR 静态映射兜底 |
| `app/models/automation.py` | 新增 | AutoSession / AutoAction / ApprovalTicket / ScenarioConfig / ActionLog / RuleVersion / MappingCache |
| `migrations/versions/xxxx_automation.py` | 新增 | Alembic 迁移建表 |
| `app/schemas/automation.py` | 新增 | 请求/响应 Pydantic Schema |
| `app/dependencies/automation.py` | 新增 | 场景配置加载、WS 连接鉴权、审批权限(OTP仅admin配置) |
| `app/services/automation/__init__.py` | 新增 | 服务包导出 |
| `app/services/automation/session_manager.py` | 新增 | 会话生命周期(创建/状态机/关单判定) |
| `app/services/automation/intent_router.py` | 新增 | 意图识别 + 场景路由(Dify+RAGFlow |
| `app/services/automation/mapping_resolver.py` | 新增 | 员工↔终端映射解析(联软>eHR) |
| `app/services/automation/executor.py` | 新增 | 处置执行引擎(双模式、风险分级、动作编排) |
| `app/services/automation/action_registry.py` | 新增 | 动作适配器注册(火绒/联软;aTrust 占位) |
| `app/services/automation/approval.py` | 新增 | 审批单创建/流转/审计 |
| `app/services/automation/progress_publisher.py` | 新增 | WS 进度统一发布 |
| `app/services/automation/rollback.py` | 新增(P1) | 处置失败回滚/补偿 |
| `app/services/automation/exception_handler.py` | 新增(P1) | 异常自动转人工 + 通知 |
| `app/api/automation.py` | 新增 | REST 路由 + WS 端点 |
| `app/main.py` | 修改 | 注册 `automation` router 与 WS 路由 |
#### 15.2.2 前端 H5(员工端)`frontend-h5/src/`
| 路径 | 状态 | 职责 |
|------|------|------|
| `api/automation.js` | 新增 | 自动化会话/确认/已解决接口 |
| `views/AutomationProgress.vue` | 新增 | 自动化进度页(WS 实时进展) |
| `components/ActionConfirmDialog.vue` | 新增(P1) | 员工侧高危动作二次确认 |
| `components/ResolveFeedback.vue` | 新增 | 「已解决」反馈 / 静默关单提示 |
| `store/automation.js` | 新增 | Pinia 自动化状态 |
#### 15.2.3 前端 坐席端 `frontend-agent/src/`
| 路径 | 状态 | 职责 |
|------|------|------|
| `api/automation.js` | 新增 | 会话/审批/接管接口 |
| `views/automation/SessionWorkbench.vue` | 新增 | 自动化会话工作台 |
| `components/automation/ActionApprovalCard.vue` | 新增 | 坐席审批卡片 |
| `components/automation/TakeoverPanel.vue` | 新增 | 转人工/接管面板 |
| `store/automation.js` | 新增 | Pinia 状态 |
#### 15.2.4 前端 管理后台 `frontend-admin/src/`
| 路径 | 状态 | 职责 |
|------|------|------|
| `api/automation.js` | 新增 | 配置/版本/指标接口 |
| `views/automation/ScenarioConfig.vue` | 新增 | 场景开关+触发条件+动作+审批策略 |
| `views/automation/RuleVersion.vue` | 新增(P1) | 规则版本管理/灰度 |
| `views/dashboard/AutoMetrics.vue` | 新增 | 指标看板(扩展阶段4) |
| `store/automation.js` | 新增 | Pinia 状态 |
### 15.3 数据结构和接口(Mermaid 类图)
```mermaid
classDiagram
class ScenarioConfig {
+int id
+str name
+bool enabled
+dict trigger_conditions
+dict actions
+dict approval_policy
+int version
+int gray_pct
+datetime created_at
+datetime updated_at
+int created_by
}
class AutoSession {
+int id
+int ticket_id
+str employee_id
+str intent
+float intent_confidence
+int scenario_config_id
+str status
+str mode
+str current_step
+bool takeover_flag
+bool auto_close_flag
+datetime created_at
+datetime updated_at
}
class AutoAction {
+int id
+int session_id
+str type
+str target
+dict params
+str mode
+str risk_level
+str status
+bool is_approved
+dict result
+str error_msg
+bool rolled_back
+datetime executed_at
}
class ApprovalTicket {
+int id
+int action_id
+int session_id
+int approver_id
+str employee_id
+str type
+str status
+datetime requested_at
+datetime resolved_at
+str resolution
}
class ActionLog {
+int id
+int session_id
+int action_id
+str actor
+str event
+dict detail
+datetime created_at
}
class RuleVersion {
+int id
+int scenario_config_id
+int version
+dict snapshot
+int gray_pct
+str status
+datetime created_at
}
class MappingCache {
+int id
+str employee_id
+str terminal_id
+str source
+float confidence
+datetime updated_at
}
ScenarioConfig "1" --> "0..*" RuleVersion : has versions
ScenarioConfig "1" --> "0..*" AutoSession : routes
AutoSession "1" --> "0..*" AutoAction : produces
AutoSession "1" --> "0..*" ActionLog : logs
AutoAction "1" --> "0..1" ApprovalTicket : requires
MappingCache "1" --> "0..*" AutoSession : used by
```
#### 15.3.1 核心 API 端点(前缀 `/itportal/automation`
| 方法 | 路径 | 说明 | 角色 |
|------|------|------|------|
| POST | `/sessions/start` | 员工提交意图,创建自动化会话 | employee |
| GET | `/sessions/{id}` | 会话状态/进度快照 | employee/agent |
| POST | `/sessions/{id}/takeover` | 转人工/接管(命中阈值或主动) | agent |
| GET | `/actions/{id}` | 动作状态 | employee/agent |
| POST | `/actions/{id}/approve` | 坐席审批(写/高危) | agent |
| POST | `/actions/{id}/confirm` | 员工二次确认(P1 高危) | employee |
| POST | `/sessions/{id}/resolved` | 员工标记已解决(触发关单) | employee |
| GET | `/configs` | 场景配置列表 | admin(OTP) |
| POST | `/configs` | 新建场景配置 | admin(OTP) |
| PUT | `/configs/{id}` | 修改场景配置 | admin(OTP) |
| POST | `/configs/{id}/version` | 版本快照/灰度发布(P1) | admin(OTP) |
| GET | `/metrics` | 自动化指标(扩展阶段4看板) | admin |
| WS | `/ws/{session_id}` | 实时进度推送 | employee/agent |
### 15.4 程序调用流程(Mermaid 时序图,全链路 + WS 推送)
```mermaid
sequenceDiagram
participant H5 as 员工H5
participant WS as WebSocket网关
participant API as Automation API
participant IR as IntentRouter(Dify+RAGFlow)
participant MR as MappingResolver(联软/eHR)
participant EX as Executor(执行引擎)
participant AP as Approval(审批)
participant PP as ProgressPublisher
participant T2 as 阶段2工单/满意度
H5->>API: POST /sessions/start {intent_text, employee_id}
API->>IR: recognize(intent_text)
IR->>IR: Dify意图识别 + RAGFlow检索
IR-->>API: {intent, confidence, knowledge}
API->>MR: resolve(employee_id)
MR->>MR: 联软(主)>eHR(兜底) 映射
MR-->>API: {terminal_id, source}
API->>EX: plan(scenario_config, intent, mapping)
alt 自助应答(密码重置/软件安装指引)
EX-->>API: knowledge answer
API->>PP: publish(progress=answered)
PP-->>WS: automation.progress
WS-->>H5: 展示方案
H5->>API: POST /sessions/{id}/resolved
else 自动处置(病毒隔离/终端定位)
EX->>EX: 生成AutoAction + 风险分级
alt 低风险(仅出方案/读操作)
EX->>EX: 执行 action
EX->>PP: publish(progress=executed)
else 高风险(写操作/高危)
EX->>AP: create ApprovalTicket
AP->>PP: publish(action_required)
alt 坐席审批
PP-->>WS: automation.action_required
WS-->>Agent: 通知
Agent->>API: POST /actions/{id}/approve
else 员工二次确认(P1)
PP-->>WS: automation.action_required
WS-->>H5: 弹窗
H5->>API: POST /actions/{id}/confirm
end
AP->>EX: execute approved action
end
EX->>PP: publish(progress=result)
end
PP-->>WS: automation.progress / resolved
WS-->>H5: 进度/结果
API->>API: 关单判定(成功+已解决 或 静默10min)
API->>T2: 复用满意度收集(阶段2)
T2-->>H5: 满意度推送
```
> 阈值转人工(Q3):意图置信度<0.6 / 处置超时60s / 命中高危必转 / 员工主动转 / 连续「未解决」≥2次 → `exception_handler` / `session_manager` 触发 `automation.takeover` 事件并落入坐席队列。
### 15.5 有序任务列表(依赖关系 + 实现顺序,对应 P0/P1,P2 标注后置)
> 任务上限 5 个、每任务≥3 文件、T01 为基础设施;T03/T04/T05 平行依赖 T02,减少线性链。
#### T01 项目基础设施与公共能力(无依赖,P0)
- 源文件:`app/core/config.py`(改)、`app/core/constants.py`(改)、`app/core/clients/{__init__,base,huorong,lianruan,dify,ragflow,ehr}.py`(新)、`app/models/automation.py`(新)、`migrations/versions/xxxx_automation.py`(新)
- 依赖:无 | 优先级:P0
- 交付:配置键、WS 事件/错误码常量、5 个外部客户端封装、7 张表模型与迁移
#### T02 自动化核心服务(依赖 T01P0/P1)
- 源文件:`app/schemas/automation.py`(新)、`app/dependencies/automation.py`(新)、`app/services/automation/{__init__,session_manager,intent_router,mapping_resolver,executor,action_registry,approval,progress_publisher,rollback,exception_handler}.py`(新)
- 依赖:T01 | 优先级:P0rollback/exception_handler 为 P1
- 交付:意图路由、映射解析、双模式执行引擎、审批、进度发布、回滚补偿(P1)、异常转人工(P1)
#### T03 后端 API + 坐席端工作台(依赖 T02,P0)
- 源文件:`app/api/automation.py`(新)、`app/main.py`(改)、`frontend-agent/src/{api/automation.js, views/automation/SessionWorkbench.vue, components/automation/ActionApprovalCard.vue, components/automation/TakeoverPanel.vue, store/automation.js}`(新)
- 依赖:T02 | 优先级:P0
- 交付:REST+WS 端点、坐席审批/接管/工作台
#### T04 H5 员工端交互(依赖 T02P0/P1)
- 源文件:`frontend-h5/src/{api/automation.js, views/AutomationProgress.vue, components/ActionConfirmDialog.vue, components/ResolveFeedback.vue, store/automation.js}`(新)
- 依赖:T02 | 优先级:P0ActionConfirmDialog 二次确认为 P1
- 交付:进度页、员工二次确认(P1)、已解决反馈、静默关单
#### T05 管理后台配置 + 指标看板(依赖 T02,P0/P1
- 源文件:`frontend-admin/src/{api/automation.js, views/automation/ScenarioConfig.vue, views/automation/RuleVersion.vue, views/dashboard/AutoMetrics.vue, store/automation.js}`(新)
- 依赖:T02 | 优先级:P0RuleVersion 灰度为 P1
- 交付:场景开关/触发条件/动作/审批策略配置、规则版本灰度(P1)、指标看板(扩展阶段4)
#### P2 后置任务(本期不排期,预留接口)
- P2-01 可视化工作流编排引擎(替代结构化简易配置)
- P2-02 自学习场景优化
- P2-03 权限申请自动化
- P2-04 aTrust VPN 自动化(密钥到位后;`action_registry` 已留占位)
#### 15.5.1 任务依赖图
```mermaid
graph TD
T01[T01 基础设施与公共能力] --> T02[T02 自动化核心服务]
T02 --> T03[T03 后端API+坐席端]
T02 --> T04[T04 H5员工端交互]
T02 --> T05[T05 管理后台配置+看板]
```
### 15.6 依赖包列表(新增)
**后端 pip**(若尚未引入):
```
- httpx>=0.27.0 # 异步 HTTP 客户端(调外部系统)
- tenacity>=8.2.0 # 重试/退避(外部调用健壮性)
- pydantic>=2.0 # 已有,Schema 校验(确认版本一致)
```
> HMAC 用标准库 `hmac`/`hashlib`Redis/PostgreSQL/SQLAlchemy 阶段1-4 已具备,无需新增。
**前端 npm**:三端复用现有 `axios` + WebSocket 封装 + `vant`/`element-plus`**本期无强制新增包**。
### 15.7 共享知识(跨文件约定)
- **统一响应**`{code, msg, data}`,成功 `code=0`;自动化错误码段 `AUT-001`~`AUT-0xx`(意图识别失败/映射缺失/执行超时/审批拒绝等)。
- **WS 事件名**(前缀 `automation.`):`automation.progress`(进度)、`automation.action_required`(需审批/确认)、`automation.resolved`(已解决/关单)、`automation.takeover`(转人工)、`automation.error`
- **配置键**(前缀 `AUTOMATION_`):`DIFY_BASE_URL`/`DIFY_KEY``RAGFLOW_BASE_URL``HUORONG_*`(HMAC-SHA1)、`LIANRUAN_*`(三层认证)、`EHR_*``AUTOMATION_THRESHOLDS`(置信度0.6/超时60s/未解决≥2)。
- **映射源常量**`MAPPING_SOURCES = ["lianruan", "atrust", "ehr"]`,优先级顺序固定。
- **表/路由命名**:表前缀 `auto_`API 前缀 `/itportal/automation`;服务类后缀 `Service`/函数式模块。
- **日志规范**:结构化日志含 `session_id`/`action_id`/`employee_id`/`event`;所有外部调用出入参落 `ActionLog`(审计可追溯)。
- **风险分级**`risk_level ∈ {read, low, high}``read/low` 默认可自动执行,`high` 必走审批或员工二次确认。
- **OTP 适用范围**:仅 admin 配置类接口(新建/修改/版本)需 OTP 双因素;坐席审批与普通会话不需 OTP。
- **静默关单**`AutoSession` 成功后写 Redis TTL=600s,到期无 `resolved` 异议则自动关单;员工主动 `resolved` 立即关单。
### 15.8 待明确事项(仅技术层面,业务决策已确认)
1. **Dify 返回结构**:意图字段名与置信度字段名需联调确认(影响 `IntentRouter` 解析)。
2. **RAGFlow 检索策略**:结果分页/截断/Top-K 与引用来源展示方式。
3. **火绒写操作细节**:HMAC-SHA1 构造、沙箱环境、病毒隔离接口字段与回执。
4. **联软 LV7000**:三层认证具体字段、超时与并发限制。
5. **AutoSession 与阶段2 工单(Ticket)关系**:建议**弱关联**(session 可独立存在,`ticket_id` 可空;关单时复用阶段2满意度),需确认是否强制绑定。
6. **静默10分钟关单机制**Redis TTL + 后台任务 vs 轮询,确认后台任务调度方式(APScheduler / FastAPI BackgroundTasks / Redis 键空间通知)。
7. **规则灰度(P1)**:按比例灰度还是白名单灰度,发布回滚流程。
8. **审批并发**:同一 `AutoAction` 坐席审批与员工二次确认是否互斥、超时未处理如何降级转人工。
### 15.9 建议文件变更清单(落盘指引)
**文档(合并进已有文件,不新建独立文档)**
| 路径 | 状态 | 落盘建议 | 已有文件 |
|------|------|----------|----------|
| `docs/03-技术架构/00-系统架构设计文档-v1.3.md` | 修改 | 文末新增「阶段5 自动化闭环」章节(即本章) | 是 |
**后端**
| 路径 | 状态 | 落盘建议 | 已有文件 |
|------|------|----------|----------|
| `app/core/config.py` | 修改 | 追加自动化配置键 | 是 |
| `app/core/constants.py` | 修改 | 追加 WS 事件/错误码常量 | 是 |
| `app/core/clients/{__init__,base,huorong,lianruan,dify,ragflow,ehr}.py` | 新增 | 整组新建 | 否 |
| `app/models/automation.py` | 新增 | 整文件新建 | 否 |
| `migrations/versions/xxxx_automation.py` | 新增 | Alembic 生成并落地 | 否 |
| `app/schemas/automation.py` | 新增 | 整文件新建 | 否 |
| `app/dependencies/automation.py` | 新增 | 整文件新建 | 否 |
| `app/services/automation/*.py`(10个) | 新增 | 整组新建 | 否 |
| `app/api/automation.py` | 新增 | 整文件新建 | 否 |
| `app/main.py` | 修改 | 注册 router/WS | 是 |
**前端 H5**
| 路径 | 状态 | 落盘建议 | 已有文件 |
|------|------|----------|----------|
| `frontend-h5/src/api/automation.js` | 新增 | 新建 | 否 |
| `frontend-h5/src/views/AutomationProgress.vue` | 新增 | 新建 | 否 |
| `frontend-h5/src/components/ActionConfirmDialog.vue` | 新增 | 新建 | 否 |
| `frontend-h5/src/components/ResolveFeedback.vue` | 新增 | 新建 | 否 |
| `frontend-h5/src/store/automation.js` | 新增 | 新建 | 否 |
**前端 坐席端**
| 路径 | 状态 | 落盘建议 | 已有文件 |
|------|------|----------|----------|
| `frontend-agent/src/api/automation.js` | 新增 | 新建 | 否 |
| `frontend-agent/src/views/automation/SessionWorkbench.vue` | 新增 | 新建 | 否 |
| `frontend-agent/src/components/automation/ActionApprovalCard.vue` | 新增 | 新建 | 否 |
| `frontend-agent/src/components/automation/TakeoverPanel.vue` | 新增 | 新建 | 否 |
| `frontend-agent/src/store/automation.js` | 新增 | 新建 | 否 |
**前端 管理后台**
| 路径 | 状态 | 落盘建议 | 已有文件 |
|------|------|----------|----------|
| `frontend-admin/src/api/automation.js` | 新增 | 新建 | 否 |
| `frontend-admin/src/views/automation/ScenarioConfig.vue` | 新增 | 新建 | 否 |
| `frontend-admin/src/views/automation/RuleVersion.vue` | 新增 | 新建 | 否 |
| `frontend-admin/src/views/dashboard/AutoMetrics.vue` | 新增 | 新建(扩展阶段4看板) | 否 |
| `frontend-admin/src/store/automation.js` | 新增 | 新建 | 否 |
> 汇总:文档 1 处合并修改(本章);代码新增约 35 个文件(后端 21 + 三前端 14),修改 4 个已有文件(config/constants/main + 设计文档)。代码文件按此清单在后续实现阶段落地。
---
## 附录
### A. 项目阶段规划
| 阶段 | 内容 |
|------|------|
| 阶段一 | 转人工改H5+坐席MVP+邀请+管理后台 |
| 阶段二 | H5全流程+WS+排队+满意度+OAuth2 |
| 阶段三 | AI Wingman+排查流程图+标注+知识图谱 |
| 阶段四 | 迭代闭环+数据看板+知识库 |
| 阶段五 | 自动/辅助审核、开单、结单 |
### B. 部署信息
| 环境 | 域名 | IP |
|------|------|-----|
| 生产 | itsupport.servyou.com.cn | 10.90.5.110 |
| 测试 | itdesk.amanzac.com | NAS |
### C. 技术文档更新日志
| 版本 | 日期 | 修改内容 |
|------|------|---------|
| v1.0 | 2026-07-04 | 整合技术架构文档 |
| v1.1 | 2026-07-04 | 新增知识图谱章节 |
| v1.2 | 2026-07-04 | 新增登录设计章节(用户端强制企微内嵌) |
| v1.3 | 2026-07-04 | 坐席/管理端无需经过企微,浏览器直接登录 |
| v1.4 | 2026-07-04 | 新增企微审批工单同步到待办事项 |
---
> **文档结束** — 本文档为 IT 智能服务台系统架构设计主文档