geo/docs/操作流程.md

400 lines
16 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 平台操作流程
## 一、环境准备
### 1.1 系统要求
- Node.js 18+
- Python 3.11+
- PostgreSQL 15
- Redis 7
- Docker & Docker Compose推荐
### 1.2 环境变量配置
在项目根目录 `.env` 文件中配置以下关键项:
| 变量名 | 示例值 | 说明 |
|--------|--------|------|
| `DATABASE_URL` | `postgresql+asyncpg://chiguyong@localhost:5432/geo_platform` | PostgreSQL 异步连接串 |
| `REDIS_URL` | `redis://localhost:6379/0` | Redis 连接串 |
| `JWT_SECRET` | `a3f8c2e1d7b9...` | JWT 签名密钥,**必须 ≥ 32 字符**,否则启动失败 |
| `JWT_EXPIRE_HOURS` | `24` | JWT Access Token 过期时间(小时) |
| `NEXT_PUBLIC_API_URL` | `http://localhost:8000` | 前端调用后端的 API 地址 |
| `CORS_ORIGINS` | `http://localhost:3000,http://localhost:3001` | 允许跨域的前端地址 |
| `ENABLE_LLM` | `true` | 启用真实 AI 引用检测(`false` 则使用 Mock |
| `OPENAI_API_KEY` | `sk-sp-c76f198d...` | 百炼 DashScope API 密钥 |
| `OPENAI_BASE_URL` | `https://coding.dashscope.aliyuncs.com/v1` | 百炼 DashScope 端点OpenAI 兼容格式) |
| `DEFAULT_LLM_PROVIDER` | `openai` | LLM 提供商(`openai` / `deepseek` |
| `LLM_MODEL` | `qwen3-coder-plus` | 默认调用模型名 |
| `ZHIPU_API_KEY` | _(可选)_ | 智谱 AI API Key |
| `TONGYI_API_KEY` | _(可选)_ | 通义千问 API Key |
| `MOONSHOT_API_KEY` | _(可选)_ | Kimi月之暗面API Key |
| `BAIDU_QIANFAN_API_KEY` | _(可选)_ | 百度千帆 API Key |
| `DOUBAO_API_KEY` | _(可选)_ | 豆包字节跳动API Key |
| `API_RATE_LIMIT_RPM` | `10` | AI 平台 API 调用频率限制(每分钟请求数) |
> **提示**`JWT_SECRET` 启动时会强制校验长度,不足 32 字符将直接退出进程。可用以下命令生成:
> ```bash
> python3 -c "import secrets; print(secrets.token_hex(32))"
> ```
---
## 二、系统启动
### 2.1 Docker 一键启动(推荐)
```bash
docker-compose up -d
```
启动后访问:
- 前端http://localhost:3000
- 后端 APIhttp://localhost:8000
- API 文档Swaggerhttp://localhost:8000/docs
Docker Compose 编排四个服务:
| 服务 | 镜像 | 端口 | 依赖 |
|------|------|------|------|
| `db` | postgres:15-alpine | 5432 | — |
| `redis` | redis:7-alpine | 6379 | — |
| `backend` | 自建(./backend | 8000 | db + redis 健康检查 |
| `frontend` | 自建(./frontend | 3000 | backend |
数据持久化卷:`postgres_data`、`redis_data`
### 2.2 本地开发启动
后端:
```bash
cd backend
pip install -r requirements.txt
alembic upgrade head
uvicorn app.main:app --reload --port 8000
```
前端:
```bash
cd frontend
npm install
npm run dev
```
> **注意**:生产环境启动后端应使用 `--no-reload` 参数,避免文件监视导致的进程崩溃。
---
## 三、业务操作流程
### 3.1 用户注册与登录
- 测试账号:`admin@fischer.com` / `Admin@123`
- 注册流程:`POST /api/v1/auth/register` → 邮箱验证 → 登录
- 登录流程:`POST /api/v1/auth/login` → 获取 Access Token + Refresh Token
### 3.2 Onboarding 引导(新用户首次登录)
1. 创建品牌(填写品牌名称、行业)→ `POST /api/v1/onboarding/brand`
2. 选择竞品(系统自动推荐 + 手动添加)→ `GET /api/v1/onboarding/competitor-recommendations`
3. 查看品牌健康报告AI 分析品牌在各平台的表现)→ `GET /api/v1/onboarding/health-report/{brand_id}`
4. 获取行动建议(基于数据的优化建议)→ `GET /api/v1/onboarding/action-suggestions/{brand_id}`
5. 完成引导 → `POST /api/v1/onboarding/complete/{brand_id}` → 进入仪表盘
### 3.3 品牌管理
- 创建/编辑/删除品牌(`/api/v1/brands/`
- 管理品牌下的竞品(`/api/v1/brands/{brand_id}/competitors/`
- 查看品牌评分(`/api/v1/brands/{brand_id}/score/`、`/api/v1/brands/{brand_id}/score/history/`
- 配置品牌别名(用于多名称匹配)
### 3.4 查询管理
- 创建监测查询词(如"XXX品牌怎么样")→ `POST /api/v1/queries/`
- 查看查询列表 → `GET /api/v1/queries/`
- 立即执行检测 → `POST /api/v1/queries/{query_id}/run-now`
- 设置查询频率(即时/每日/每周),由 APScheduler 定时调度自动执行
### 3.5 引用检测
- 系统自动调用 AI 平台检测品牌引用
- 使用百炼 `qwen3-coder-plus` 模型分析引用情况
- 记录:是否被引用、引用位置、情感倾向、置信度
- 查看引用列表 → `GET /api/v1/citations/`
- 查看引用统计 → `GET /api/v1/citations/stats`
### 3.6 数据分析与报告
- 仪表盘统计:`GET /api/v1/dashboard/stats`
- 综合评分(V2)、健康等级、较昨日变化
- 五维度评分详情(提及率、推荐排名、情感评分、引用质量、竞争地位)
- 各平台评分对比(含竞品)
- 报告导出:`GET /api/v1/reports/export/csv`、`GET /api/v1/reports/export/pdf`
- 引用详情查看与筛选
### 3.7 内容管理
- 内容 CRUD`/api/v1/contents/`(列表、创建、查看、更新、删除、发布)
- AI 内容生成:`POST /api/v1/content/generate`
- 流程:内容生成 → 去AI化 → GEO优化三阶段 Pipeline
- 支持知识库 RAG 上下文增强
- AI 选题生成:`POST /api/v1/content/generate-topics`
- 品牌知识库条目:`/api/v1/contents/knowledge/`CRUD
### 3.8 知识库
- 创建/列出/查看/删除知识库 → `/api/v1/knowledge/bases`
- 上传文档到知识库 → `POST /api/v1/knowledge/bases/{kb_id}/documents`
- 支持 text / markdown / url 三种来源
- 自动分块 + 向量化MockEmbedder / OpenAIEmbedder
- 文档管理(列出/删除)→ `/api/v1/knowledge/bases/{kb_id}/documents`
- 查看文档分块 → `GET /api/v1/knowledge/bases/{kb_id}/documents/{doc_id}/chunks`
- RAG 检索 → `POST /api/v1/knowledge/search`
### 3.9 内容分发
- 获取支持平台列表 → `GET /api/v1/distribution/platforms`
- 内容合规校验 → `POST /api/v1/distribution/validate`
- 生成发布策略 → `POST /api/v1/distribution/strategy`
- 内容格式化 → `POST /api/v1/distribution/format`
- 创建发布排期 → `POST /api/v1/distribution/schedule`
### 3.10 监测优化Analytics
- 记录发布 → `POST /api/v1/analytics/publish`
- 更新效果指标 → `PUT /api/v1/analytics/metrics/{publish_id}`
- 全局概览 → `GET /api/v1/analytics/overview`
- 单内容详情 → `GET /api/v1/analytics/content/{publish_id}`
- 排行榜 → `GET /api/v1/analytics/top`
- 洞察列表 → `GET /api/v1/analytics/insights`
- AI 生成洞察 → `POST /api/v1/analytics/insights/generate`
- 标记洞察已应用 → `POST /api/v1/analytics/insights/{insight_id}/apply`
### 3.11 告警通知
- 查看告警列表 → `GET /api/v1/alerts/`
- 未读告警数 → `GET /api/v1/alerts/unread-count`
- 全部标为已读 → `PATCH /api/v1/alerts/read-all`
- 单条标为已读 → `PATCH /api/v1/alerts/{alert_id}/read`
- 告警设置管理 → `/api/v1/alerts/settings`
### 3.12 客户管理
- 客户组织CRUD → `/api/v1/clients/`
- 查看客户下项目 → `GET /api/v1/clients/{client_id}/projects`
### 3.13 生命周期项目管理
- 项目列表 → `GET /api/v1/lifecycle/projects/`
- 项目统计 → `GET /api/v1/lifecycle/projects/stats`
- 快速创建项目 → `POST /api/v1/lifecycle/projects/quick-start`
- 项目时间线 → `GET /api/v1/lifecycle/projects/{project_id}/timeline`
- 阶段管理 → `/api/v1/lifecycle/projects/{project_id}/stages`
### 3.14 Agent 管理
- 列出所有 Agent → `GET /api/v1/agents/`
- Agent 详情/配置 → `/api/v1/agents/{agent_name}`
- 任务管理 → `/api/v1/agents/tasks/`(创建、查询状态、取消、日志)
### 3.15 订阅管理
- 查看套餐 → `GET /api/v1/subscriptions/plans`
- 当前订阅 → `GET /api/v1/subscriptions/current`
- 订阅 → `POST /api/v1/subscriptions/subscribe`
- 取消订阅 → `POST /api/v1/subscriptions/cancel`
- 订阅历史 → `GET /api/v1/subscriptions/history`
---
## 四、API 接口总览
### 认证 `/api/v1/auth`
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/register` | 用户注册 |
| POST | `/login` | 用户登录(返回 Access + Refresh Token |
| POST | `/refresh` | 刷新 Token滑动过期 |
| GET | `/me` | 获取当前用户信息 |
| POST | `/forgot-password` | 忘记密码(发送重置链接) |
| POST | `/reset-password` | 重置密码 |
| POST | `/verify-email` | 验证邮箱 |
| POST | `/resend-verification` | 重发验证码 |
| PUT | `/change-password` | 修改密码 |
| PUT | `/profile` | 更新个人资料 |
### 品牌管理 `/api/v1/brands`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/` | 获取当前用户所有品牌 |
| POST | `/` | 创建品牌 |
| GET | `/{brand_id}/` | 获取品牌详情 |
| PUT | `/{brand_id}/` | 更新品牌 |
| DELETE | `/{brand_id}/` | 删除品牌 |
| GET | `/{brand_id}/score/` | 获取品牌评分 |
| GET | `/{brand_id}/score/history/` | 获取评分历史 |
| * | `/{brand_id}/competitors/...` | 竞品管理(子路由) |
### 查询词 `/api/v1/queries`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/` | 查询词列表(分页) |
| POST | `/` | 创建查询词 |
| GET | `/{query_id}` | 查询词详情 |
| PUT | `/{query_id}` | 更新查询词 |
| DELETE | `/{query_id}` | 删除查询词 |
| POST | `/{query_id}/run-now` | 立即执行检测 |
### 引用数据 `/api/v1/citations`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/` | 引用列表(支持按 query_id/platform/日期筛选) |
| GET | `/stats` | 引用统计 |
### 报告 `/api/v1/reports`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/export/csv` | 导出 CSV 报告 |
| GET | `/export/pdf` | 导出 PDF 报告 |
### Onboarding `/api/v1/onboarding`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/status` | 检查 Onboarding 状态 |
| POST | `/brand` | 创建品牌(简化版) |
| GET | `/competitor-recommendations` | 竞品推荐 |
| GET | `/health-report/{brand_id}` | 品牌健康报告 |
| GET | `/action-suggestions/{brand_id}` | 行动建议 |
| POST | `/complete/{brand_id}` | 完成 Onboarding |
### 内容生产 `/api/v1/content`
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/generate` | 一键生成内容Pipeline生成→去AI化→GEO优化 |
| POST | `/generate-topics` | AI 选题生成 |
### 内容管理 `/api/v1/contents`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/` | 内容列表(分页、筛选) |
| POST | `/` | 创建内容 |
| GET | `/{content_id}` | 内容详情 |
| PUT | `/{content_id}` | 更新内容 |
| DELETE | `/{content_id}` | 删除内容 |
| POST | `/{content_id}/publish` | 发布内容 |
| GET | `/knowledge/` | 品牌知识库条目列表 |
| POST | `/knowledge/` | 创建品牌知识库条目 |
| PUT | `/knowledge/{knowledge_id}` | 更新品牌知识库条目 |
| DELETE | `/knowledge/{knowledge_id}` | 删除品牌知识库条目 |
### 知识库 `/api/v1/knowledge`
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/bases` | 创建知识库 |
| GET | `/bases` | 列出知识库 |
| GET | `/bases/{kb_id}` | 知识库详情 |
| DELETE | `/bases/{kb_id}` | 删除知识库 |
| POST | `/bases/{kb_id}/documents` | 上传文档 |
| GET | `/bases/{kb_id}/documents` | 列出文档 |
| DELETE | `/bases/{kb_id}/documents/{doc_id}` | 删除文档 |
| GET | `/bases/{kb_id}/documents/{doc_id}/chunks` | 查看文档分块 |
| POST | `/search` | RAG 语义检索 |
### 仪表盘 `/api/v1/dashboard`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/stats` | 仪表盘统计(综合评分、维度、平台、竞品对比) |
### 内容分发 `/api/v1/distribution`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/platforms` | 支持平台列表 |
| POST | `/validate` | 内容合规校验 |
| POST | `/strategy` | 生成发布策略 |
| POST | `/format` | 内容格式化 |
| POST | `/schedule` | 创建发布排期 |
### 监测优化 `/api/v1/analytics`
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/publish` | 记录内容发布 |
| PUT | `/metrics/{publish_id}` | 更新效果指标 |
| GET | `/overview` | 全局效果概览 |
| GET | `/content/{publish_id}` | 单内容详细表现 |
| GET | `/top` | 表现最好内容排行 |
| GET | `/insights` | 洞察列表 |
| POST | `/insights/generate` | AI 生成洞察 |
| POST | `/insights/{insight_id}/apply` | 标记洞察已应用 |
### 告警通知 `/api/v1/alerts`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/` | 告警列表(支持类型/严重程度/已读状态/品牌筛选) |
| GET | `/unread-count` | 未读告警数 |
| PATCH | `/read-all` | 全部标为已读 |
| PATCH | `/{alert_id}/read` | 单条标为已读 |
| GET | `/settings` | 告警设置列表 |
| PUT | `/settings` | 批量更新告警设置 |
| PUT | `/settings/{setting_id}` | 更新单条告警设置 |
### 客户管理 `/api/v1/clients`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/` | 客户列表 |
| POST | `/` | 创建客户 |
| GET | `/{client_id}` | 客户详情 |
| PUT | `/{client_id}` | 更新客户 |
| DELETE | `/{client_id}` | 删除客户 |
| GET | `/{client_id}/projects` | 客户下的项目列表 |
### 生命周期 `/api/v1/lifecycle`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/projects/` | 项目列表 |
| GET | `/projects/stats` | 项目统计 |
| POST | `/projects/quick-start` | 快速创建项目 |
| GET | `/projects/{project_id}/timeline` | 项目时间线 |
| GET | `/projects/{project_id}/stages` | 项目阶段列表 |
| PUT | `/projects/{project_id}/stages/{stage_number}` | 更新阶段状态 |
### Agent 管理 `/api/v1/agents`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/` | 列出所有 Agent |
| GET | `/{agent_name}` | Agent 详情 |
| GET | `/{agent_name}/config` | Agent 配置 |
| PUT | `/{agent_name}/config` | 更新 Agent 配置 |
| GET | `/tasks/` | 任务列表 |
| POST | `/tasks/` | 创建任务(分发给 Agent |
| GET | `/tasks/{task_id}` | 任务状态 |
| POST | `/tasks/{task_id}/cancel` | 取消任务 |
| GET | `/tasks/{task_id}/logs` | 任务日志 |
### 订阅 `/api/v1/subscriptions`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/plans` | 套餐列表 |
| GET | `/current` | 当前订阅 |
| POST | `/subscribe` | 订阅套餐 |
| POST | `/cancel` | 取消订阅 |
| GET | `/history` | 订阅历史 |
### 管理员 `/api/v1/admin`(需管理员权限)
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/stats` | 系统统计 |
| GET | `/users` | 用户列表(分页、搜索) |
| GET | `/users/{user_id}` | 用户详情 |
| POST | `/users/{user_id}/toggle-active` | 启用/禁用用户 |
| PUT | `/users/{user_id}/update-plan` | 更新用户套餐 |
---
## 五、监控与运维
### 5.1 健康检查
- `GET /health` — 基础存活检查Liveness不依赖外部服务
- `GET /ready` — 依赖就绪检查Readiness检测 DB + Redis 连通性
- 返回 `200` + `{"status": "ready"}` 表示全部就绪
- 返回 `503` + `{"status": "not_ready"}` 表示依赖异常
### 5.2 日志
- 结构化 JSON 日志(`setup_logging()` 在启动时初始化)
- 每个请求附带 `X-Request-ID`(由 `RequestIdMiddleware` 注入)
- 慢请求(>1s自动告警
- 中间件执行链RequestId → Metrics → RateLimit → RequestLogging → CORS → SecurityHeaders
### 5.3 安全特性
- JWT 认证 + 用户级数据隔离(所有查询均按 `current_user.id` 过滤)
- 用户+IP 组合限流(`RateLimitMiddleware`
- Agent 并发控制Semaphore
- LLM 令牌桶限流30 RPM
- 安全响应头:`X-Content-Type-Options: nosniff`、`X-Frame-Options: DENY`、`X-XSS-Protection: 1; mode=block`
- 统一异常处理(不泄漏内部错误详情)
- 密码重置/邮箱验证等敏感操作防止用户枚举