# 企微智能IT支持服务台 — 系统架构、消息收发、知识库迭代说明

> **版本**: v1.1 | **日期**: 2026-06-02 | **负责人**: 宋献（IT支持组组长）  
> **目标读者**: 运维团队 / 架构团队 / 开发团队

---

## 一、项目概述

### 1.1 背景

公司约 **6000 人**，全国设分子机构，使用企业微信作为内部 IM。当前 IT 服务存在三大痛点：

| 痛点 | 现状 | 影响 |
|------|------|------|
| 员工绕过 AI 直接找人工 | 可通过关键词直通人工坐席，首次后永久记忆 | AI 筛选率极低，人工成本高 |
| AI 转人工需另开窗口 | 跳转到企微"员工服务"模块，与 AI 对话割裂 | 体验差，员工困惑 |
| 无法跨主体共享 | 企微"员工服务"不支持互联企业应用共享 | 跨企业服务不可达 |

### 1.2 核心方案

**自研 IT 服务坐席系统**，替代企微内置的"员工服务"模块：
- 基于企微自建应用消息 API，所有消息由自己的服务器接管
- 分三步渐进式构建：M1 消息接管 → M2 AI 接入 → M3 知识库闭环
- 当前处于 **M1（消息接管 + 极简坐席）开发阶段**

---

## 二、系统架构

### 2.1 部署架构总览

> 详见附件：**系统部署架构图**（图1）

系统采用 **Docker Compose 单体容器化部署**，部署于公司内部独立服务器（预生产环境，与数据平台不同主机。正式环境将迁移到 K8s 集群）：

```
┌────────────────────────────────────────────────────┐
│                     Docker Engine                    │
│                                                      │
│  Nginx (:80/:443) — 反向代理 + HTTPS + 静态文件      │
│       │                                              │
│       ├──→ 前端静态资源 (Vue3)                       │
│       │    ├─ 坐席工作台 (ElementPlus)                │
│       │    └─ 员工 H5 端 (Vant4)                     │
│       │                                              │
│       └──→ FastAPI 后端 (:8000)                      │
│            ├─ 消息路由层                              │
│            ├─ 紧急度评分引擎                          │
│            └─ 会话/消息/坐席 管理                     │
│                 │           │                         │
│                 ▼           ▼                         │
│          PostgreSQL 16    Redis 7                     │
│          (:5432)          (:6379)                     │
│          持久化存储        Token 缓存                  │
└────────────────────────────────────────────────────┘
                      ↕ HTTPS
            ┌─────────────────┐
            │  企微服务器       │
            │  (回调推送 + API) │
            └─────────────────┘
```

### 2.2 技术栈

| 层级 | 技术选型 | 说明 |
|------|---------|------|
| 反向代理 | Nginx | HTTPS 终止、静态文件、路由分发 |
| 后端框架 | FastAPI (Python 3.12) | 异步、自动 OpenAPI 文档、类型安全 |
| 数据库 | PostgreSQL 16 | 会话/消息/坐席/配置 持久化（9 张表） |
| 缓存 | Redis 7 | access_token 缓存（TTL 7200s）、JWT 会话 |
| ORM | SQLAlchemy 2.0 (async) | 异步 session、声明式模型 |
| 数据库迁移 | Alembic | 所有表结构变更通过迁移脚本管理 |
| 坐席前端 | Vue3 + ElementPlus + Pinia | 企业级组件库，三栏工作台布局 |
| 员工 H5 | Vue3 + Vant4 + Pinia | 移动端组件库，企微 WebView 兼容 |
| 加解密 | cryptography (Python) | AES-CBC-256 企微消息加解密 |
| 容器化 | Docker + Docker Compose | 一键启停，5 个容器 |

### 2.3 数据库设计（9 张核心表）

| 表名 | 用途 | 关键字段 |
|------|------|---------|
| `conversations` | 会话主表 | employee_id, status(queued/serving/resolved), urgency_score(1-5), tags(JSON), is_vip |
| `messages` | 消息记录 | sender_type(employee/agent/ai/system), content, msg_type(text/image/file) |
| `agents` | 坐席信息 | user_id, status(online/offline/busy), current_load, max_load |
| `quick_reply_templates` | 快速回复模板 | category, title, content(支持 {变量}), variables(JSON) |
| `system_configs` | 系统配置 | config_key, config_value(关键词/阈值/话术等业务规则) |
| `funny_phrases` | 趣味话术 | scene(6 种场景), content, tone, is_active |
| `approval_links` | 审批流程链接 | category(IT/HR/行政/财务), title, url |
| `software_downloads` | 软件下载入口 | category, name, version, platform, download_url |
| `agent_notes` | 坐席备注 | conversation_id, agent_id, content |

