iconsulting/docs/ARCHITECTURE.md

443 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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.

# 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) - 对象存储配置说明