geo/docs/00-project/architecture.md

337 lines
17 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.

# GEO 平台 - 系统架构设计
## 整体架构
GEO 平台采用分层架构设计,由以下四层组成:
```
┌─────────────────────────────────────────────────────────────────┐
│ Presentation Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ Next.js │ │ React 19 │ │ Tailwind CSS + shadcn │ │
│ │ App Router │ │ Components │ │ UI Components │ │
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ API Gateway Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ FastAPI │ │ REST API │ │ JWT / OAuth2 │ │
│ │ Routers │ │ Endpoints │ │ Authentication │ │
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ Service & Agent Layer │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ Citation │ │ Content │ │ Rule │ │ Competitor │ │
│ │ Detector │ │Generator │ │ Checker │ │ Analyzer │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │Performance│ │ Task │ │ Query │ │ Report │ │
│ │ Tracker │ │ Scheduler│ │ Engine │ │ Generator │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ Infrastructure Layer │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────────┐ │
│ │PostgreSQL│ │ Redis │ │ Celery │ │ Docker │ │
│ │ (Data) │ │ (Cache) │ │ (Queue) │ │ (Container) │ │
│ └──────────┘ └──────────┘ └──────────┘ └────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
```
### 四层架构说明
#### 1. 表现层Presentation Layer
- **Next.js App Router**基于文件系统的路由支持服务端渲染SSR和静态生成SSG
- **React 19**:最新 React 特性,包括 Server Components、Actions、Form 状态管理
- **Tailwind CSS + shadcn/ui**:原子化 CSS + 可复用无头组件库,支持快速构建一致化 UI
**关键设计决策**
- 采用 BFFBackend for Frontend模式前端通过 API Client 与后端通信
- 认证状态使用 NextAuth.js 管理,支持 Credentials + OAuth 双模式
- 数据获取优先使用 Server Components 减少客户端 JavaScript 体积
#### 2. API 网关层API Gateway Layer
- **FastAPI**:高性能 Python Web 框架,原生支持异步和自动 API 文档
- **RESTful API**:标准的 REST 接口设计,返回 JSON 格式数据
- **认证授权**JWT Token + OAuth2 密码流,支持角色权限控制
**模块划分**
| 模块 | 职责 | 对应文件 |
|------|------|----------|
| Auth API | 用户注册、登录、Token 刷新、权限验证 | `api/auth.py` |
| Query API | 查询创建、执行、结果获取 | `api/queries.py` |
| Citation API | 引用记录管理、统计分析 | `api/citations.py` |
| Report API | 报告生成、导出、查看 | `api/reports.py` |
| Admin API | 用户管理、系统配置、订阅管理 | `api/admin.py` |
| Subscription API | 订阅计划、支付、限额管理 | `api/subscriptions.py` |
#### 3. 服务与 Agent 层Service & Agent Layer
本层是 GEO 平台的核心业务逻辑层,包含传统 Service 和 AI Agent 两大类组件。
**传统 Service**
| Service | 职责 |
|---------|------|
| QueryService | 查询生命周期管理、AI 平台调用、结果聚合 |
| CitationService | 引用检测算法执行、引用记录存储、置信度评估 |
| ReportService | 报告模板渲染、数据聚合、多种格式导出 |
| UserService | 用户 CRUD、角色权限、订阅状态管理 |
| SubscriptionService | 订阅计划管理、配额控制、升级降级 |
**AI Agent 集群**:详见 `docs/02-design/agent-framework.md`
#### 4. 基础设施层Infrastructure Layer
| 组件 | 用途 | 技术选型 |
|------|------|----------|
| PostgreSQL | 主数据库,存储业务数据 | PostgreSQL 15+ |
| Redis | 缓存、Celery Broker、会话存储 | Redis 7+ |
| Celery | 异步任务队列、定时任务调度 | Celery 5+ |
| Docker | 应用容器化部署 | Docker + Compose |
## 模块解耦原则
### 1. 领域驱动设计DDD
- **领域模型独立**核心业务模型Query、Citation、User、Subscription不依赖任何框架
- **边界上下文清晰**:每个模块维护自己的数据模型和业务规则
- **防腐层ACL**:外部 AI 平台适配器通过防腐层与核心领域隔离
### 2. 依赖倒置原则
```
API Layer → Service Layer → Repository Layer → Database
↑ ↑ ↑
依赖接口 依赖接口 依赖接口
```
- Service 层定义接口Repository 层实现接口
- 便于单元测试时 Mock 依赖
- 支持未来数据库迁移或替换
### 3. 配置与代码分离
- 所有环境相关配置通过环境变量注入
- 应用配置集中管理在 `app/config.py`
- 不同环境dev / staging / prod使用不同的 `.env` 文件
### 4. 异步解耦
- 耗时操作AI 查询执行、报告生成)通过 Celery 异步处理
- 前端通过轮询或 WebSocket 获取任务状态更新
- 任务执行状态持久化,支持断点续传和失败重试
## AI Agent 解耦通信协议设计
### 通信模型
GEO 平台的 AI Agent 之间采用 **基于消息队列的异步通信协议**,确保 Agent 之间松耦合、可独立部署和扩展。
```
┌─────────────┐ ┌─────────────┐ ┌─────────────────┐
│ Agent A │────▶│ Message │────▶│ Agent B │
│ (生产者) │ │ Queue │ │ (消费者) │
└─────────────┘ └─────────────┘ └─────────────────┘
┌─────────────┐
│ Registry │
│ (注册中心) │
└─────────────┘
```
### 消息格式
```json
{
"message_id": "uuid",
"timestamp": "2026-01-01T00:00:00Z",
"sender": "agent_name",
"recipient": "agent_name_or_broadcast",
"message_type": "task_request | task_result | status_update | heartbeat",
"payload": {
"task_id": "uuid",
"task_type": "detect_citations | generate_content | check_rules | analyze_competitors | track_performance",
"parameters": {},
"data": {},
"priority": 1
},
"correlation_id": "uuid",
"reply_to": "agent_name"
}
```
### 通信模式
| 模式 | 说明 | 适用场景 |
|------|------|----------|
| 点对点 | Agent A 直接发送任务给 Agent B | 明确的一对一任务分配 |
| 广播 | Agent 向所有订阅者发送消息 | 状态更新、配置变更通知 |
| 发布/订阅 | Agent 向特定主题发布消息 | 事件驱动架构 |
| 请求/响应 | 同步等待返回结果 | 需要即时反馈的短任务 |
### Agent 注册与发现
- **注册中心**Redis 作为轻量级注册中心
- **注册机制**Agent 启动时向注册中心注册自己的能力和状态
- **健康检查**:定期发送心跳,失效 Agent 自动从注册中心移除
- **负载均衡**:任务分发时根据 Agent 负载状态选择执行节点
### 错误处理与重试
- 消息消费失败时自动进入死信队列DLQ
- 支持配置重试次数和重试间隔(指数退避)
- 失败任务可手动重新触发或自动补偿
## 双模式权限设计
### 用户角色模型
```
┌─────────────┐
│ User │
└──────┬──────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ EndUser │ │ Admin │ │ Agent │
│ (终端用户) │ │ (管理员) │ │ (运营人员) │
└─────┬──────┘ └────────────┘ └─────┬──────┘
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ Self-Service │ │ Proxy-Service│
│ 自主订阅 │ │ 代理运营 │
└──────────────┘ └──────────────┘
```
### 权限矩阵
| 功能 | EndUser (Basic) | EndUser (Pro) | EndUser (Enterprise) | Admin | Agent |
|------|----------------|---------------|---------------------|-------|-------|
| 创建查询 | 10/月 | 50/月 | 无限制 | 无限制 | 无限制 |
| 引用检测 | 有 | 有 | 有 | 有 | 有 |
| 策略生成 | 基础 | 高级 | 定制化 | 全部 | 全部 |
| 内容生成 | 5/月 | 20/月 | 无限制 | 无限制 | 无限制 |
| 报告导出 | PDF | PDF + Excel | 全部格式 | 全部格式 | 全部格式 |
| 团队管理 | 无 | 无 | 有 | 有 | 有 |
| 代理客户管理 | 无 | 无 | 无 | 有 | 有 |
| 白标报告 | 无 | 无 | 无 | 有 | 有 |
| 系统配置 | 无 | 无 | 无 | 有 | 无 |
| 用户管理 | 无 | 无 | 无 | 有 | 无 |
### 权限实现
- **基于角色的访问控制RBAC**:用户通过角色获得一组权限
- **基于属性的访问控制ABAC**:结合用户订阅等级、团队归属等属性进行细粒度控制
- **中间件校验**FastAPI 依赖注入实现统一的权限校验中间件
- **前端联动**:前端路由和组件根据用户权限动态渲染
### API 权限控制示例
```python
# FastAPI 依赖注入实现权限控制
async def require_admin(current_user: User = Depends(get_current_user)):
if not current_user.is_admin:
raise HTTPException(status_code=403, detail="需要管理员权限")
return current_user
async def require_subscription(min_tier: str):
async def checker(current_user: User = Depends(get_current_user)):
if not current_user.subscription.meets(min_tier):
raise HTTPException(status_code=403, detail="订阅等级不足")
return current_user
return checker
# 路由使用
@router.post("/queries")
async def create_query(
data: QueryCreate,
user: User = Depends(require_subscription("pro"))
):
...
```
## 数据流架构
### 查询执行数据流
```
用户创建查询 ──▶ API 接收 ──▶ 验证权限/配额 ──▶ 创建查询记录
提交 Celery 任务
┌─────────────────┐
│ Worker 执行查询 │
│ - 调用 AI 平台 │
│ - 聚合响应结果 │
└────────┬────────┘
┌─────────────────┐
│ CitationDetector │
│ - 解析引用内容 │
│ - 评估置信度 │
└────────┬────────┘
保存引用记录 ──▶ 更新查询状态
通知前端完成
```
### 报告生成数据流
```
用户请求报告 ──▶ API 接收 ──▶ 收集相关数据
ReportService 聚合数据
应用报告模板
生成 PDF/Excel/HTML
返回下载链接
```
## 扩展性设计
### 水平扩展
- **无状态服务**API 服务无状态设计,可通过负载均衡水平扩展
- **数据库读写分离**:未来支持主从复制,读操作分散到从库
- **缓存层**Redis 缓存热点数据,减少数据库压力
### AI 平台适配器扩展
GEO 平台需要对接多种 AI 搜索引擎平台,适配器设计遵循开闭原则:
```
┌─────────────────────────────────────────┐
│ PlatformAdapter (抽象基类) │
│ - execute_query() │
│ - parse_response() │
│ - validate_config() │
└─────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ ChatGPT │ │ Kimi │ │ Perplex │
│ Adapter │ │ Adapter │ │ Adapter │
└──────────┘ └──────────┘ └──────────┘
```
新增 AI 平台只需实现 `PlatformAdapter` 接口,无需修改现有代码。
---
*本文档描述 GEO 平台的整体系统架构设计,详细模块设计请参考各子系统设计文档。*