Files
gaokao-volunteer-system/docs/ARCHITECTURE.md
Hermes Agent 3f46811e49
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
release: cut v2.1
2026-06-13 14:49:58 +08:00

397 lines
9.5 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.
# 架构设计(当前实现视角)
本文档描述 2026-06-13 当前仓库中已经落地、可验证的系统架构。
一句话定位:
- 这不是“完整用户端 Web 自助闭环产品”
- 这是一个“管理后台 + 订单/分享/渠道同步 + AI 审核链路”的可运行系统
---
## 1. 架构总览
```text
┌──────────────────────────────────────────────────────────────┐
│ 接入与交互层 │
│ Hermes Skills CLI Scripts Admin FastAPI Share Page │
└───────────────┬───────────────┬───────────────┬──────────────┘
│ │ │
┌───────────────▼──────────────────────────────────────────────┐
│ 应用服务层 │
│ AI审核编排 订单服务/状态机 分享权限 渠道同步 统计聚合 │
└───────────────┬──────────────────────────────────────────────┘
┌───────────────▼──────────────────────────────────────────────┐
│ 数据与持久化层 │
│ SQLite(admin/orders/cases/share) + JSON crowd_db + 模板/静态 │
└──────────────────────────────────────────────────────────────┘
```
核心结论:
- 管理后台与人工服务交付链已经形成主链
- AI 审核从解析 → 规则检查 → 扎堆检测 → 报告输出已经形成统一入口
- 分享、渠道同步、订单状态机都已有独立模块与测试
- 用户端 Web 自助注册/下单/支付/资料填写/站内交付主链仍缺失
---
## 2. 分层设计
### 2.1 接入与交互层
当前存在 4 类入口:
1. Hermes Skills
- `skills/gaokao-college-advisor/`
- `skills/gaokao-spec-checker/`
- `skills/gaokao-audit/`
2. CLI
- `scripts/gaokao-quick-3min.py`
- `scripts/gaokao-order-manager`
- `scripts/gaokao-data-trace`
- `scripts/gaokao-channel-fallback`
3. 管理后台 HTTP API
- `admin/app.py`
- `admin/routes/*`
4. 极简页面
- `admin/static/dashboard.html`
- `GET /dashboard`
- `GET /s/{code}` 分享页
设计意图:
- 人工顾问/运营同学优先走后台与 CLI
- Hermes 对话场景优先走 Skills
- 对外公开访问当前仅限分享页,不等同于完整用户前台
---
### 2.2 应用服务层
#### A. AI 审核链路
主要模块:
- `skills/gaokao-audit/scripts/plan_parser.py`
- `skills/gaokao-audit/scripts/checker_integration.py`
- `skills/gaokao-audit/scripts/audit_service.py`
- `skills/gaokao-audit/scripts/report_generator.py`
- `skills/gaokao-audit/scripts/audit_cli.py`
- `data/crowd_db/crowd_detector.py`
- `data/crowd_db/risk_report.py`
处理链路:
```text
方案文本/PDF提取/OCR
→ 方案解析
→ 省份规则检查
→ 扎堆风险检测
→ 风险/问题聚合
→ HTML/PDF/JSON 报告输出
```
说明:
- 当前 AI 审核主链已经不是“只有零散脚本”
- `audit_cli.py` 是统一编排入口
- T5.1 已用端到端测试覆盖“输入方案 → 输出 PDF/JSON 审核报告”主链
#### B. 订单与交付链路
主要模块:
- `data/orders/models.py`
- `data/orders/dao.py`
- `data/orders/state_machine.py`
- `data/orders/cli.py`
- `admin/routes/orders.py`
职责拆分:
- `models.py`:订单数据模型
- `dao.py`SQLite 持久化、查询、事务、历史记录
- `state_machine.py`:状态合法性约束
- `cli.py` / `routes/orders.py`:两种入口,共用同一底层规则
状态机:
```text
pending → paid → serving → delivered → completed
└──────────────→ refunded
```
关键原则:
- 不允许绕过状态机直接改状态
- HTTP 与 CLI 写路径都应落到 DAO + 状态机
- 敏感字段默认脱敏展示
#### C. 分享能力
主要模块:
- `data/share/short_link.py`
- `data/share/permission.py`
- `admin/share_page.py`
- `admin/routes/ui.py`
能力:
- 短链接生成与解析
- `read/comment/edit/admin` 权限模型
- 报告字段裁剪与脱敏
- 公开分享页渲染
设计定位:
- 服务于“人工交付后的分享/查看”
- 不是完整协作式前台产品
#### D. 渠道同步
主要模块:
- `data/channel_sync/webhook_server.py`
- `data/channel_sync/xianyu_adapter.py`
- `data/channel_sync/poller.py`
- `data/channel_sync/audit.py`
- `data/channel_sync/monitor.py`
能力:
- 闲鱼 webhook 接单
- poller 兜底补偿
- webhook 审计日志
- 渠道健康巡检与人工 fallback 模板
设计原则:
- 自动接单优先
- 审计留痕
- 异常时可回落到人工补录
#### E. 后台统计与运营视图
主要模块:
- `admin/stats.py`
- `admin/routes/stats.py`
- `admin/routes/users.py`
- `admin/routes/cases.py`
- `admin/routes/meta.py`
能力:
- 仪表盘汇总
- 订单/来源/服务版本分布
- 时间趋势
- 用户列表与案例管理
- 前端枚举元数据输出
---
### 2.3 数据与持久化层
#### SQLite
1. 管理后台库
- 默认:`data/orders/admin.db`
- 内容管理员、后台业务表、cases 等
2. 订单库
- 默认:`data/orders.db`
- 内容:订单主表、状态历史、渠道同步相关辅助表
3. 分享/短链数据
-`data/share/short_link.py` 管理,实际落在 SQLite
#### JSON / Markdown 数据
1. crowd_db
- 路径:`data/crowd_db/`
- 内容:院校推荐、来源、置信度、年份等
2. 规则与案例文档
- 路径:`rules/``docs/``product/`
#### 模板与静态资源
- 审核报告模板:`skills/gaokao-audit/templates/audit_report.html`
- 分享页/后台静态资源:`admin/static/*`
---
## 3. 核心运行链路
### 3.1 人工服务主链(当前已落地)
```text
渠道线索/人工录单
→ 订单入库
→ 顾问生成方案
→ AI审核
→ PDF/JSON/方案文件归档
→ 订单推进到 delivered/completed
→ 可选分享页分发
```
这是当前仓库最成熟、最贴近真实运行的主链。
### 3.2 后台运营主链(当前已落地)
```text
管理员登录
→ 查看仪表盘/用户/订单/案例
→ 人工录单或补录
→ 状态流转/退款/导出
→ 跟踪渠道与交付情况
```
### 3.3 数据溯源查询链(当前已落地)
```text
输入院校名
→ crowd_db 加载各省数据
→ 匹配学校/专业
→ 返回来源、年份、置信度、分数段、替代建议
```
### 3.4 性能验证链T5.2 已落地)
```text
quick-3min 解析+总结+推荐
→ 100 次基准执行
→ 断言总耗时 < 5s
admin FastAPI
→ Locust 10 并发压测
→ 断言聚合成功率 > 95%
```
---
## 4. 当前未落地主链
以下能力仍不应被本文档误描述为“已完成”:
1. 用户端 Web 前台
- 用户注册/登录
- 用户自主下单/支付
- 站内资料填写
- 用户自助查看报告/订单进度
2. 完整产品化闭环
- 面向最终考生/家长的独立前端应用
- 完整邮件/站内消息交付系统
- 自助支付后的自动任务编排闭环
因此,当前系统真实定位应是:
- 内部运营与人工服务增强系统:已成形
- 面向最终用户的完整产品:未完成
---
## 5. 安全与边界
### 5.1 已有防护
- JWT 鉴权
- 生产环境 JWT 弱密钥阻断
- 管理员弱口令在 prod 阻断
- 订单敏感字段加密存储
- 默认脱敏输出
- 分享页权限分级
### 5.2 已知风险(截至当前评审)
- 渠道 webhook 的 `X-Forwarded-For` 信任边界仍需收紧
- 登录接口节流/锁定能力不足
- CI 不能完整代表 clean env 下的后台可构建性
- 类型门禁与覆盖率门禁仍未完全闭环
这些属于“工程质量与安全债”,不改变主链已存在的事实,但影响生产可交付性评级。
---
## 6. 部署形态
### 6.1 本地运行
```bash
pip install -r requirements-admin.txt -r requirements-dev.txt
export GAOKAO_JWT_SECRET="$(python3 -c 'import secrets; print(secrets.token_hex(32))')"
python3 -m admin.app --port 8000
```
### 6.2 Docker Compose
已提供:
- `Dockerfile`
- `docker-compose.yml`
- `.env.docker.example`
适用场景:
- 本机自测
- 单机部署验证
不应误解为:
- 已具备完整云原生、多副本、自动扩缩容架构
---
## 7. 真相源优先级
当文档与实现冲突时,按以下顺序判断:
1. 代码与实跑结果
2. OpenAPI / CLI `--help`
3. 测试文件(尤其 `tests/test_t5_e2e_workflows.py``tests/test_t5_performance.py`
4. README / CHANGELOG
5. 本文档
6. 历史评审/历史计划文档
---
## 8. 验证命令
### 8.1 启动后台
```bash
python3 -m admin.app --port 8000
curl http://127.0.0.1:8000/health
curl http://127.0.0.1:8000/openapi.json
```
### 8.2 复核 T5 主链
```bash
python3 -m pytest tests/test_t5_e2e_workflows.py tests/test_t5_performance.py -q
```
### 8.3 复核后台接口存在性
```bash
python3 -m pytest admin/tests/test_routes.py admin/tests/test_routes_orders.py admin/tests/test_routes_stats_dashboard.py -q
```