# 项目概述 **本文档引用的文件** - [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)