feat(server): Web 服务化(FastAPI + SQLite + 内嵌零构建前端)

参赛成果物 03「交互界面 + 数据存储」落地:
- src/genesis/server/: store.py(SQLite 会话持久化)、service.py(会话化服务层:
  上传→解析→确认→影响→确认→生成→QA)、app.py(api-design §2 核心端点 9 组)、
  static/index.html(内嵌单页,零构建无 node_modules 依赖)
- scripts/serve.py 启动入口(--fake 离线引擎 / 默认真实 LLM)
- pyproject 加 fastapi/uvicorn/python-multipart
- 修复 qa_loop._build meta={} 导致真实模板 {{doc_title}} 等占位符残留 DocxInjectError
- README Web 服务说明 + service_url 登记指引;design.md §12.5 记录(含同步执行/
  zip 既有系统/无 WebSocket 的诚实偏差标注)
- 测试:test_server_store/service/api 共 34 用例(TestClient 全链路 + zip 影响流程 + 错误分支)
全量 pytest 473 passed / 99.20%
This commit is contained in:
lhl
2026-08-26 22:13:19 +08:00
parent a1fefd43eb
commit 215c605650
14 changed files with 1474 additions and 1 deletions
+21
View File
@@ -123,6 +123,27 @@ python scripts/run_trial.py `
**中文场景注意**:若规则文档(作成说明书/记入规则)仍为日文,`auto` 推导会倾向日文——请显式
`--output-language zh`,不要依赖 auto。
## Web 服务(交互界面,成果物 03)
Genesis 提供 **FastAPI Web 服务 + 内嵌零构建前端**(上传 → 解析确认 → 影响确认 → 生成 → QA → 预览/下载),
会话/文件/结果持久化到 SQLite(`data/server/`)。
```powershell
# 离线 Fake 引擎(无需 API key,适合演示)
python scripts/serve.py --fake
# 真实 LLM 模式(需 .env 配置 GENESIS_INFERENCE__API_KEY
python scripts/serve.py
```
- 访问 `http://127.0.0.1:8000/` 使用页面;API 文档 `http://127.0.0.1:8000/docs`
- 主要端点:`POST /api/sessions``POST /api/sessions/{id}/files`multipart)、
`POST .../start-parse``POST .../confirm-parse``POST .../start-impact``POST .../confirm-impact`
`POST .../generate`body `{"output_language":"auto|zh|ja"}`)、`POST .../run-qa`
`GET .../result/preview|download|impact-report|qa-report`
- **既有系统**以 `.zip` 上传(追加/改修场景);不传则影响调查跳过
- 部署到公网后登记 `service_url`(格式 `http://<域名或公网IP>:<端口>`)供评审系统 B 阶段黑盒冒烟
## 测试
```powershell