443 lines
20 KiB
Markdown
443 lines
20 KiB
Markdown
# iConsulting 系统架构文档
|
||
|
||
## 目录
|
||
|
||
- [系统概述](#系统概述)
|
||
- [整体架构](#整体架构)
|
||
- [服务架构](#服务架构)
|
||
- [技术栈](#技术栈)
|
||
- [数据流](#数据流)
|
||
- [部署架构](#部署架构)
|
||
- [API 路由](#api-路由)
|
||
- [数据存储](#数据存储)
|
||
|
||
---
|
||
|
||
## 系统概述
|
||
|
||
iConsulting 是一个基于 Claude AI 的香港移民智能咨询系统,采用微服务架构,支持:
|
||
|
||
- **智能对话**: 基于 Claude API 的多模态 AI 对话
|
||
- **知识增强**: RAG + Neo4j 知识图谱
|
||
- **自我进化**: 从对话中学习经验,持续优化
|
||
- **文件处理**: 支持图片、PDF 等文件上传与 AI 分析
|
||
|
||
---
|
||
|
||
## 整体架构
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||
│ 客户端层 │
|
||
├─────────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌─────────────────────┐ ┌─────────────────────┐ │
|
||
│ │ Web Client │ │ Admin Client │ │
|
||
│ │ (React + TS) │ │ (React + Ant) │ │
|
||
│ │ │ │ │ │
|
||
│ │ • 用户咨询界面 │ │ • 知识库管理 │ │
|
||
│ │ • 多模态文件上传 │ │ • 经验库管理 │ │
|
||
│ │ • 实时流式对话 │ │ • 系统配置 │ │
|
||
│ └─────────────────────┘ └─────────────────────┘ │
|
||
│ │ │ │
|
||
└────────────┼───────────────────────────────────┼────────────────────────────┘
|
||
│ │
|
||
▼ ▼
|
||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||
│ Nginx 反向代理 (SSL 终止) │
|
||
│ │
|
||
│ / → Web Client (SPA) │
|
||
│ /admin → Admin Client (SPA) │
|
||
│ /api/v1/* → Kong API Gateway │
|
||
│ /ws/* → WebSocket (Conversation Service) │
|
||
│ /storage/* → MinIO (文件存储) │
|
||
└─────────────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||
│ Kong API Gateway (DB-less) │
|
||
│ │
|
||
│ • 请求路由 • CORS 处理 • 请求限流 │
|
||
│ • 超时控制 • 负载均衡 │
|
||
└─────────────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||
│ 微服务层 │
|
||
├─────────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ User Service │ │ Conversation │ │ Knowledge │ │ Payment │ │
|
||
│ │ :3001 │ │ Service │ │ Service │ │ Service │ │
|
||
│ │ │ │ :3004 │ │ :3003 │ │ :3002 │ │
|
||
│ │ • 匿名认证 │ │ • Claude AI │ │ • RAG 检索 │ │ • 支付宝 │ │
|
||
│ │ • JWT 管理 │ │ • 流式响应 │ │ • 向量搜索 │ │ • 微信支付 │ │
|
||
│ │ • 用户信息 │ │ • WebSocket │ │ • Neo4j 图谱 │ │ • Stripe │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
│ │
|
||
│ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ Evolution │ │ File │ │
|
||
│ │ Service │ │ Service │ │
|
||
│ │ :3005 │ │ :3006 │ │
|
||
│ │ │ │ │ │
|
||
│ │ • 经验提取 │ │ • 文件上传 │ │
|
||
│ │ • 管理员认证 │ │ • MinIO 存储 │ │
|
||
│ │ • 自我进化 │ │ • 缩略图生成 │ │
|
||
│ └──────────────┘ └──────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||
│ 基础设施层 │
|
||
├─────────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ PostgreSQL │ │ Redis │ │ Neo4j │ │ MinIO │ │
|
||
│ │ :5432 │ │ :6379 │ │ :7474/:7687 │ │ :9000/:9001 │ │
|
||
│ │ │ │ │ │ │ │ │ │
|
||
│ │ • 用户数据 │ │ • 会话缓存 │ │ • 知识图谱 │ │ • 文件存储 │ │
|
||
│ │ • 对话历史 │ │ • 限流计数 │ │ • 用户记忆 │ │ • 图片/PDF │ │
|
||
│ │ • 订单数据 │ │ • 分布式锁 │ │ • 关系网络 │ │ • 缩略图 │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||
│ 外部服务 │
|
||
├─────────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ Claude API │ │ OpenAI API │ │ 支付网关 │ │
|
||
│ │ (Anthropic) │ │ (Embedding) │ │ │ │
|
||
│ │ │ │ │ │ • 支付宝 │ │
|
||
│ │ • 对话生成 │ │ • 向量化 │ │ • 微信支付 │ │
|
||
│ │ • 多模态理解 │ │ │ │ • Stripe │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 服务架构
|
||
|
||
### 服务职责
|
||
|
||
| 服务 | 端口 | 职责 |
|
||
|------|------|------|
|
||
| **user-service** | 3001 | 用户认证(匿名/手机)、JWT 管理、用户信息 |
|
||
| **payment-service** | 3002 | 订单管理、支付宝/微信/Stripe 支付集成 |
|
||
| **knowledge-service** | 3003 | RAG 检索、向量搜索、Neo4j 知识图谱 |
|
||
| **conversation-service** | 3004 | Claude AI 对话、WebSocket 实时通信、流式响应 |
|
||
| **evolution-service** | 3005 | 管理员认证、经验提取、系统进化、经验库管理 |
|
||
| **file-service** | 3006 | 文件上传/下载、MinIO 存储、缩略图生成 |
|
||
|
||
### 服务依赖关系
|
||
|
||
```
|
||
conversation-service
|
||
├── knowledge-service (RAG 检索)
|
||
├── file-service (多模态文件)
|
||
├── PostgreSQL (对话存储)
|
||
├── Redis (会话缓存)
|
||
└── Claude API (AI 生成)
|
||
|
||
evolution-service
|
||
├── conversation-service (经验来源)
|
||
├── PostgreSQL (经验存储)
|
||
└── Claude API (经验分析)
|
||
|
||
knowledge-service
|
||
├── PostgreSQL (文档存储)
|
||
├── Neo4j (知识图谱)
|
||
└── OpenAI API (向量化)
|
||
|
||
file-service
|
||
├── MinIO (对象存储)
|
||
└── PostgreSQL (文件元数据)
|
||
```
|
||
|
||
---
|
||
|
||
## 技术栈
|
||
|
||
### 前端
|
||
|
||
| 技术 | 用途 |
|
||
|------|------|
|
||
| React 18 | UI 框架 |
|
||
| TypeScript | 类型安全 |
|
||
| TailwindCSS | 样式 |
|
||
| Zustand | 状态管理 |
|
||
| React Query | 数据获取 |
|
||
| Socket.IO Client | WebSocket |
|
||
| Ant Design | Admin UI 组件 |
|
||
|
||
### 后端
|
||
|
||
| 技术 | 用途 |
|
||
|------|------|
|
||
| NestJS | 微服务框架 |
|
||
| TypeORM | ORM |
|
||
| Socket.IO | WebSocket |
|
||
| Anthropic SDK | Claude API |
|
||
| bcrypt | 密码加密 |
|
||
| JWT | 认证令牌 |
|
||
|
||
### 基础设施
|
||
|
||
| 技术 | 用途 |
|
||
|------|------|
|
||
| PostgreSQL 15 | 主数据库 |
|
||
| Redis 7 | 缓存 |
|
||
| Neo4j 5 | 图数据库 |
|
||
| MinIO | 对象存储 |
|
||
| Kong | API 网关 |
|
||
| Nginx | 反向代理 |
|
||
| Docker Compose | 容器编排 |
|
||
|
||
---
|
||
|
||
## 数据流
|
||
|
||
### 用户对话流程
|
||
|
||
```
|
||
用户输入 (文本/图片/文件)
|
||
│
|
||
▼
|
||
┌─────────────────┐
|
||
│ Web Client │
|
||
│ (上传文件到 │
|
||
│ file-service) │
|
||
└────────┬────────┘
|
||
│
|
||
▼
|
||
┌─────────────────┐
|
||
│ Nginx │
|
||
│ (SSL + 路由) │
|
||
└────────┬────────┘
|
||
│
|
||
▼
|
||
┌─────────────────┐
|
||
│ Kong Gateway │
|
||
│ (认证 + 限流) │
|
||
└────────┬────────┘
|
||
│
|
||
▼
|
||
┌─────────────────┐ ┌─────────────────┐
|
||
│ Conversation │────────▶│ Knowledge │
|
||
│ Service │ RAG │ Service │
|
||
│ │ 检索 │ │
|
||
└────────┬────────┘ └─────────────────┘
|
||
│
|
||
│ 构建上下文 (系统提示 + RAG 结果 + 历史消息 + 文件)
|
||
▼
|
||
┌─────────────────┐
|
||
│ Claude API │
|
||
│ (流式响应) │
|
||
└────────┬────────┘
|
||
│
|
||
▼
|
||
┌─────────────────┐
|
||
│ WebSocket │
|
||
│ (实时推送) │
|
||
└────────┬────────┘
|
||
│
|
||
▼
|
||
用户看到回复
|
||
```
|
||
|
||
### 管理员进化流程
|
||
|
||
```
|
||
管理员指令
|
||
│
|
||
▼
|
||
┌─────────────────┐
|
||
│ Admin Client │
|
||
└────────┬────────┘
|
||
│
|
||
▼
|
||
┌─────────────────┐
|
||
│ Evolution │
|
||
│ Service │
|
||
│ │
|
||
│ 1. 分析历史对话 │
|
||
│ 2. 提取经验 │
|
||
│ 3. 更新知识库 │
|
||
│ 4. 调整系统提示 │
|
||
└────────┬────────┘
|
||
│
|
||
▼
|
||
┌─────────────────┐
|
||
│ Knowledge │
|
||
│ Service │
|
||
│ (更新 RAG) │
|
||
└─────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 部署架构
|
||
|
||
### 生产环境
|
||
|
||
```
|
||
┌───────────────────┐
|
||
│ 用户请求 │
|
||
│ iconsulting. │
|
||
│ szaiai.com │
|
||
└─────────┬─────────┘
|
||
│
|
||
┌─────────▼─────────┐
|
||
│ 系统 Nginx │
|
||
│ (SSL 终止) │
|
||
│ :443 → :8080 │
|
||
└─────────┬─────────┘
|
||
│
|
||
┌────────────────────┼────────────────────┐
|
||
│ │ │
|
||
┌─────────▼─────────┐ ┌───────▼───────┐ ┌─────────▼─────────┐
|
||
│ Docker Nginx │ │ Kong │ │ MinIO Console │
|
||
│ :8080 │ │ :8000 │ │ :9001 │
|
||
└───────────────────┘ └───────────────┘ └───────────────────┘
|
||
```
|
||
|
||
### 网络配置
|
||
|
||
- **对外网卡**: 14.215.128.96 (用户访问)
|
||
- **出口网卡**: 154.84.135.121 (Claude API 调用,绕过国内限制)
|
||
- **Docker 网络**: 172.20.0.0/16 (内部服务通信)
|
||
|
||
### 端口映射
|
||
|
||
| 服务 | 容器端口 | 宿主机端口 |
|
||
|------|----------|------------|
|
||
| PostgreSQL | 5432 | 5432 |
|
||
| Redis | 6379 | 6379 |
|
||
| Neo4j HTTP | 7474 | 7474 |
|
||
| Neo4j Bolt | 7687 | 7687 |
|
||
| MinIO API | 9000 | 9000 |
|
||
| MinIO Console | 9001 | 9001 |
|
||
| Kong Proxy | 8000 | 8000 |
|
||
| Kong Admin | 8001 | 8001 |
|
||
| Nginx | 80 | 8080 |
|
||
| user-service | 3001 | 3001 |
|
||
| payment-service | 3002 | 3002 |
|
||
| knowledge-service | 3003 | 3003 |
|
||
| conversation-service | 3004 | 3004 |
|
||
| evolution-service | 3005 | 3005 |
|
||
| file-service | 3006 | 3006 |
|
||
|
||
---
|
||
|
||
## API 路由
|
||
|
||
### Kong 路由配置
|
||
|
||
| 路径前缀 | 目标服务 | 说明 |
|
||
|----------|----------|------|
|
||
| `/api/v1/users`, `/api/v1/auth` | user-service:3001 | 用户认证 |
|
||
| `/api/v1/payments`, `/api/v1/orders` | payment-service:3002 | 支付订单 |
|
||
| `/api/v1/knowledge`, `/api/v1/memory` | knowledge-service:3003 | 知识库 |
|
||
| `/api/v1/conversations`, `/api/v1/messages` | conversation-service:3004 | 对话 |
|
||
| `/api/v1/evolution`, `/api/v1/admin` | evolution-service:3005 | 进化/管理 |
|
||
| `/api/v1/files` | file-service:3006 | 文件 |
|
||
|
||
### 前端路由
|
||
|
||
| 路径 | 说明 |
|
||
|------|------|
|
||
| `/` | 用户咨询界面 (web-client) |
|
||
| `/admin/` | 管理后台 (admin-client) |
|
||
| `/admin/login` | 管理员登录 |
|
||
| `/admin/knowledge` | 知识库管理 |
|
||
| `/admin/experience` | 经验库管理 |
|
||
|
||
---
|
||
|
||
## 数据存储
|
||
|
||
### PostgreSQL 主要表
|
||
|
||
| 表名 | 说明 |
|
||
|------|------|
|
||
| `users` | 用户信息(匿名/注册) |
|
||
| `conversations` | 对话会话 |
|
||
| `messages` | 对话消息 |
|
||
| `files` | 文件元数据 |
|
||
| `orders` | 支付订单 |
|
||
| `admins` | 管理员账户 |
|
||
| `experiences` | 提取的经验 |
|
||
| `knowledge_documents` | 知识文档 |
|
||
| `system_configs` | 系统配置 |
|
||
|
||
### Neo4j 图模型
|
||
|
||
```cypher
|
||
(:User)-[:HAS_MEMORY]->(:Memory)
|
||
(:User)-[:ASKED_ABOUT]->(:Knowledge)
|
||
(:Knowledge)-[:RELATED_TO]->(:Knowledge)
|
||
(:Experience)-[:DERIVED_FROM]->(:Conversation)
|
||
```
|
||
|
||
### MinIO Bucket 结构
|
||
|
||
```
|
||
iconsulting/
|
||
├── uploads/ # 用户上传
|
||
│ ├── images/
|
||
│ ├── documents/
|
||
│ └── temp/
|
||
├── processed/ # 处理后文件
|
||
│ ├── thumbnails/
|
||
│ └── extracted/
|
||
└── exports/ # 导出文件
|
||
```
|
||
|
||
---
|
||
|
||
## 安全设计
|
||
|
||
### 认证机制
|
||
|
||
1. **用户认证**: 匿名 fingerprint → JWT
|
||
2. **管理员认证**: 用户名密码 → bcrypt 验证 → JWT
|
||
3. **API 认证**: JWT Bearer Token
|
||
|
||
### 安全措施
|
||
|
||
- HTTPS (SSL/TLS)
|
||
- CORS 白名单
|
||
- 请求限流
|
||
- SQL 注入防护 (TypeORM 参数化)
|
||
- XSS 防护 (React 自动转义)
|
||
- 文件类型验证
|
||
- MinIO 预签名 URL (临时访问)
|
||
|
||
---
|
||
|
||
## 扩展性设计
|
||
|
||
### 水平扩展
|
||
|
||
- 微服务无状态设计,支持多实例部署
|
||
- Redis 分布式会话
|
||
- Kong 负载均衡
|
||
|
||
### 垂直扩展
|
||
|
||
- 数据库读写分离(预留)
|
||
- 消息队列(Kafka 已预留)
|
||
- 缓存分层
|
||
|
||
---
|
||
|
||
## 相关文档
|
||
|
||
- [开发指南](./DEVELOPMENT_GUIDE.md) - 详细的开发文档和代码示例
|
||
- [MinIO 配置](../infrastructure/minio/README.md) - 对象存储配置说明
|