feat: enhance UI, refactor services, improve templates and tests
- Replace image_extractor with pdf_image_extractor service - Enhance pi_client with expanded API capabilities - Improve summarizer service with additional features - Update admin routes with more endpoints - Add login page template - Enhance detail page with comprehensive layout - Improve search and trends pages - Update base template with additional elements - Refactor tests for better coverage - Add validate_summary script - Update project configuration and dependencies
This commit is contained in:
@@ -49,6 +49,7 @@ paper/
|
||||
├── pyproject.toml
|
||||
│
|
||||
├── app/
|
||||
│ ├── __init__.py
|
||||
│ ├── main.py # FastAPI 入口(lifespan 管理)
|
||||
│ ├── config.py # pydantic-settings 配置加载
|
||||
│ ├── database.py # SQLAlchemy 引擎、会话与 FTS5
|
||||
@@ -57,6 +58,7 @@ paper/
|
||||
│ ├── cli.py # Typer CLI(crawl / summarize / init-db)
|
||||
│ │
|
||||
│ ├── routes/ # 页面与 API 路由
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── pages.py # 首页、日期页、论文详情
|
||||
│ │ ├── admin.py # Token 鉴权管理接口
|
||||
│ │ ├── search.py # 搜索、阅读列表、RSS
|
||||
@@ -65,6 +67,7 @@ paper/
|
||||
│ │ └── compare.py # 论文对比页
|
||||
│ │
|
||||
│ ├── services/ # 业务逻辑层
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── crawler.py # HuggingFace API 爬虫
|
||||
│ │ ├── summarizer.py # AI 总结编排
|
||||
│ │ ├── searcher.py # FTS5 + 语义搜索
|
||||
@@ -103,7 +106,7 @@ paper/
|
||||
│ ├── init_db.py # 数据库初始化
|
||||
│ └── manual_crawl.py # 手动抓取脚本
|
||||
│
|
||||
├── tests/ # 10 个测试模块
|
||||
├── tests/ # 9 个测试模块
|
||||
│ ├── conftest.py # 测试夹具(内存 DB、样本数据)
|
||||
│ └── test_*.py # 各模块测试
|
||||
│
|
||||
@@ -117,7 +120,7 @@ paper/
|
||||
### 1. 准备环境
|
||||
|
||||
- Python **3.12+**
|
||||
- 可选:[`pi`](https://github.com/) CLI(用于 AI 总结)
|
||||
- 可选:[`pi`](https://www.npmjs.com/package/@mariozechner/pi-coding-agent) CLI(用于 AI 总结)
|
||||
|
||||
### 2. 安装依赖
|
||||
|
||||
@@ -139,14 +142,30 @@ cp .env.example .env
|
||||
| 变量 | 默认值 | 说明 |
|
||||
|------|--------|------|
|
||||
| `APP_HOST` / `APP_PORT` | `127.0.0.1` / `8000` | 服务监听地址 |
|
||||
| `APP_DEBUG` | `false` | 调试模式(开启 uvicorn reload) |
|
||||
| `BASE_URL` | `http://127.0.0.1:8000` | 站点根 URL(用于 RSS 生成) |
|
||||
| `APP_TIMEZONE` | `Asia/Shanghai` | 时区 |
|
||||
| `ADMIN_TOKEN` | `change-me` | **必须修改** — 管理接口鉴权 |
|
||||
| `HF_API_BASE` | `https://huggingface.co/api` | HuggingFace API 地址 |
|
||||
| `HF_PROXY` | — | HTTP 代理 |
|
||||
| `TOP_N` | `20` | 每日抓取 Top N 论文 |
|
||||
| `HTTP_TIMEOUT_SECONDS` | `30` | HTTP 请求超时 |
|
||||
| `HTTP_MAX_RETRIES` | `3` | HTTP 最大重试次数 |
|
||||
| `PI_BIN` | — | `pi` CLI 路径 |
|
||||
| `SUMMARY_SKILL` | `daily-paper-summary` | pi 总结技能名 |
|
||||
| `SUMMARY_CONCURRENCY` | `3` | 最大并行总结数 |
|
||||
| `SUMMARY_TIMEOUT_SECONDS` | `300` | 单篇总结超时 |
|
||||
| `SUMMARY_MAX_RETRIES` | `1` | 总结最大重试次数 |
|
||||
| `SCHEDULER_ENABLED` | `false` | 启用每日自动抓取 |
|
||||
| `SCHEDULE_HOUR` / `SCHEDULE_MINUTE` | `8` / `0` | 定时任务时间(Asia/Shanghai) |
|
||||
| `SCHEDULE_HOUR` / `SCHEDULE_MINUTE` | `8` / `0` | 定时任务时间(APP_TIMEZONE) |
|
||||
| `APP_WORKERS` | `1` | Uvicorn worker 数(必须为 1) |
|
||||
| `DATABASE_URL` | `sqlite:///data/db/papers.db` | 数据库路径 |
|
||||
| `CHROMA_ENABLED` | `false` | 启用语义搜索 |
|
||||
| `PI_BIN` | — | `pi` CLI 路径 |
|
||||
| `SUMMARY_CONCURRENCY` | `3` | 最大并行总结数 |
|
||||
| `CHROMA_DIR` | `data/chroma` | ChromaDB 数据目录 |
|
||||
| `EMBED_API_BASE` | — | Embedding API 地址 |
|
||||
| `EMBED_API_KEY` | — | Embedding API Key |
|
||||
| `EMBED_MODEL` | — | Embedding 模型名 |
|
||||
| `EMBED_DIMENSIONS` | `0` | 向量维度 |
|
||||
|
||||
### 4. 初始化数据库
|
||||
|
||||
@@ -158,10 +177,10 @@ python scripts/init_db.py
|
||||
### 5. 启动服务
|
||||
|
||||
```bash
|
||||
uvicorn app.main:app --host 127.0.0.1 --port 8000 --workers 1
|
||||
uvicorn app.main:app --host 127.0.0.1 --port 8000
|
||||
```
|
||||
|
||||
> 调度器依赖单 worker:`--workers` 必须为 `1`,否则每日任务会被重复触发。
|
||||
> 调度器依赖单 worker:不可使用 `--workers > 1`,否则每日任务会被重复触发。
|
||||
|
||||
打开浏览器访问 `http://127.0.0.1:8000` 即可。
|
||||
|
||||
@@ -172,9 +191,9 @@ uvicorn app.main:app --host 127.0.0.1 --port 8000 --workers 1
|
||||
### 手动抓取指定日期
|
||||
|
||||
```bash
|
||||
python scripts/manual_crawl.py --date 2025-01-15
|
||||
python scripts/manual_crawl.py 2025-01-15
|
||||
# 或
|
||||
python -m app.cli crawl --date 2025-01-15 --top 20
|
||||
python -m app.cli crawl 2025-01-15 --top 20
|
||||
```
|
||||
|
||||
### 手动触发总结
|
||||
|
||||
Reference in New Issue
Block a user