### 2.4 API 接口分组（7 组，约 25 个端点）

| 分组 | 路径前缀 | 核心接口 |
|------|---------|---------|
| 企微回调 | `/api/wecom/callback` | GET 验证 URL、POST 接收消息 |
| 会话管理 | `/api/conversations` | 列表/详情/状态/置顶/代办/接单 |
| 消息管理 | `/api/conversations/{id}/messages` | 消息列表/发送 |
| 坐席管理 | `/api/agents` | 列表/登录/状态切换 |
| 快速回复 | `/api/quick-replies` | CRUD |
| H5 用户端 | `/api/h5/*` | 会话/摇人/审批链接/软件下载/OAuth |
| 系统健康 | `/api/health` | Docker 健康检查 |

统一响应格式：
```json
{ "code": 0, "data": {}, "message": "success" }
```
错误码：0=成功，1000+=通用错误，2000+=企微 API 错误，3000+=业务逻辑错误。

---

## 三、消息收发全链路

### 3.1 流程总览

> 详见附件：**消息收发全链路流程图**（图2）

完整链路（6 步闭环）：

```
员工发消息 → 企微回调解密 → 消息路由 → 评分标记 → 入库 → 坐席轮询 → 坐席回复 → 企微主动推送 → 员工同一窗口收到
```

### 3.2 详细步骤

| 步骤 | 触发方 | 操作 | 技术要点 |
|------|--------|------|---------|
| ① 接收 | 员工 | 在企微应用中发消息 | 企微应用内消息，非微信客服 |
| ② 回调 | 企微服务器 | POST 加密 XML 到 `/api/wecom/callback` | AES-CBC-256 加密，SHA1 签名验证 |
| ③ 解密 | FastAPI | `wecom_crypto.decrypt_message()` | 使用 `cryptography` 库，兼容企微官方加解密 |
| ④ 路由 | MessageRouter | `route_message()` 核心编排 | 按序调用：创建会话→VIP检测→标记检测→评分→入库 |
| ⑤ 评分 | ScoringService | 5 步评分 + 标记：VIP→情绪→举手→需介入→紧急度 | 纯规则引擎（M1 不用 AI） |
| ⑥ 入库 | PostgreSQL | INSERT conversations + messages | 会话和消息原子写入 |
| ⑦ 轮询 | 坐席浏览器 | 每 3 秒 GET `/api/conversations` | 按紧急度 DESC 排序，列表 + 未读标记 |
| ⑧ 回复 | 坐席 | POST 消息内容 → 后端调用企微 API | 同时写 DB 和调用企微 `message/send` 接口 |
| ⑨ 推送 | 企微服务器 | 推送坐席回复到员工 | 同一对话窗口显示，无跳转 |

### 3.3 紧急度评分公式

```
紧急度 = 基础分(关键词) + 情绪加成 + VIP加成 + 重复追问加成
```

- 分值范围：1-5，限幅 `clamp(1, 5)`
- 映射：1=低, 2=中, 3=高, 4=紧急, 5=最高
- 所有关键词和阈值存 `system_configs` 表，支持动态修改无需重启

### 3.4 会话排序规则

```
紧急 → 举手 → 需介入 → 活跃 → AI处理中 → 已结单
（同级按 last_message_at 倒序）
```

### 3.5 坐席端通信

M1 已升级为 **WebSocket 实时推送**（2026-06-03 完成），坐席浏览器通过 `ws://host/ws/{agent_id}` 保持长连接：
- 新消息/会话状态变更通过 WS 实时推送，无需轮询
- 心跳保活：前端每 30 秒发 ping，后端回 pong
- 断线重连：指数退避（1s→2s→4s→...→30s 上限）
- 降级策略：WS 断连时自动降级为 3 秒轮询，WS 重连后自动停止轮询

> 旧方案（已废弃）：M1 原计划使用短轮询（3-5秒），已替换为 WebSocket。

### 3.6 员工端架构双方案（2026-06-03 评估）

