## 2025-11-03 开发日志 **比较基线** - 上一次提交: b982cd5(2025-10-31 22:14 +0800,“更新前端配置、文档和脚本”) **今日概览** - 共修改 20 个文件:新增约 1047 行,删除约 616 行 - 关键主题: - 后端数据源抽象与路由重构(引入 DataManager 与多 Provider) - AI 分析模块的编排、依赖解析与流式输出接口 - 前端接入 Prisma(PostgreSQL)并新增报告存储 API 与页面 - 移除旧 Tushare 客户端实现,统一到新 Provider 架构 - 配置、依赖与开发脚本同步更新 --- ### 后端(FastAPI) **数据源抽象与管理** - 新增 `backend/app/data_manager.py`:集中加载 `config/data_sources.yaml`,根据市场(CN/US/HK/JP)优先级选择 Provider;提供统一的 `get_stock_basic`、`get_financial_statements`、`get_daily_price` 等方法。 - 新增 Provider 抽象与实现: - 抽象基类:`backend/app/data_providers/base.py` - 实现:`backend/app/data_providers/tushare.py`、`.../yfinance.py`、`.../finnhub.py`、`.../ifind.py` - Token 优先从环境变量读取,次选 `config/config.json`。 - 新增配置 `config/data_sources.yaml`:定义各数据源的 `api_key_env` 和各市场的优先顺序。 - 移除旧实现 `backend/app/services/tushare_client.py`。 **路由与业务逻辑重构** - `backend/app/routers/financial.py` 大幅重写: - `GET /data-sources`:返回需要密钥的数据源列表(用于前端指引)。 - 分析编排接口: - `POST /china/{ts_code}/analysis`:读取分析模块配置,拓扑排序按依赖顺序执行,汇总结果。 - `GET /china/{ts_code}/analysis/{analysis_type}`:单模块分析,自动解析依赖并注入上下文。 - `GET /china/{ts_code}/analysis/{analysis_type}/stream`:流式输出纯文本分析内容。 - `GET /analysis-config` 与 `PUT /analysis-config`:读取/更新 `config/analysis-config.json`。 - `GET /china/{ts_code}`:通过 `DataManager` 批量拉取多年度报表,聚合为前端所需的 `series` 结构。 - `GET /china/{ts_code}/company-profile`:使用 LLM 生成公司画像(非流式)。 **分析客户端** - `backend/app/services/analysis_client.py`:统一的 OpenAI 兼容客户端,支持: - 非流式生成:`generate_analysis(...)` - 流式生成:`generate_analysis_stream(...)` - 安全模板占位符替换与上下文合并;读写 `config/analysis-config.json`。 **应用入口与依赖** - `backend/app/main.py`: - 增强日志输出(自定义 Handler,开发期强制输出到 stdout)。 - 保持 CORS 全开与路由注册(`/api/v1/config/*`、`/api/v1/financials/*`)。 - `backend/requirements.txt`:补充 `yfinance`、`finnhub-python`、`pandas`、`PyYAML`、`asyncpg`、`greenlet` 等依赖。 --- ### 配置与文档 - `config/analysis-config.json`:更新分析模块配置(依赖、模型、模板)。 - `docs/user-guide.md`:小幅补充。 --- ### 前端(Next.js 15 / React 19) **Prisma 集成与报告 API** - 新增 Prisma: - `frontend/prisma/schema.prisma` 定义 `Report { id, symbol, content(Json), createdAt }`。 - `frontend/src/lib/prisma.ts` 提供 PrismaClient 单例。 - 依赖更新:`@prisma/client`、`prisma` 等;`package-lock.json` 同步。 - 新增 API: - `GET/POST /api/reports`:分页查询与创建报告(基本校验)。 - `GET /api/reports/[id]`:按 ID 获取报告。 **页面与其他改动** - `frontend/src/app/reports/page.tsx`:渲染报告列表并跳转至详情页 `reports/[id]`。 - 新增 `frontend/src/app/reports/[id]/page.tsx`:报告详情页。 - `frontend/src/app/report/[symbol]/page.tsx`:较大调整(生成/展示逻辑整合)。 - 其他微调:`layout.tsx`、`api/financials/[...slug]/route.ts`、`.gitignore`、`next.config.mjs`。 - 运行脚本端口:`npm run dev` 默认 3001。 --- ### 脚本 - `scripts/dev.sh`:增强启动/开发流程。 - 若干测试脚本小改:`scripts/test-*.py`。 - 新增过渡脚本 `scripts/tushare_legacy_client.py`(旧 Tushare 逻辑备份/兼容)。 --- ### 删除/新增(关键) - 删除:`backend/app/services/tushare_client.py`。 - 新增(尚未提交的工作副本): - 后端:`backend/app/data_manager.py`、`backend/app/data_providers/*` - 配置:`config/data_sources.yaml` - 前端:`frontend/prisma/schema.prisma`、`frontend/src/lib/prisma.ts`、`frontend/src/app/api/reports/*`、`frontend/src/app/reports/[id]/page.tsx` --- ### 备注 - 需确保各数据源的密钥通过环境变量或 `config/config.json` 正确配置。 - 分析模块配置(依赖与模板)变更需同步前后端约定。