# 项目概述
**本文档引用的文件**
- [backend/README.md](file://backend/README.md)
- [frontend/README.md](file://frontend/README.md)
- [backend/app/main.py](file://backend/app/main.py)
- [backend/app/config.py](file://backend/app/config.py)
- [backend/app/workers/scheduler.py](file://backend/app/workers/scheduler.py)
- [backend/app/workers/citation_engine.py](file://backend/app/workers/citation_engine.py)
- [backend/app/workers/platforms/base.py](file://backend/app/workers/platforms/base.py)
- [backend/app/api/queries.py](file://backend/app/api/queries.py)
- [backend/app/models/query.py](file://backend/app/models/query.py)
- [backend/app/models/citation_record.py](file://backend/app/models/citation_record.py)
- [frontend/app/layout.tsx](file://frontend/app/layout.tsx)
- [frontend/package.json](file://frontend/package.json)
- [frontend/components/charts/platform-chart.tsx](file://frontend/components/charts/platform-chart.tsx)
- [frontend/lib/platforms.ts](file://frontend/lib/platforms.ts)
- [docker-compose.yml](file://docker-compose.yml)
- [backend/requirements.txt](file://backend/requirements.txt)
- [frontend/lib/api.ts](file://frontend/lib/api.ts)
- [frontend/lib/auth.ts](file://frontend/lib/auth.ts)
- [tests/conftest.py](file://tests/conftest.py)
- [tests/test_auth.py](file://tests/test_auth.py)
## 目录
1. [引言](#引言)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 引言
GEO平台是一个面向智能学术查询与引用管理的系统,旨在帮助用户通过多AI平台进行关键词检索,并自动识别目标品牌在检索结果中的被引用情况,同时提供可视化报表与定时任务调度能力。平台采用前后端分离架构,后端基于FastAPI构建REST服务,前端基于Next.js提供交互界面;数据库采用PostgreSQL,缓存与任务调度由Redis与APScheduler支撑。
本项目的核心目标是:
- 提供统一的查询入口,整合多家AI平台能力
- 自动化定时查询与引用检测,降低人工成本
- 以图表形式直观展示各平台引用率趋势
- 保障可扩展性与可维护性,便于后续接入更多平台与功能
**更新** 新增完整的项目README文档,包含详细的安装说明、API端点清单、数据库迁移说明和测试说明,为开发者提供完整的快速开始指南。
## 项目结构
项目采用前后端分离与容器化部署策略:
- 后端:FastAPI应用,负责API路由、业务逻辑、定时任务调度与数据库交互
- 前端:Next.js应用,负责用户界面、图表展示与API调用
- 数据层:PostgreSQL存储查询与引用记录;Redis用于任务调度与缓存
- 容器编排:Docker Compose统一管理数据库、缓存、后端与前端服务
```mermaid
graph TB
subgraph "前端"
FE_APP["Next.js 应用
页面与图表组件"]
end
subgraph "后端"
BE_API["FastAPI 应用
路由与服务"]
BE_SCHED["APScheduler 调度器
定时任务"]
BE_ENGINE["引用检测引擎
品牌匹配与竞争品牌检测"]
end
subgraph "数据与基础设施"
DB[("PostgreSQL")]
CACHE[("Redis 缓存/队列")]
end
FE_APP --> |"HTTP 请求"| BE_API
BE_API --> |"数据库访问"| DB
BE_API --> |"任务调度"| BE_SCHED
BE_SCHED --> |"调用引擎"| BE_ENGINE
BE_ENGINE --> |"写入记录"| DB
BE_API --> CACHE
BE_SCHED --> CACHE
```
**图表来源**
- [backend/app/main.py:1-84](file://backend/app/main.py#L1-L84)
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
- [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309)
- [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71)
**章节来源**
- [backend/app/main.py:1-84](file://backend/app/main.py#L1-L84)
- [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71)
## 核心组件
- 后端主程序与生命周期管理:负责应用启动/关闭、CORS配置、路由注册与健康检查
- 定时任务调度器:基于APScheduler的异步调度器,周期性扫描待执行查询并触发引用检测
- 引用检测引擎:封装品牌匹配、竞争品牌检测与平台适配器调用流程
- 平台适配器基类:定义统一的AI平台查询接口,便于扩展新的平台
- API路由与服务:提供查询词的增删改查、运行一次查询等接口
- 数据模型:定义查询、引用记录、任务等核心实体及其索引
- 前端布局与图表:提供页面骨架、主题样式与平台引用率柱状图展示
**章节来源**
- [backend/app/main.py:1-84](file://backend/app/main.py#L1-L84)
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
- [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309)
- [backend/app/workers/platforms/base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
- [backend/app/api/queries.py:1-86](file://backend/app/api/queries.py#L1-L86)
- [backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)
- [backend/app/models/citation_record.py:1-42](file://backend/app/models/citation_record.py#L1-L42)
- [frontend/app/layout.tsx:1-37](file://frontend/app/layout.tsx#L1-L37)
- [frontend/components/charts/platform-chart.tsx:1-68](file://frontend/components/charts/platform-chart.tsx#L1-L68)
## 架构总览
GEO平台采用分层架构:
- 表现层:Next.js应用,负责UI渲染与用户交互
- 控制层:FastAPI路由与服务,处理请求、鉴权与业务编排
- 领域层:引用检测引擎与平台适配器,实现品牌匹配与跨平台查询
- 基础设施层:PostgreSQL与Redis,提供持久化与任务调度支撑
- 集成层:Docker Compose统一编排,确保服务间依赖与网络互通
```mermaid
graph TB
UI["前端页面
Next.js"] --> API["后端API
FastAPI"]
API --> SCHED["调度器
APScheduler"]
API --> DBM["数据库
SQLAlchemy ORM"]
API --> CACHE["缓存
Redis"]
SCHED --> ENGINE["引擎
CitationEngine"]
ENGINE --> ADAPTERS["平台适配器
BasePlatformAdapter"]
ENGINE --> DBM
ADAPTERS --> |"调用外部平台"| EXTERNAL["外部AI平台"]
```
**图表来源**
- [backend/app/main.py:1-84](file://backend/app/main.py#L1-L84)
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
- [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309)
- [backend/app/workers/platforms/base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
## 详细组件分析
### 后端主程序与生命周期
- 负责注册认证、查询、引用、报告等路由
- 配置CORS允许前端本地开发环境访问
- 应用生命周期内启动调度器并在关闭时优雅退出
```mermaid
sequenceDiagram
participant Client as "浏览器"
participant API as "FastAPI 应用"
participant Sched as "调度器"
participant Engine as "引用引擎"
Client->>API : "GET /health"
API-->>Client : "{status : ok}"
Note over API,Sched : "应用启动时"
API->>Sched : "start()"
Sched->>Sched : "注册每小时检查任务"
Note over Sched,Engine : "定时触发"
Sched->>Engine : "执行查询与检测"
```
**图表来源**
- [backend/app/main.py:1-84](file://backend/app/main.py#L1-L84)
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
**章节来源**
- [backend/app/main.py:1-84](file://backend/app/main.py#L1-L84)
### 定时任务调度器
- 使用AsyncIOScheduler按小时轮询查询表
- 过滤状态为active且到达下次查询时间的记录
- 逐条调用引用引擎执行查询,更新任务状态与下次查询时间
```mermaid
flowchart TD
Start(["定时任务触发"]) --> Fetch["查询数据库
筛选待执行查询"]
Fetch --> HasMore{"是否有待执行查询?"}
HasMore --> |否| End(["结束"])
HasMore --> |是| Exec["调用引擎执行查询"]
Exec --> Update["更新查询任务状态与下次查询时间"]
Update --> Fetch
```
**图表来源**
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
**章节来源**
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
### 引用检测引擎
- 品牌匹配器:支持精确、别名、模糊匹配,输出引用位置与置信度
- 竞争品牌检测:在已知品牌库中识别其他相关品牌
- 平台适配器:封装不同AI平台的查询接口,统一返回原始文本
- 任务管理:为每次查询创建或获取任务记录,跟踪状态与错误信息
- 结果持久化:生成引用记录并写入数据库
```mermaid
classDiagram
class CitationEngine {
+execute_query(query, db) list
+execute_single_platform(keyword, platform, target_brand, aliases) dict
-_get_or_create_task(db, query_id, platform) QueryTask
-_calculate_next_query_at(frequency) datetime
+close() void
}
class BrandMatcher {
+match(text) dict
-_extract_candidates(text) list
-_extract_position_and_context(text, keyword) tuple
}
class CompetitorDetector {
+detect(text, target_brand) list
}
class BasePlatformAdapter {
<>
+platform_name str
+platform_url str
+query(keyword) str
+close() void
}
CitationEngine --> BrandMatcher : "使用"
CitationEngine --> CompetitorDetector : "使用"
CitationEngine --> BasePlatformAdapter : "调用"
```
**图表来源**
- [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309)
- [backend/app/workers/platforms/base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
**章节来源**
- [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309)
- [backend/app/workers/platforms/base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
### API与数据模型
- 查询API:提供查询词的分页列表、创建、读取、更新、删除
- 查询模型:包含关键词、目标品牌、别名、平台集合、频率、状态与时间戳
- 引用记录模型:记录每次查询在特定平台上的引用结果、竞争品牌与原始响应
```mermaid
erDiagram
QUERIES {
uuid id PK
uuid user_id FK
string keyword
string target_brand
jsonb brand_aliases
jsonb platforms
string frequency
string status
timestamp last_queried_at
timestamp next_query_at
timestamp created_at
timestamp updated_at
}
CITATION_RECORDS {
uuid id PK
uuid query_id FK
string platform
boolean cited
int citation_position
text citation_text
jsonb competitor_brands
text raw_response
timestamp queried_at
}
QUERIES ||--o{ CITATION_RECORDS : "包含"
```
**图表来源**
- [backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)
- [backend/app/models/citation_record.py:1-42](file://backend/app/models/citation_record.py#L1-L42)
**章节来源**
- [backend/app/api/queries.py:1-86](file://backend/app/api/queries.py#L1-L86)
- [backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)
- [backend/app/models/citation_record.py:1-42](file://backend/app/models/citation_record.py#L1-L42)
### 前端布局与可视化
- 页面布局:定义站点元数据与全局样式,提供Provider容器
- 图表组件:基于Recharts绘制平台引用率柱状图,支持响应式与自定义颜色
- 平台映射:提供平台键值到中文名称的映射,便于展示
```mermaid
graph LR
Layout["页面布局
layout.tsx"] --> Providers["全局Provider"]
Providers --> Charts["图表组件
PlatformChart"]
Charts --> Data["引用统计数据"]
Charts --> Map["平台映射
platforms.ts"]
```
**图表来源**
- [frontend/app/layout.tsx:1-37](file://frontend/app/layout.tsx#L1-L37)
- [frontend/components/charts/platform-chart.tsx:1-68](file://frontend/components/charts/platform-chart.tsx#L1-L68)
- [frontend/lib/platforms.ts:1-18](file://frontend/lib/platforms.ts#L1-L18)
**章节来源**
- [frontend/app/layout.tsx:1-37](file://frontend/app/layout.tsx#L1-L37)
- [frontend/components/charts/platform-chart.tsx:1-68](file://frontend/components/charts/platform-chart.tsx#L1-L68)
- [frontend/lib/platforms.ts:1-18](file://frontend/lib/platforms.ts#L1-L18)
### API客户端与认证
- API客户端:统一封装后端API调用,自动处理认证头与错误处理
- NextAuth认证:基于Credentials Provider实现JWT认证流程
- 环境变量配置:支持开发、测试、生产多环境配置
**章节来源**
- [frontend/lib/api.ts:1-154](file://frontend/lib/api.ts#L1-L154)
- [frontend/lib/auth.ts:1-73](file://frontend/lib/auth.ts#L1-L73)
- [backend/app/config.py:1-23](file://backend/app/config.py#L1-L23)
## 依赖分析
- 技术栈选择理由
- 后端:FastAPI提供高性能异步API与自动生成文档;SQLAlchemy与异步驱动支持高并发;APScheduler与Redis满足任务调度与缓存需求
- 前端:Next.js提供SSR/CSR混合模式与良好开发体验;Radix UI与Tailwind提供一致的UI组件与样式;Recharts用于数据可视化
- 数据与基础设施:PostgreSQL适合结构化数据与复杂查询;Redis适合任务调度与会话缓存
- 外部依赖与集成点
- 平台适配器:通过抽象基类统一不同AI平台的查询接口
- CORS:允许前端本地开发端口访问后端
- 环境变量:数据库、缓存、密钥与浏览器自动化路径通过配置集中管理
```mermaid
graph TB
subgraph "后端依赖"
FAST["FastAPI"]
SQL["SQLAlchemy + asyncpg"]
REDIS["Redis"]
APS["APScheduler"]
PW["Playwright"]
end
subgraph "前端依赖"
NEXT["Next.js"]
RADIX["Radix UI"]
RECHARTS["Recharts"]
TAILWIND["TailwindCSS"]
end
FAST --> SQL
FAST --> REDIS
FAST --> APS
FAST --> PW
NEXT --> RADIX
NEXT --> RECHARTS
NEXT --> TAILWIND
```
**图表来源**
- [backend/requirements.txt:1-39](file://backend/requirements.txt#L1-L39)
- [frontend/package.json:1-40](file://frontend/package.json#L1-L40)
**章节来源**
- [backend/requirements.txt:1-39](file://backend/requirements.txt#L1-L39)
- [frontend/package.json:1-40](file://frontend/package.json#L1-L40)
## 性能考虑
- 异步化与并发
- 后端采用异步数据库会话与异步调度器,提升I/O密集型场景下的吞吐量
- 索引优化
- 查询与引用记录模型建立复合索引,加速定时任务扫描与报表查询
- 缓存与任务解耦
- Redis承担任务调度与会话缓存,避免阻塞主业务线程
- 可视化性能
- 图表组件使用响应式容器与轻量级渲染,减少重绘开销
## 故障排查指南
- 健康检查
- 后端提供健康检查端点,用于确认服务可用性
- 日志与错误处理
- 调度器与引擎在执行过程中记录错误日志,便于定位失败原因
- 常见问题
- 数据库连接失败:检查PostgreSQL容器健康状态与连接字符串
- 任务未执行:确认Redis可用与调度器已启动
- 平台适配器异常:检查对应平台的API密钥与网络连通性
**章节来源**
- [backend/app/main.py:81-84](file://backend/app/main.py#L81-L84)
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
- [backend/app/config.py:1-23](file://backend/app/config.py#L1-L23)
## 结论
GEO平台通过"多AI平台集成 + 定时查询任务调度 + 数据可视化"的组合,为用户提供从查询到洞察的一体化能力。其分层清晰、模块解耦的设计便于后续扩展更多平台与功能;容器化部署降低了运维复杂度。对于初学者,平台提供了直观的可视化与简洁的API;对于开发者,平台展示了异步架构、任务调度与领域建模的最佳实践。
**更新** 新增完整的项目文档体系,包括后端和前端的详细README文档,为开发者提供从环境搭建到API使用的完整指导。
## 附录
### 系统边界与核心组件关系图
```mermaid
graph TB
subgraph "外部系统"
Users["用户"]
AIs["多家AI平台"]
end
subgraph "GEO平台"
Frontend["前端应用"]
Backend["后端API"]
Scheduler["调度器"]
Engine["引用引擎"]
DB[("PostgreSQL")]
Cache[("Redis")]
end
Users --> Frontend
Frontend --> Backend
Backend --> DB
Backend --> Cache
Scheduler --> Engine
Engine --> AIs
Engine --> DB
Scheduler --> DB
Scheduler --> Cache
```
**图表来源**
- [backend/app/main.py:1-84](file://backend/app/main.py#L1-L84)
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
- [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309)
- [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71)
### 数据流向说明
- 用户在前端发起查询管理与报表查看请求
- 后端API接收请求并访问数据库与缓存
- 调度器周期性触发引用引擎执行跨平台查询
- 引擎对平台返回的原始文本进行品牌匹配与竞争品牌检测
- 结果写入数据库并供前端图表组件消费
**章节来源**
- [backend/app/api/queries.py:1-86](file://backend/app/api/queries.py#L1-L86)
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
- [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309)
- [frontend/components/charts/platform-chart.tsx:1-68](file://frontend/components/charts/platform-chart.tsx#L1-L68)
### 快速开始指南
**更新** 基于新增的README文档,提供完整的项目启动指南:
#### 后端启动步骤
1. 创建Python虚拟环境并激活
2. 安装依赖:`pip install -r requirements.txt`
3. 安装Playwright浏览器:`playwright install chromium`
4. 复制并配置环境变量:`cp ../.env.example ../.env`
5. 初始化数据库:`alembic upgrade head`
6. 开发模式启动:`uvicorn app.main:app --reload --port 8000`
#### 前端启动步骤
1. 安装依赖:`npm install`
2. 开发模式启动:`npm run dev`
3. 访问地址:`http://localhost:3000`
#### API端点概览
- 认证模块:注册、登录、用户信息获取
- 查询管理:CRUD操作与立即执行
- 引用数据:列表查询与统计分析
- 报告导出:CSV格式数据导出
**章节来源**
- [backend/README.md:12-67](file://backend/README.md#L12-L67)
- [frontend/README.md:11-34](file://frontend/README.md#L11-L34)
- [backend/README.md:69-126](file://backend/README.md#L69-L126)
### 测试与开发指南
**更新** 新增测试框架与开发流程说明:
- 测试环境配置:pytest + pytest-asyncio + aiosqlite
- 测试运行:`pytest` 或指定测试文件
- 覆盖率报告:`pytest --cov=backend/app --cov-report=html`
- 开发注意事项:统一API调用封装、认证状态管理、组件开发规范
**章节来源**
- [backend/README.md:209-234](file://backend/README.md#L209-L234)
- [tests/conftest.py:1-123](file://tests/conftest.py#L1-L123)
- [tests/test_auth.py:1-104](file://tests/test_auth.py#L1-L104)
- [frontend/README.md:161-170](file://frontend/README.md#L161-L170)