> **评估结论**: 企微原生1对1方案技术完全可行，已纳入项目选型文档和运维应急预案

当前 H5 WebView 方案（方案A）与企微原生1对1方案（方案B）为双轨可选架构：

| 维度 | 方案A: H5 WebView | 方案B: 原生1对1 + 外援群聊 |
|------|-------------------|---------------------------|
| 员工入口 | 点击应用 → H5 页面 | 直接在企微与应用1对1聊天 |
| 交互体验 | H5 内输入框 | **原生聊天窗口，体验最优** |
| 前端开发 | 大（Vue3+Vant4） | **零** |
| 跨平台 | **✅ 可挂载钉钉/飞书/浏览器** | ❌ 绑定企微 |
| 跨主体 | **✅ 可（其他认证方式）** | ❌ 仅同一企微主体 |
| OAuth2 | 必须 | **不需要** |
| AI/人工区分 | H5 可做丰富标识 | 需内容前缀区分 |
| 外援协作 | 需额外设计 | **原生群聊(appchat)** |
| 消息存档 | 全量经后端 | **全量经后端（无需会话存档权限）** |
| 切换成本 | — | **核心链路已实现，零代码改动可切换** |

**方案B 交互路径**（关键纠正：不是每次都创建群聊）：
1. **AI 自助**：员工发消息 → 企微回调 → Dify → `/message/send` → 同一窗口
2. **坐席介入**：坐席工作台 → `/message/send` → 同一窗口（员工无感知切换）
3. **外援场景**：坐席发起 → `/appchat/create` → **新群聊窗口**（非常态，低频）

**选型决策**（详见 PRD §3.3）：
- 企微主体内服务 → 方案B 体验更优
- 需跨平台/跨主体 → 方案A 不可替代
- **推荐混合策略**：原生1对1做日常入口，H5 保留为扩展层

**运维应急**（详见 `01-项目总览与部署手册.md` §7.5）：
- H5 不可用时，零代码切换至方案B
- 需外援协作时，按需启用 appchat 群聊

---

## 四、三步演进路径与知识库迭代

### 4.1 三步总览

> 详见附件：**三步演进路径与知识库迭代闭环图**（图3）

| 里程碑 | 周期 | 核心交付 |
|--------|------|---------|
| **M1: 消息接管 + 极简坐席** | 6 周（进行中） | 企微 API 链路验证 · 坐席三栏工作台 · 员工 H5 双栏 |
| **M2: AI 机器人接入** | M1 后 4-6 周 | 千问/Dify/RAGFlow 接入 · AI 前置筛选 · 排队系统 |
| **M3: 知识库闭环迭代** | M2 后 4-6 周 | 坐席标注系统 · 千问自动分析 · 知识库自优化 |

### 4.2 M1 — 当前阶段详情

| 模块 | 内容 | 状态 |
|------|------|------|
| 企微消息对接 | 自建应用回调 + AES 加解密 + token 管理 | ✅ 代码完成 |
| 消息路由 | 所有消息进路由层，新会话→坐席队列 | ✅ 代码完成 |
| 紧急度评分 | 5 步评分引擎（VIP/情绪/举手/需介入/紧急度） | ✅ 代码完成 |
| 坐席工作台 | Vue3 三栏布局（会话列表/对话区/AI助手面板） | ✅ 代码完成 |
| 员工 H5 | Vue3+Vant4 双栏布局（对话区/助手面板+摇人按钮） | ✅ 代码完成 |
| 测试用例 | 116 条 pytest 全部通过 | ✅ 完成 |
| 环境搭建 | Docker Compose + PostgreSQL + Redis | 🔧 配置中 |

M1 **不接入 AI**——先验证企微基础链路（消息收发、会话管理、坐席工作台）完整可用。

### 4.3 M2 — AI 接入计划

核心改动：**只改路由层逻辑**，其余不动。

```
M1: 新会话 → 坐席队列
M2: 新会话 → AI 先回答 → AI判断/用户触发 → 坐席队列
```

新增能力：
- 千问（通义千问）作为对话模型
- RAGFlow 作为知识库语义检索引擎
- Dify 作为 AI 应用编排平台
- 转人工触发：关键词 / AI 连续 2 轮追问 / AI 调用超时 3 秒
- AI 回复末尾自动追加 "以上为 AI 自动回复，如需人工帮助请回复'转人工'"
- 排队系统：等待人数、预计时间

