feat(market): 添加市场分析数据基础架构和功能模块

- 新增市场分析相关数据库表结构,包括市场工具、每日报价、财务指标、
  宏观指标和公告等数据模型
- 创建市场分析相关的Alembic迁移脚本,包含完整的up和downgrade逻辑
- 集成市场分析路由到主API路由器中
- 添加市场数据定时任务调度,支持盘前、收盘和周度市场分析报告
- 实现市场数据后台任务队列,包含报告生成和收盘分析功能
- 扩展系统配置设置,添加市场分析启用开关和相关参数配置
- 增加AI智能技能支持,包含市场概览分析和股票分析功能
- 添加审计日志记录,支持市场数据同步和自选股更新操作追踪
- 实现飞书命令集成,支持股票分析、自选股管理、公告查询等交互
- 提供市场数据服务层,包含行业分析、股票对比、市场概览等功能
```
This commit is contained in:
2026-07-12 22:05:23 +08:00
parent 9cf7c44393
commit f8020cab56
28 changed files with 2704 additions and 60 deletions

View File

@@ -14,6 +14,8 @@ class AISkillId(StrEnum):
INVESTMENT_RESEARCH = "investment_research"
PROJECT_LIFECYCLE_ANALYSIS = "project_lifecycle_analysis"
PROJECT_FINANCE_NEEDS_ANALYSIS = "project_finance_needs_analysis"
MARKET_OVERVIEW_ANALYSIS = "market_overview_analysis"
STOCK_ANALYSIS = "stock_analysis"
HERMES_MEMORY_RECALL = "hermes_memory_recall"
HERMES_MEMORY_WRITE = "hermes_memory_write"
@@ -68,6 +70,16 @@ PROJECT_FINANCE_NEEDS_ANALYSIS_INSTRUCTIONS = (
"完成时限和验证指标;五、数据限制。所有安排必须标注需要人工确认。"
"不得把项目资金安排需求称为公司融资缺口,不得审批付款、融资或投资交易。"
)
MARKET_OVERVIEW_ANALYSIS_INSTRUCTIONS = (
"基于上下文中的A股指数、涨跌家数、成交额和行业数据生成中文市场研究。"
"输出总体判断、证据、前三项风险、关注行业、下一交易日观察指标和数据限制。"
"不得编造行情、保证收益或下交易指令。"
)
STOCK_ANALYSIS_INSTRUCTIONS = (
"基于上下文中的价格、收益、均线、波动率、回撤、估值和财务指标生成中文股票研究。"
"输出基本面、技术面、估值、三种情景、风险及后续跟踪指标。"
"不得给出保证性结论或自动交易指令,所有决策必须人工确认。"
)
HERMES_MEMORY_RECALL_INSTRUCTIONS = (
"Retrieve concise long-term memory, preferences, prior decisions, and relevant "
"business context for this request. Return only information useful to answer it."
@@ -98,6 +110,16 @@ AI_SKILLS: dict[AISkillId, AISkill] = {
source=AISkillSource.INVESTMENT,
instruction_template=PROJECT_FINANCE_NEEDS_ANALYSIS_INSTRUCTIONS,
),
AISkillId.MARKET_OVERVIEW_ANALYSIS: AISkill(
skill_id=AISkillId.MARKET_OVERVIEW_ANALYSIS,
source=AISkillSource.INVESTMENT,
instruction_template=MARKET_OVERVIEW_ANALYSIS_INSTRUCTIONS,
),
AISkillId.STOCK_ANALYSIS: AISkill(
skill_id=AISkillId.STOCK_ANALYSIS,
source=AISkillSource.INVESTMENT,
instruction_template=STOCK_ANALYSIS_INSTRUCTIONS,
),
AISkillId.HERMES_MEMORY_RECALL: AISkill(
skill_id=AISkillId.HERMES_MEMORY_RECALL,
source=AISkillSource.AI_MEMORY,