Skip to content

12_Tech_Actions_Operations

youngcan edited this page Jun 1, 2026 · 4 revisions

GitHub Actions 运维

本篇是定时任务排障指南——"任务为什么没跑"或"跑挂了怎么查"。

当前 workflow 完整清单见 docs/ARCHITECTURE.md


1. 核心定时任务

任务 北京时间 UTC cron 主脚本
Wyckoff Funnel 周一-周五 18:25 25 10 * * 1-5 scripts/daily_job.py
Signal Feedback 周一-周五 23:30 30 15 * * 1-5 scripts/signal_feedback_job.py
Wyckoff Funnel HK 周一-周五 16:35 35 8 * * 1-5 scripts/market_funnel_job.py --market hk
Wyckoff Funnel US 周二-周六 05:35 35 21 * * 1-5 scripts/market_funnel_job.py --market us
Premarket Risk 周一-周五 08:20 20 0 * * 1-5 scripts/premarket_risk_job.py
Backtest Grid 每月 1/15 04:00 0 20 1,15 * * scripts/backtest_runner.py

Wyckoff Funnel 与 Signal Feedback 的关系

sequenceDiagram
  participant Funnel as Wyckoff Funnel 18:25
  participant DB as Supabase
  participant Feedback as Signal Feedback 23:30
  Funnel->>DB: 读取上一轮 health / registry
  Funnel->>Funnel: 跑漏斗、AI 研报、OMS
  Funnel->>DB: 写 signal_observations
  Feedback->>DB: 读 signal_observations
  Feedback->>DB: 写 outcomes / health / registry
  Note over DB,Funnel: 下一轮漏斗读取新的策略状态
Loading

这两个 workflow 是独立定时任务,不会自动互相等待。当前错峰设计是“漏斗先产样本,feedback 晚上验收,下一轮漏斗使用结果”。如果手动触发导致重叠,feedback 只处理当时已经落库的数据,漏掉的 observation 会在下一次 feedback 补上。


2. Secrets 配置

必需

Secret 用途
FEISHU_WEBHOOK_URL 飞书推送
GEMINI_API_KEY AI 研报模型
TUSHARE_TOKEN A 股行情降级源
TICKFLOW_API_KEY TickFlow A 股 / 港股 / 美股行情

可选

Secret 用途
SUPABASE_URL / SUPABASE_SERVICE_ROLE_KEY / SUPABASE_USER_ID 云端持仓同步
TG_BOT_TOKEN / TG_CHAT_ID Telegram 推送
RAG_SEMANTIC_PROVIDER / RAG_SEMANTIC_API_KEY / RAG_SEMANTIC_MODEL / RAG_SEMANTIC_BASE_URL RAG 防雷的可选语义否决模型;默认新闻检索走 akshare,无需额外 key
OPENAI_API_KEY 或其它 *_API_KEY / *_MODEL / *_BASE_URL 兼容 OpenAI 协议的备用模型

注意:Actions 通过 Secrets 注入环境变量,和本地 .env 文件无关。

Variables 配置

Variable 推荐值 用途
FUNNEL_DYNAMIC_POLICY shadow 控制动态策略:off 静态、shadow 旁路观察、on 正式生效。

FUNNEL_DYNAMIC_POLICY 不是密钥,优先放 GitHub Variables;workflow 也兼容同名 Secret。


3. 常见故障和排查

Secret 缺失或过期

日志特征配置缺失: ... 或模型调用返回 401

处理:去 GitHub → Settings → Secrets 检查对应变量是否存在且有效。

数据源超时

现象:运行时间比平时长很多

处理:A 股日线有自动降级机制(tickflow → tushare → akshare → baostock → efinance),通常自愈。港股 / 美股目前依赖 TickFlow,失败时优先检查 TickFlow key、套餐权限和请求频次。

tushare IP 超限

日志特征您的IP数量超限,最大数量为2个!

原因:多个并行 job 同时访问 tushare。

处理:确保回测用两阶段架构(Phase 1 单 job 拉数据 → Phase 2 并行格读快照)。不要让多个 job 直接调 tushare。

回测快照缺失

日志特征snapshot missing file: .../hist_full.csv.gz

原因:Phase 1 的 upload-artifact 路径和 Phase 2 的 download-artifact 路径不一致。

处理:检查 workflow yml 里 artifact 的 path 配置。

Step4 被跳过

原因:未配置 SUPABASE_USER_ID 或 Telegram 参数。Step4 按设计跳过——这不是故障。

Signal Feedback 没有更新动态策略

排查顺序

  1. 检查 signal_observations 是否有最近样本。
  2. 检查 signal_outcomes.status 是否仍大量为 pending
  3. 检查 signal_health_daily.sample_count 是否低于阈值。
  4. 检查 signal_registry.status 是否把信号置为 EXPERIMENTALRETIRED
  5. 如果漏斗没有写 signal_policy_shadow_runs,确认 FUNNEL_DYNAMIC_POLICY=shadow 是否已配置到 GitHub Variables / Secrets。

合规简报降级

现象:收到的是模板格式的简报而非 AI 生成的

原因:合规简报模型未配置 / 模型调用失败 / 输出触发合规校验。降级为本地模板是正常保护行为,不影响主研报。


4. 运维建议

  • 改完策略参数后,先手动触发一次 workflow 做 dry run
  • 关注 Actions 页面的 Artifacts 输出,回测结果会存在那里
  • 关键版本变更后,固定 snapshot 跑一轮回测确认效果

Clone this wiki locally