目标：AI 首答率 ≥ 80%

### 4.4 M3 — 知识库迭代闭环（核心创新）

这是整个系统从"工具"进化为"智能平台"的关键一步。

```
┌────────────────────────────────────────────────────────┐
│              知识库迭代正向循环                           │
│                                                          │
│  坐席日常标注 ──→ 千问分析 ──→ 自动处理 ──→ 知识库增强    │
│  (正确/错误)      (缺文档/过时)   │                        │
│       ↑                           │                        │
│       └──────── 持续循环 ─────────┘                       │
└────────────────────────────────────────────────────────┘
```

**标注融入日常工作流**，不另开标注页面：
- 对话区每条 AI 回复旁有 👍 / 👎 按钮
- 坐席在正常服务过程中顺手标注

**千问自动分析**两类问题：
| 分析结果 | 自动处理 |
|---------|---------|
| **缺文档**：知识库没有覆盖此问题 | 千问生成标准 FAQ → 推送 RAGFlow |
| **信息过时**：知识库有文档但内容不对 | 标记原文档需更新 → 通知管理员审核 |

### 4.5 并行协作模式（设计理念）

传统"串行排队"改为**"并行协作"**：

| 角色 | 工作方式 |
|------|---------|
| AI | 全程在线，所有对话可见 |
| 坐席 | 随时介入，AI 始终在旁辅助 |
| 员工 | 同一窗口，AI 和人工无缝切换 |

### 4.6 AI Wingman — 坐席端智能辅助（2026-06-04 新增）

> **设计理念**：AI不仅服务员工，更要解放坐席——从"坐席=打字员"升级为"坐席=审核员+专家"

**三层渐进式架构**：

| 层 | 目标 | 核心功能 | 行业验证 | 实施时间 |
|----|------|---------|---------|---------|
| 效率层 | 消灭重复劳动 | AI草稿回复 + 自动摘要 + 自动标签 | 打字量 -80%，填单 1分钟→10秒 | Phase 1（已确认） |
| 认知层 | 降低认知负荷 | 知识推荐 + SOP导航 + 相似工单 + 客户画像 | 新人上手 -50% | Phase 2 |
| 情感层 | 减少情绪消耗 | 情绪识别 + 安抚话术 + 语气润色 + 疲劳检测 | 情绪耗竭 -45% | Phase 3 |

**Phase 1 双区布局**（已确认实现方案）：

| 区域 | 位置 | 功能 |
|------|------|------|
| 内嵌区 | 对话流中（每条员工消息下方） | AI草稿回复 — [采纳]/[编辑]/[忽略] 三选一 |
| 侧栏区 | 右侧 AI 助手面板 | 会话自动摘要、自动标签、知识推荐、快捷回复库 |

**底层实现**：扩展现有 Dify，新增坐席端 Wingman Agent：
- Agent 1（已有）：员工端 AI，直接回答员工问题
- Agent 2（新增）：坐席端 Wingman，辅助坐席生成草稿/摘要/知识推荐
- 两个 Agent 共用知识库，但 system prompt 和上下文不同

**为什么这样做**：
1. 坐席每天大量重复回复（密码重置、VPN指引等），AI草稿让坐席从"打字员"变"审核员"
2. 结单文书消耗 70% 非服务时间，自动摘要压缩到 10%
3. 员工情绪会传染坐席，情绪预警+安抚话术帮助保持专业冷静
4. 参考：NiCE Copilot、Helpshift AI Copilot、天润融通、循环智能等产品验证

---

## 五、运维相关信息

### 5.1 资源配置需求

| 资源 | 最低配置 | 建议配置 |
|------|---------|---------|
| 服务器 | 4 核 / 8 GB / 100 GB SSD | Docker Engine 环境 |
| 公网 HTTPS 域名 | 1 个 | 用于企微回调 URL |
| 企微自建应用 | 1 个（已创建） | CorpID/AgentID/Secret/Token/EncodingAESKey |

> **待办**：企微回调 URL 需要公司服务器+公网 HTTPS 域名，目前暂缓，先在本机测试环境完成其他部分。

### 5.2 Docker Compose 服务清单

