feat: 日报结构化入库(M10 前后端分离数据层)

- 新增 report_db 包: MySQL 连接/建表/幂等写入 (news_report/news_event, myquant 库)
- 新增 report_import 包: 历史 178 份日报 HTML 解析入库, 表头驱动列映射
- reporter.py 完全切换: generate_report 结构化入库, 不再生成/上传 HTML
- CLI: 新增 report-import 子命令
- 依赖: uv add pymysql; 配置: NEWS_DB_* / REPORT_HISTORY_DIR
- 文档: docs/report_db_design.md(实现逻辑), docs/db_schema.md(表结构供 API/前端)
- 测试: 24 个单测通过 (parser/builder/models/importer)
This commit is contained in:
2026-08-03 21:32:07 +08:00
parent f2c80c5a9c
commit 366e60e8a9
25 changed files with 1934 additions and 33 deletions
+36 -1
View File
@@ -229,7 +229,7 @@ MAX_IMPORTANCE = 5
统一使用:
logging
loguru(现有代码全部使用 loguru,禁止混用 stdlib logging
禁止:
@@ -623,5 +623,40 @@ Claude Code 完成任务时必须输出:
“小步迭代、稳定演进、长期维护”。
# 二十一、项目现状速查(2026-07 校验)
## 入口与常用命令
- 统一 CLI`uv run a-share <子命令>`,入口 `a_share_cli/main.py`
- 子命令:`crawl` / `extract` / `dedup` / `events` / `embed` / `ingest` / `pipeline --once` / `search` / `report` / `status` / `discover`
- 测试:`uv run pytest`tests/asyncio_mode=autointegration 标记默认跳过)
- 静态检查:`uv run ruff check .``uv run mypy`pyproject.toml 已配置)
- 环境:`uv sync`;本地 BGE-M3 需 `uv sync --extra local-embedding`
## 架构(9 个包)
| 包 | 职责 |
| --- | --- |
| crawler | Crawl4AI 抓取;js_render=false 走 httpx 静态直连,否则 Playwright;含 cninfo 公告 |
| extractor | GNE 中文正文提取 |
| dedup | 新闻去重(SimHash |
| llm | DeepSeek/Qwen 投资事件抽取 |
| embedding | 远程 DashScope / 本地 BGE-M3 |
| vectorstore | Qdrant;默认本地文件模式 data/qdrant_storage/ |
| scheduler | APScheduler 调度 + pipeline + 日报 reporter |
| mcp_server | MCP 工具(供 Cherry Studio |
| api | 占位(空包) |
scripts/ 为独立运行脚本 + systemd 服务文件 `scripts/a-share-research.service`
## 关键约束与事实
- LLM 模型 `deepseek-v4-flash` 绝不允许修改(记忆:never-change-llm-model
- 生产部署:Pi `pi@192.168.1.160:/home/pi/news/`systemd 服务 `a-share-research`;改动后需 scp 同步
- 改 sources.yaml 前先从 Pi 拉取、改完推回(记忆:sync-sources-yaml
- 配置在 configs/sources.yaml、configs/watchlist.yaml、.envAPI Key 只放 .env
- Prompt 在 prompts/*.md,禁止写死在代码中
- 会话恢复上下文以 continuation.md 为准
—— CLAUDE.md 结束 ——