geo/docs/00-project/architecture.md

17 KiB
Raw Blame History

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   │
                    │  (注册中心)  │
                    └─────────────┘

消息格式

{
  "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 权限控制示例

# 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 平台的整体系统架构设计,详细模块设计请参考各子系统设计文档。