| 服务 | 镜像 | 端口 | 健康检查 |
|------|------|------|---------|
| postgres | postgres:16 | 5432 | pg_isready |
| redis | redis:7 | 6379 | redis-cli ping |
| backend | 自构建 Dockerfile | 8000 | /api/health |
| frontend-agent | 自构建 + Nginx 静态 | 80/443 | — |
| frontend-h5 | 同 Nginx 容器 | — | — |

### 5.3 关键配置项（.env）

```env
# 企微
WECOM_CORP_ID=ww...
WECOM_AGENT_ID=1000002
WECOM_SECRET=...
WECOM_TOKEN=...         # 回调验证 Token
WECOM_ENCODING_AES_KEY=...  # 43 位随机字符串

# 数据库
DATABASE_URL=postgresql://user:pass@postgres:5432/wecom_it_desk

# Redis
REDIS_URL=redis://redis:6379/0

# 服务
BACKEND_PORT=8000
CORS_ORIGINS=http://localhost:5173
```

### 5.4 启动命令

```bash
# 一键启动所有服务
docker compose up -d

# 数据库迁移
docker compose exec backend alembic upgrade head

# 查看日志
docker compose logs -f backend

# 停止
docker compose down
```

---

## 六、当前进展与待办

### 6.1 当前进度

| 模块 | 状态 | 备注 |
|------|------|------|
| PRD | ✅ 完成 | 31 项需求，7 个用户故事 |
| 架构设计 | ✅ 完成 | 9 张表 DDL，7 组 API，4 个时序图 |
| 后端代码 | ✅ 完成 | 45 个文件，7 个服务层 + 7 个 API 路由 |
| 坐席前端 | ✅ 完成 | 25 个文件，Vue3+ElementPlus 三栏布局 |
| 员工 H5 | ✅ 完成 | 12 个文件，Vue3+Vant4 双栏+摇人 |
| 测试用例 | ✅ 完成 | 116 条 pytest 全部通过 |
| 环境搭建 | 🔧 进行中 | PostgreSQL + Redis 安装配置中 |
| 企微回调 | ⏳ 待办 | 需要公司服务器 + 公网 HTTPS 域名 |

### 6.2 需要团队协助的事项

| # | 事项 | 需要谁 | 紧急度 |
|---|------|--------|--------|
| 1 | **服务器资源**：分配一台 Linux 服务器用于 Docker 部署 | 运维 | 中 |
| 2 | **公网域名**：一个 HTTPS 域名用于企微回调 URL | 运维/架构 | 中（M1 联调前） |
| 3 | **SSL 证书**：通配符证书或 Let's Encrypt | 运维 | 中（同上） |
| 4 | **企微通讯录权限**：确认 API 权限（VIP 功能依赖） | 运维/企微管理员 | 低（M1 可暂用 mock） |
| 5 | **千问/Dify/RAGFlow 环境**（M2 阶段） | 架构/开发 | 低（M2 前准备） |

### 6.3 下一步计划

1. **本周**：完成本机 PostgreSQL + Redis 安装，后端本地启动验证
2. **下周**：坐席前端启动联调，Swagger 接口测试
3. **服务器就绪后**：Docker Compose 部署 + 企微回调配置 + 完整链路联调

---

## 七、现有系统复用评估

> 基于交接文档 + db_query_project_v8 源码分析，评估现有企微AI客服系统可复用的服务能力和资源

### 7.1 现有系统全景

```
┌──────────────────────────────────────────────────────────────┐
│                     员工（企微App）                            │
│                        │ 发消息/收回复                          │
│                        ▼                                      │
│              ┌─────────────────┐                               │
│              │  企业微信自建应用  │                               │
│              └────────┬────────┘                               │
│                       │ 回调/主动消息                             │
│                       ▼                                      │
│              ┌─────────────────┐    ┌──────────────────┐       │
│              │ B端生产智能体     │───▶│ dify2openai 桥接  │       │
│              │ agent.dc.servyou │    │ yw-dify.dc       │       │
│              └────────┬────────┘    └────────┬─────────┘       │
│                       │                      │                 │
│                       ▼                      ▼                 │
│              ┌─────────────────┐    ┌──────────────────┐       │
│              │   Dify Workflow  │    │  RAGFlow 知识库   │       │
│              │  yw-dify.dc      │    │  10.80.0.85:8080 │       │
│              └─────────────────┘    └──────────────────┘       │
│                       │                      │                 │
│                       ▼                      ▼                 │
│              ┌─────────────────┐    ┌──────────────────┐       │
│              │  Qwen3-30B      │    │  bge-m3 向量模型  │       │
│              │  10.80.0.49     │    │                  │       │
│              └─────────────────┘    └──────────────────┘       │
│                                                              │
│              ┌──────────────────────────────────────────┐      │
│              │     智能IT数据平台 (Django 3.2)            │      │
│              │     it-dataquery.dc.servyou-it.com        │      │
│              │     10.80.0.86                             │      │
│              │  ┌────────────┬────────────┬───────────┐  │      │
│              │  │ 数据查询统计 │ 人工介入标注 │ 人工录入  │  │      │
│              │  └────────────┴────────────┴───────────┘  │      │
│              │  DB: dify(只读) + intervention_db(读写)     │      │
│              └──────────────────────────────────────────┘      │
└──────────────────────────────────────────────────────────────┘
```

