Files
simon 366e60e8a9 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)
2026-08-03 21:32:07 +08:00

7.9 KiB
Raw Permalink Blame History

CLAUDE.md

Claude Code 开发约束(A股 Deep Research 项目)

版本:v1.0

最后更新:2026-06-16


一、项目定位

本项目目标:

构建一个面向 A 股投资研究的私有化 Deep Research 平台。

核心能力包括:

  • 财经新闻抓取;
  • 中文新闻提取;
  • 投资事件抽取;
  • 向量知识库;
  • MCP 服务;
  • Cherry Studio Agent 深度研究。

本项目不是:

  • 自动交易系统;
  • 股票预测系统;
  • 投资顾问系统。

Claude Code 必须始终围绕“研究辅助平台”进行设计。


二、Claude Code 总体行为准则

Claude Code 必须遵守以下原则:

2.1 分阶段开发

禁止一次性完成整个项目。

必须:

  • 每次只完成一个 Milestone
  • 等待人工验收;
  • 验收通过后再进入下一阶段。

禁止:

  • 擅自推进后续阶段;
  • 推翻已完成模块。

2.2 最小改动原则

修改代码时:

优先局部修改。

禁止:

为了优化而重写整个模块。

除非明确要求:

“允许重构”。

否则:

保持向后兼容。


2.3 先理解,再编码

开始编码前必须:

明确:

  • 当前目标;
  • 输入;
  • 输出;
  • 验收标准。

如果需求冲突:

必须先提问。

不得自行猜测。


三、开发环境规范

3.1 Python 版本

统一使用:

Python 3.11

禁止:

  • Python 3.13
  • Python 3.10 以下版本。

3.2 依赖管理

统一使用:

uv

禁止:

requirements.txt 手工维护。

依赖定义:

pyproject.toml

安装命令:

uv sync

新增依赖:

uv add 包名

开发依赖:

uv add --dev 包名


3.3 虚拟环境

统一使用:

.venv

禁止:

使用 Conda。

禁止:

多个虚拟环境混用。


四、代码规范

4.1 类型注解

所有新增代码必须包含类型注解。

示例:

def search_news( keyword: str, top_k: int ) -> list[dict]: ...

禁止:

省略类型。


4.2 中文说明

要求:

代码使用英文命名。

注释与文档使用中文。

例如:

新闻去重处理

def deduplicate_articles(): ...


4.3 函数长度

单个函数:

建议 ≤ 50 行。

超过:

必须拆分。


4.4 文件长度

单文件:

建议 ≤ 500 行。

超过:

必须拆分模块。


4.5 禁止魔法数字

禁止:

importance = 5

应写成:

MAX_IMPORTANCE = 5


五、日志规范

统一使用:

loguru(现有代码全部使用 loguru,禁止混用 stdlib logging

禁止:

print()

日志级别:

DEBUG

INFO

WARNING

ERROR

CRITICAL

日志格式:

时间 - 模块 - 级别 消息

示例:

2026-06-16 09:00:00 - crawler - INFO 开始抓取新浪财经


六、异常处理规范

禁止:

except: pass

必须:

记录日志。

抛出明确异常。

示例:

except Exception as e: logger.exception(e) raise


七、测试规范

新增功能必须提供测试。

优先使用:

pytest

测试目录:

tests/

命名:

test_xxx.py

测试覆盖:

核心模块必须覆盖。

包括:

  • crawler
  • extractor
  • dedup
  • qdrant
  • llm

八、配置规范

禁止硬编码。

配置统一放置:

configs/

支持:

YAML

环境变量

.env

禁止:

API Key 写入源码。


九、Prompt 管理规范

Prompt 必须独立维护。

目录:

prompts/

禁止:

在代码中直接拼接长 Prompt。

Prompt 文件命名:

event_extraction.md

company_analysis.md

industry_analysis.md

risk_analysis.md


十、数据模型规范

统一使用:

Pydantic

禁止:

大量裸 dict。

核心对象必须定义模型。

例如:

Article

Event

EmbeddingResult

SearchResult


十一、数据库规范

Qdrant 为唯一向量数据库。

SQLite 用于:

任务状态; 缓存; 调试。

禁止:

引入多种向量数据库。

除非用户明确要求。


十二、Docker 规范

所有服务必须支持 Docker。

必须提供:

docker-compose.yml

必须支持:

docker compose up -d

启动。

不得依赖:

手工安装。


十三、Git 提交规范

完成每个 Milestone 后:

更新:

README.md

continuation.md

docs/

提交信息格式:

feat: 新增功能

fix: 问题修复

refactor: 重构

docs: 文档更新

test: 测试

chore: 杂项

示例:

feat: 完成 Crawl4AI 新闻抓取模块


十四、README 更新规范

每次功能完成后:

README 必须更新:

包括:

功能说明;

部署方法;

配置说明;

示例命令;

常见问题。

禁止:

README 长期不维护。


十五、continuation.md 维护规范

Claude Code 每次结束工作前:

必须更新 continuation.md。

内容包括:

当前 Milestone

完成内容;

待办事项;

已知问题;

技术债务;

下次建议。

用于恢复上下文。


十六、性能要求

目标:

支持至少:

50 个财经新闻源。

支持:

并发抓取。

新闻处理吞吐:

≥100篇/分钟。

Qdrant 检索:

Top-K 响应时间 ≤ 2 秒。


十七、安全规范

禁止:

提交:

.env

API Key

Cookie

Token

个人隐私数据

必须:

提供:

.env.example

示例配置。


十八、禁止事项

Claude Code 禁止:

  1. 未经允许重构已验收模块;
  2. 一次性生成整个项目;
  3. 擅自修改数据库结构;
  4. 删除已有测试;
  5. 使用 print 调试;
  6. 忽略异常;
  7. 跳过验收直接进入下一阶段;
  8. 引入未经说明的新技术栈;
  9. 将 Prompt 写死在代码中;
  10. 编写无法运行的伪代码冒充完成。

十九、输出格式要求

Claude Code 完成任务时必须输出:

【任务目标】

【完成内容】

【修改文件】

【运行方法】

【测试结果】

【存在问题】

【下一步建议】

不得只输出代码。

必须提供可验证说明。


二十、最高优先级原则

当多个原则冲突时,优先级如下:

第一优先级:

代码正确、可运行。

第二优先级:

稳定性与可维护性。

第三优先级:

向后兼容。

第四优先级:

性能优化。

第五优先级:

代码优雅。

宁可代码普通,也不要复杂炫技。

本项目追求:

“小步迭代、稳定演进、长期维护”。

二十一、项目现状速查(2026-07 校验)

入口与常用命令

  • 统一 CLIuv run a-share <子命令>,入口 a_share_cli/main.py
  • 子命令:crawl / extract / dedup / events / embed / ingest / pipeline --once / search / report / status / discover
  • 测试:uv run pytesttests/asyncio_mode=autointegration 标记默认跳过)
  • 静态检查:uv run ruff check .uv run mypypyproject.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 结束 ——