← 归档索引 · 2026-10-26 08:49 · 数据底座健康周报AI解读
# Cron Job: 数据底座健康周报AI解读
**Job ID:** 4fa4b21225e3
**Run Time:** 2026-10-26 08:49:56
**Schedule:** 30 8 * * 1
**Prompt Characters:** 5694
## Prompt
[IMPORTANT: You are running as a scheduled cron job. DELIVERY: Your final response will be automatically delivered to the user — do NOT use send_message or try to deliver the output yourself. Just produce your report/output as your final response and the system handles the rest. SILENT: If there is genuinely nothing new to report, respond with exactly "[SILENT]" (nothing else) to suppress delivery. [SILENT] is a literal ASCII control token — never translate or rephrase it, whatever language the rest of your answer uses. Never combine [SILENT] with content — either report your findings normally, or say [SILENT] and nothing more. FAILURE: If a delegated child fails and this cron run must be recorded as failed, put [CRON_FAILURE] on the first line by itself, then explain the child failure on following lines. RECURSION: This is a run of an EXISTING scheduled job — execute the task now. NEVER create or update a cron job because of recurring or future-schedule language in the task prompt below; treat phrasing like "each Monday" or "every day at 9" as context for this run, not as a request to schedule another job.]
## Output from job '723a717c52a9'
The following is the most recent output from a preceding cron job. Use it as context for your analysis.
```
# Cron Job: 6:30合并- 清晨维保+系统编排器心跳
**Job ID:** 723a717c52a9
**Run Time:** 2026-10-26 06:31:36
**Mode:** no_agent (script)
---
===== 合并任务 · 2026-10-26 06:30 =====
──[1/2] 清晨维保 ──
[06:30] 开始清晨维保...
→ 知识库索引更新...
构建 BM25 索引...
BM25 索引: 2354 篇文档 → /home/ubuntu/.hermes/knowledge/wiki.bm25
→ 系统诊断...
分数: 75/100 | F=73 D=45 E=65
缺口: 8个
报告已写入: /home/ubuntu/.hermes/stock_db/designer_report_latest.json
→ 系统健康自检...
结果: ✅ 全部正常 (11通过/0异常) 共 11 项
==================================================
→ 知识索引数据准备...
构建 BM25 索引...
BM25 索引: 2354 篇文档 → /home/ubuntu/.hermes/knowledge/wiki.bm25
📊 因果基因(脚本自证)
- 数据源: 本地知识库wiki/索引 + 系统诊断(system_designer_upgrade diagnose) + 每日健康自检(daily_health_check) + rebuild_knowledge_index
- 分析路径: 4步维保链: 知识库索引更新 → 系统诊断 → 健康自检 → 索引重建数据准备,PIPESTATUS取子脚本真退出码
- 判断: FAILED=0=维保全过;=1=标出失败步骤并以1退出,交cron记错与看门狗归因
[06:31] 清晨维保完成 ✅
✅ 清晨维保
──[2/2] 系统编排器心跳 ──
✅ 系统编排器心跳
结果: ✅2/❌0
```
## Output from job 'edb0a7f09bc2'
The following is the most recent output from a preceding cron job. Use it as context for your analysis.
```
# Cron Job: 数据底座六源探测-每日3:40(P1-4)
**Job ID:** edb0a7f09bc2
**Run Time:** 2026-10-26 03:41:42
**Mode:** no_agent (script)
---
wind edb ❌ 0.1s search failed: unknown
✅ 已保存: capability_matrix.json(85 项能力)
✅ 已保存: capability_details.json(全详情,供 hub.get_capability_probe() 查询)
矩阵: {"MX": ["realtime", "daily", "finance", "news", "us", "fund", "board", "select", "stock_select", "zixuan_query", "moni_assets"], "mootdx": ["minutes", "stocks", "block", "finance"], "tushare": ["daily", "weekly", "monthly", "daily_basic", "fina_indicator", "income", "stk_limit", "top10_holders", "index_daily", "stock_basic", "trade_cal", "adj_factor", "margin", "ths_index", "block_trade", "stock_company", "lhb", "macro", "forecast", "express", "concept", "ths_daily", "ths_member", "index_classif
📊 因果基因(脚本自证)
- 数据源: 四主源mootdx/tushare/mx/westock + 补充源gf_skills/ifind 全方法探测(probe_sources.py --save)
- 分析路径: 逐源逐方法探测可用性 → 回显探测摘要 → 刷新data/capability_matrix.json能力掩码供自动路由
- 判断: rc=0=能力矩阵已更新;rc非0=输出[ALERT]探测失败并以1退出,交看门狗归因
```
## Script Output
The following data was collected by a pre-run script. Use it as context for your analysis.
```
# 数据底座健康周报(2026-10-26,窗口 7 天)
| 源 | 类型 | 成功 | 失败 | 成功率 | 平均耗时 |
|:---|:-----|:----:|:----:|:------:|:-------:|
| mootdx | daily | 0 | 1115 | 0% | 0.00s | ⚠️已知(bars 协议失效(8/3 连带),tushare→mootdx→westock 兜底链中 mootdx 段必空,westock 主路已覆盖)
| mootdx | finance | 10 | 0 | 100% | 0.00s |
| mootdx | minutes_realtime | 8 | 7 | 53% | 0.00s |
| mootdx | realtime | 0 | 5 | 0% | 0.00s | ⚠️已知(quotes 协议失效(8/3),CAPABILITIES=False,路由已绕开)
| mx | daily_fallback | 0 | 816 | 0% | 0.00s | 🔥
| mx | realtime | 0 | 4 | 0% | 21.69s | 🔥
| mx | realtime_batch | 0 | 9 | 0% | 1.74s | 🔥
| tushare | blocks | 5 | 0 | 100% | 0.00s |
| tushare | daily | 660 | 48 | 93% | 0.00s |
| tushare | finance | 0 | 156 | 0% | 0.00s | ⚠️已知(兜底空(westock 已覆盖),非主链)
| tushare | kline | 207 | 40 | 84% | 0.48s |
| westock | daily | 6199 | 1795 | 78% | 0.00s |
| westock | daily_fallback | 246 | 866 | 22% | 0.00s | 🔥
| westock | finance | 39 | 156 | 20% | 0.00s | ⚠️已知(12:22 测试批量噪音,复测 3/3 正常(8/15))
## 源汇总
- 🔴 **mx**: 0/829 成功(0%)
- 🔴 **mootdx**: 18/1145 成功(2%)
- ⚠️ **westock**: 6484/9301 成功(70%)
- ⚠️ **tushare**: 872/1116 成功(78%)
## 诊断建议
- 🔴 mx 近期成功率低——建议人工检查:协议失效/配额/账号;必要时查 probe_sources.py 重探测
- ⚠️ mootdx 低成功率均为已知项(见上表 ⚠️已知 标注),无需人工介入
生成: 2026-10-26 08:30 | 台账: health_tracker.py → data/call_stats.db
```
你是数据底座健康诊断官。上方是 health_report.py 生成的健康周报数据。
任务:
1. 解读各数据源(mootdx/tushare/mx/腾讯源westock/gf_skills/ifind)的成功率与异常
2. 对成功率<50%的源给出根因判断(协议失效/间歇性/配额/正常波动)和处置建议(重探测/换路由/人工介入)
3. 输出三行结论:✅正常源 / 🔴问题源+根因 / 下一步动作
注意:mx 是东财MCP有日配额、mootdx quotes 2026-08-03 起协议失效属已知问题(非新增故障)、新浪已禁用。
## 产出规范(四性·应用性;2026-10-12 老板令「所有 cron 要有关联性/逻辑性/应用性」)
1. **判断落账(必做,除非本次无判断)**:凡产出含方向性判断(看多/看空/回避/中性 + 可核对的触发条件),必须落 judgment_ledger:source=数据底座健康周报AI解读、date、direction、horizon、trigger、falsify(可自动核对,不写「注意风险」这种空话)、judgment、reason([数据源][路径][判断] 三要素齐全,写入端拒收空件)。纯数据播报 → 跳过落账,并在报告里写明「本次无判断落账」。
2. **归档 IMA(强制,写完报告后必做)**:最终报告必须归档到 IMA(与 QQ 投递内容完全一致):
```
cat > /tmp/数据底座健康周报AI解读_$(date +%Y%m%d).md << 'REPORT_EOF'
[在此粘贴你的完整报告全文,一字不差]
REPORT_EOF
timeout 60 bash ~/.hermes/scripts/upload_stdin_to_ima.sh "数据底座健康周报AI解读_$(date +%Y%m%d)_完整版" < /tmp/数据底座健康周报AI解读_$(date +%Y%m%d).md >/dev/null 2>&1
```
归档成功后再输出最终报告(系统自动投递 QQ);归档失败在报告末尾标注「⚠️ 归档失败」。
3. **先数据后判断**:引用上方【数据摘要】的具体数字;数据段标了 [不可用] 就首行声明数据不全,禁止照常下结论。
**Response Characters:** 3775
## Response
归档成功(RC=0,错误日志无今日新增)。以下为完整报告。
# 数据底座健康周报 · AI解读(2026-10-26,窗口 2026-10-19 ~ 10-26)
> 数据源: health_report.py(--days 7) + call_stats.db 真账 + 2026-10-26 08:30-08:50 现场实测复核。
> 本次无判断落账(本报告为数据源运维诊断,不含看多/看空类方向性判断)。
## 一、逐源解读(含周环比,环比数据来自 call_stats.db 同口径重算)
**tushare —— 78%(上周 71%)✅ 主链改善**
- daily 93%(上周 87.6%)、kline 84%(上周 68.7%)、blocks 100%。
- kline 的 40 次失败全部集中在 10/20 单日(note=daily),已恢复,属一次性波动非持续故障。
- finance 0/156:仍为已知"兜底空"。现场实测 `ts.fina_indicator('600519.SH')` 返回 100 行——**接口本体正常**,0% 的真根因在 data_hub.get_finance 的裸代码映射:`830799 → 830799.SH`(北交所错映成沪市)、885 系走 sw_daily 亦空。失败样本是同一批 BJ/指数/ETF 代码。
**westock(腾讯)—— 70%(上周 63%)⚠️ 覆盖缺口而非协议故障**
- daily 77.5%(上周 66.5%)。失败按小时分布:盘中 08-15 时 81~86%,11 时 43%、12 时 0/40、15 时 57%,夜间 100%。
- 现场实测拆出真根因:`ws.kline(sh000001/sz399001/sz399006)` 各 120 行全通;`ws.kline(sz830799 北交所 / sh885001 申万SI)` 返回 0 行。**沪深个股+主流指数完全健康,失败集中在北交所(BJ)与申万(.SI)代码**——腾讯源根本不服务这两类。
- daily_fallback 22%(上周 14%):该路径只在 tushare+mootdx 双失败后才触发,天然幸存者偏差,命中的仍是同一批 BJ/SI 死代码。**不是独立故障,是主链失败的镜像**。
- finance 20%(上周 21.2%):批内规律恒为"每批 10 只成功 2 只"。现场实测 `ws.finance`:sz000001/sh600519 → sections=3 全通;sz830799(BJ)/sh885001(SI)/sh510300(ETF)/sz399001(指数) → sections=0。周报旧注解"12:22 测试批量噪音"已过时——**这是结构性覆盖缺口:批量财务查询里非沪深个股恒空,沪深个股 10/10 通过**。
**mx(东财MCP)—— 0%(0/829)🔴 两个不同根因,均非"源死了"**
- daily_fallback 0/816:现场实测 `mx.get_daily('000001.SZ', count=120)` 仍返回数据,但**只有 7 行 < data_hub 的 30 行保护线 → 每次都被设计性丢弃**(8/3 起 MX 日线只回近期快照)。0% 是保护机制在工作,不是接口故障;但**每周 816 次纯白调,日配额被持续空烧**。
- realtime 0/4、realtime_batch 0/9:现场实测 `mx.get_realtime_batch(['000001','600519'])` 返回空 dict(约 2s),与代码注释一致("mx 间歇性返回空 dataTableDTOList,只能当锦上添花")。realtime 单次均耗 21.69s = 近超时。
- 附带发现:`get_daily(code, source='mx')` 现场返回 200 行,但那并非 mx 数据——source='mx' 在日线路由里不匹配任何分支,最终落到 westock 兜底。**source='mx' 参数在日线上是假路由**。
**mootdx —— 2%(上周 2%)⚠️ 已知,无需介入**
- daily 0/1115、realtime 0/5:8/3 协议失效已知,现场实测 `dx.bars('000001')` 仍 0 行,路由已绕开。
- minutes_realtime 53%(上周 9.1%):明显改善。分时真源走腾讯 m1 降级,现场实测 `get_minutes('300308')` 240 行正常。
- finance 100%(10/10)。
## 二、<50% 源根因判定与处置
| 源/能力 | 成功率 | 根因判定 | 处置建议 |
|:---|:---:|:---|:---|
| mx daily_fallback | 0% | **设计性丢弃**(mx 只回 7 行 < 30 行保护线),非故障 | 调用方短路:已知 mx 无历史日线就别再调,每周省 816 次日配额 |
| mx realtime/batch | 0% | mx 间歇空表 + 日配额限制(文档化已知) | 维持"锦上添花"定位;实时价格真源=腾讯 m1 分时;东财MCP 配额疑被空烧,建议人工看一眼配额面板 |
| mootdx daily/realtime | 0%/0% | 8/3 协议失效(已知) | 无需介入,路由已绕开 |
| westock daily_fallback | 22% | 主链失败镜像 + BJ/SI 覆盖缺口 | 非独立故障;修 BJ/SI 覆盖即可连带改善 |
| westock finance | 20% | **结构性**:BJ/指数/ETF 的 ws.finance 返回 sections=0;沪深个股 10/10 通过(实测) | 批量财务调用方过滤非沪深个股代码,或改走 ftshare/dsh |
| tushare finance | 0% | 已知兜底空;真根因=get_finance 裸代码把 BJ/SI 错映射成 .SH/.SZ | 映射表补 BJ 后缀(830799→830799.BJ),或调用方直接带后缀传入 |
**跨源真缺口(周报表外,本次实测新发现):**
1. **北交所(BJ)代码全链死**:tushare daily(`830799.BJ`→0行) + mootdx bars 死 + westock 不服务 + mx 行数保护 → get_daily('830799.BJ')/'430047.BJ' 现场均 0 行。池内若有 BJ 股 = 无日线可用。
2. **申万 885 系指数日线死**:`sw_daily('885001.SI')`→0 行,标准申万 `801010.SI`→3454 行正常——885001 非有效申万代码,.SI 后缀又让它被识别为指数跳过 mootdx → 全链空。板块分析若依赖 885 需换 801 系代码。
3. **get_realtime 全链空**:mootdx quotes 死 + mx batch 返回 {} + ws.quote 三种格式均返回 {} → 现场 `get_realtime(auto)` 返回 0 行。execution_agent 的实时依赖此口,盘中若被调用将拿空。分时场景可由腾讯 m1 兜住,但批量实时快照目前无可用源。
4. 今晨 3:40 六源探测中 **wind edb 探测失败**(search failed: unknown,补充源),建议顺手人工复核一次。
**今日(10/26 周一开盘前)晨间状态**:westock daily 31/31、tushare kline 1/1,主链无新增故障。
## 三、三行结论
✅ **正常源**:tushare(daily 93%/kline 84%/blocks 100%,周环比双升)、westock 沪深个股+主流指数主链(现场逐只实测全通)、mootdx finance 与分时兜底(get_minutes 240 行正常)。
🔴 **问题源**:mx 全线 0%——日线是设计性丢弃(7 行<30 行保护)+ 实时间歇空表,非源死但每周空烧 816 次配额;westock/tushare 的 finance 0~20% 同根因=北交所/申万885/指数/ETF 覆盖缺口(沪深个股实测 10/10 通过);另实测新发现 get_realtime 全链空(mootdx+mx+ws.quote 均空)。
下一步动作:①调用方短路 mx 日线调用止损配额 ②批量财务调用过滤非沪深代码 + get_finance 补 BJ 后缀映射 ③若盘中需要批量实时快照,需人工核查东财MCP配额并考虑接入腾讯 quote(当前 ws.quote 亦空,需先修) ④板块分析的申万代码从 885 系换 801 系。