### 7.2 可复用资源清单

#### 🔴 核心复用（直接影响新系统架构）

| # | 资源 | 现有位置/信息 | 复用方式 | 新系统对应 |
|---|------|-------------|---------|-----------|
| 1 | **Dify Workflow** | `yw-dify.dc.servyou-it.com/apps` | 直接复用，M2阶段接入AI回复 | 坐席助手AI面板 + 自动回复 |
| 2 | **dify2openai 桥接** | `yw-dify.dc/dify2openai/v1/chat/completions` | 直接复用API | 后端调用AI的入口 |
| 3 | **RAGFlow 知识库** | `10.80.0.85:8080` | 直接复用，M3阶段混合标注迭代 | 知识库管理 + 标注闭环 |
| 4 | **Qwen3-30B 大模型** | `10.80.0.49:5000/api/llm/servyou/v1` | 直接复用 | AI对话底层模型 |
| 5 | **bge-m3 向量模型** | RAGFlow 内置 | 直接复用 | 知识库检索向量化 |
| 6 | **Dify 数据库（只读）** | `10.80.128.40:5432` DB=dify User=difyro | 读取messages表获取AI对话记录 | 历史会话数据迁移 + 统计 |
| 7 | **企微自建应用** | 已创建，有CorpID/AgentID/Secret | 直接复用应用凭证 | 消息收发的企微入口 |

#### 🟡 业务逻辑复用（需适配改造）

| # | 现有能力 | 现有实现 | 适配到新系统 | 改造量 |
|---|---------|---------|-------------|-------|
| 8 | **会话定义** | 15分钟无交互=一个会话结束 | 改为新系统会话状态机（queued→serving→resolved） | 中 |
| 9 | **自助解决判定** | 15分钟内未转人工 | 复用判定逻辑，改为新系统统计口径 | 小 |
| 10 | **知识库命中判定** | 回答含"您的问题可能不在服务业务范围内"=未命中 | 复用关键词，增加AI置信度评分 | 小 |
| 11 | **系统转人工判定** | 用户输入"IT"即转人工 | 改为摇人按钮 + 智能评分触发 | 中 |
| 12 | **人工介入标注** | ManualIntervention模型（命中/待处理/已处理） | 适配为新系统会话标记体系（VIP/举手/需介入/情绪） | 中 |
| 13 | **人工录入** | ManualEntry模型（补录线下咨询） | 复用，接入新系统数据库 | 小 |
| 14 | **月度报表查询** | MonthlyReportQueryView | 改造为新系统运营报表 | 中 |
| 15 | **坐席登录认证** | Session + Redis + 12小时超时 | 改为JWT + Redis，复用登录逻辑 | 小 |
| 16 | **密码修改** | ChangePasswordView | 复用，加哈希加密（现在明文存储） | 小 |

#### 🟢 基础设施复用（直接复用或微调）

| # | 资源 | 现有配置 | 复用方式 |
|---|------|---------|---------|
| 17 | **服务器 10.80.0.86** | 现有Django+PostgreSQL+Redis | 新系统后端部署目标 |
| 18 | **域名** | `it-dataquery.dc.servyou-it.com` | 新系统用子域名如 `itdesk.dc.servyou-it.com` |
| 19 | **SSL证书** | ssl/目录 | 复用或申请新证书 |
| 20 | **Nginx** | `nginx/nginx.conf` | 改反代配置指向新系统 |
| 21 | **Docker Compose 部署模式** | 现有5套 compose 编排 | 复用部署模式，新系统加自己的 compose |
| 22 | **Redis** | `10.90.5.8` Redis 7 + 密码（见运维密码管理） | 直接连接使用 |
| 23 | **Docker网络** | dbquery_net 桥接模式 | 新建 itdesk_net |
| 24 | **SearXNG 搜索** | `10.90.5.8:8080` | M2阶段AI联网搜索能力 |
| 25 | **LangBot** | `10.90.5.8:30030` | 可选，多模型接入 |

### 7.3 数据模型映射（旧→新）

#### 用户模型

| 现有 system_users | 新系统 Agent（坐席） | 复用方式 |
|-------------------|---------------------|---------|
| username | username | ✅ 直接复用 |
| password（明文⚠️） | password_hash | 🔄 改为bcrypt哈希 |
| is_active | is_online | 🔄 语义变更 |
| created_at | created_at | ✅ 直接复用 |
| — | display_name | 🆕 新增 |
| — | role | 🆕 新增（admin/agent） |

#### 会话/消息模型

| 现有 messages（Dify只读） | 新系统 Conversation + Message | 说明 |
|--------------------------|-------------------------------|------|
| id | — | Dify消息ID，迁移时关联 |
| session_id → user_name | Conversation.user_id | 会话归属用户 |
| query | Message.content（type=text） | 用户问题 |
| answer | Message.content（type=ai_reply） | AI回复 |
| created_at | Message.created_at | 时间戳 |
| — | Conversation.status | 🆕 状态机 |
| — | Conversation.urgency_score | 🆕 紧急度 |
| — | Conversation.tags | 🆕 标记体系 |

#### 人工介入模型

| 现有 ManualIntervention | 新系统 Conversation.tags | 说明 |
|------------------------|--------------------------|------|
| message_id | conversation_id | 关联对象变更 |
| manual_intervention（是/否） | tags中的"需介入" | 逻辑迁移 |
| operation_user | agent_id | 操作人关联 |
| knowledge_status（命中/待处理/已处理） | tags中的知识库状态 | 逻辑迁移 |
| query | — | 已在Message中 |

#### 人工录入模型

| 现有 ManualEntry | 新系统 | 说明 |
|-----------------|--------|------|
| 整个模型 | ✅ 可直接复用 | 补录线下咨询记录 |

### 7.4 技术栈对比与迁移路径

| 维度 | 现有系统 | 新系统 | 迁移策略 |
|------|---------|--------|---------|
| 后端框架 | Django 3.2（同步） | FastAPI（异步） | **完全重写后端**，Django不适配实时消息 |
| 数据库ORM | Django ORM | SQLAlchemy 2.0（异步） | 模型定义迁移，逻辑重写 |
| 前端坐席台 | Bootstrap + jQuery | Vue3 + ElementPlus | **完全重写前端** |
| 前端用户端 | 无（企微原生聊天） | Vue3 + Vant4 (H5) | 新建 |
| 数据库 | PG 11.8（Dify只读）+ PG 13（本地） | PG 16（统一） | 升级，合并为单库 |
| 缓存 | Redis 7（django-redis） | Redis 7（aioredis） | 复用Redis实例 |
| 部署 | Docker Compose | Docker Compose | 复用模式 |
| 认证 | Django Session | JWT + Redis | 重写认证层 |

> **关键结论**：代码层面复用率约 15%（主要是业务逻辑和SQL查询），基础设施和AI能力复用率约 70%。

### 7.5 对接点梳理（新系统与现有系统交互）

#### M1阶段（当前）— 纯坐席台

```
新系统独立运行，不与现有系统交互
├── 企微消息 → 新后端(FastAPI) → 坐席台(Vue3) → 回复
├── 数据库：本地 PostgreSQL 16
└── 缓存：本地 Redis
```

#### M2阶段 — 接入AI

```
新系统 + 现有AI能力
├── 企微消息 → 新后端 → Dify(dify2openai) → AI回复
│                     └─ 同时 → 坐席台（AI助手面板展示AI回复）
├── AI无法解决 → 转坐席（摇人）
├── 读取Dify数据库 → 同步历史对话到新系统
└── RAGFlow → 知识库检索
```

#### M3阶段 — 知识库迭代

```
新系统 + AI + 知识库闭环
├── 坐席标注 → RAGFlow 知识库更新
├── AI回复 + 坐席校正 → 知识库质量提升
├── 统计面板 → 月度运营报告（复用现有报表逻辑）
└── 数据平台 → 合并到新系统或并行运行
```

### 7.6 关键对接参数汇总

| 参数 | 值 | 用途 |
|------|-----|------|
| dify2openai API | `http://yw-dify.dc.servyou-it.com/dify2openai/v1/chat/completions` | AI对话 |
| dify2openai Key | `http://yw-dify.dc.servyou-it.com/v1\|app-***\|Chat` | 认证 |
| RAGFlow | `http://10.80.0.85:8080` | 知识库管理 |
| Qwen3-30B | `http://10.80.0.49:5000/api/llm/servyou/v1/chat/completions` | 大模型 |
| Dify DB（生产只读） | `10.80.128.40:5432` DB=dify User=difyro Pwd=*** | 历史数据 |
| Dify DB（测试） | `10.199.16.9:5432` DB=dify User=dify_ro | 测试环境 |
| Redis | `10.90.5.8:6379` Pwd=*** | 缓存共享 |
| 数据平台 | `http://it-dataquery.dc.servyou-it.com` (10.80.0.86) | 部署服务器 |
| B端智能体 | `https://agent.dc.servyou-it.com` | 智能体管理 |
| SearXNG | `http://10.90.5.8:8080` | 联网搜索 |
| Dify App ID | `a57543f3-de66-47cc-ad89-d0540c08159f` | 消息查询过滤 |

### 7.7 对运维/架构/开发的具体建议

**给运维：**
1. **10.80.0.86 服务器**已跑Django+PG+Redis，新系统FastAPI可同机部署（不同端口），后续迁容器
2. **域名**申请 `itdesk.dc.servyou-it.com`，Nginx反代到新系统8001端口
3. **Redis**可复用现有实例（db=0给旧系统，db=1给新系统）
4. **SSL**复用现有通配符或新申请

**给架构：**
1. **M1独立运行**，不依赖现有系统，降低风险
2. **M2通过dify2openai API对接**，不需要改Dify Workflow代码
3. **Dify数据库只读**，新系统通过SQL同步历史数据，不影响现有AI服务
4. **RAGFlow API**直接调用，M3阶段做双向同步

**给开发：**
1. 新系统用 **FastAPI + SQLAlchemy 2.0**，不要沿用Django代码
2. 现有系统的 **业务逻辑（会话判定、命中判定、报表SQL）** 可参考移植
3. **数据模型映射**见7.3节，需要做数据迁移脚本
4. **API对接参数**见7.6节，M2阶段需要配置

### 7.8 风险与注意事项

| 风险 | 级别 | 应对 |
|------|------|------|
| Dify数据库是只读的，不能写入 | ⚠️ 中 | 新系统自建库，只从Dify同步数据 |
| 现有系统密码明文存储 | 🔴 高 | 新系统必须用bcrypt，迁移时做哈希转换 |
| dify2openai桥接由CF维护 | ⚠️ 中 | 提前沟通M2对接需求，预留联调时间 |
| RAGFlow知识库由宋献IT组维护 | ℹ️ 低 | M3阶段需协调知识库写入权限 |
| 现有Django 3.2 + PG 11.8版本老旧 | ⚠️ 中 | 新系统独立部署，不升级旧系统 |

---

## 附录：代码仓库

```
C:\Users\simon\wecom_it_smart_desk\
├── PRD.md                 # 产品需求文档
├── ARCHITECTURE.md        # 系统架构设计（含类图/时序图/API/DDL）
├── docker-compose.yml     # Docker 编排
├── .env                   # 环境变量
├── backend/               # FastAPI 后端 (45 个文件)
│   ├── app/
│   │   ├── api/           # 7 个路由模块
│   │   ├── services/      # 6 个服务层
│   │   ├── models/        # 9 个数据模型
│   │   ├── schemas/       # 6 个 Pydantic Schema
│   │   └── utils/         # 加解密/token/响应工具
│   └── alembic/           # 数据库迁移
├── frontend-agent/        # 坐席工作台前端 (25 个文件)
├── frontend-h5/           # 员工 H5 前端 (12 个文件)
├── tests/                 # 测试用例 (116 条)
└── docs/                  # 文档
```

---

> 本文档面向运维/架构/开发三团队沟通使用。详细技术规格见 `ARCHITECTURE.md`，产品需求见 `PRD.md`。
