From 4c074b789e14f2348dff6d60488b0d18b019c3ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=A5=E5=BE=AE?= Date: Wed, 24 Jun 2026 22:09:30 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E8=87=AA=E6=84=88?= =?UTF-8?q?=E5=BE=AA=E7=8E=AF+=E4=BD=93=E6=A3=80=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E8=87=B3=E6=9C=80=E7=BB=88=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/morning-health-check.md | 5 +- docs/self-healing-loop.md | 165 ++++++++++------------------------- 2 files changed, 47 insertions(+), 123 deletions(-) diff --git a/docs/morning-health-check.md b/docs/morning-health-check.md index ff41fc7..48f35c5 100644 --- a/docs/morning-health-check.md +++ b/docs/morning-health-check.md @@ -24,14 +24,15 @@ morning_health_check.py (no_agent, 8:00 Cron) │ ├── 读 health_checklist.json (检查清单) │ - ├── 分层检查 (7层) + ├── 分层检查 (8层) │ ├── 基础设施 — XMPP/Gateway/Dashboard/API/磁盘 │ ├── SENSE — price_monitor/xiaoguo/宏观/汇率/板块 │ ├── RESPOND — 推送cron/价格事件/信号积压 │ ├── ADAPT — 策略重评/策略树/时效性 │ ├── IMPROVE — 知识萃取/硬编码/审计/剪枝/元成长 │ ├── 数据文件 — 全部关键JSON/DB文件新鲜度 - │ └── 管道完整性 — cron异常/误暂停/delivery目标/信号桥 + │ ├── 管道完整性 — cron异常/误暂停/delivery目标/信号桥/cron全局审计 + │ └── 元自检 — 昨日体检完成/checklist覆盖/cron调度 │ ├── self_discovery() — 自动发现新组件 │ └── 对比jobs.json vs checklist中的cron ID diff --git a/docs/self-healing-loop.md b/docs/self-healing-loop.md index 470f8bd..743c919 100644 --- a/docs/self-healing-loop.md +++ b/docs/self-healing-loop.md @@ -1,135 +1,58 @@ # MoFin 自愈循环系统设计 -> 版本: v1.0 | 最后更新: 2026-06-24 -> 核心理念:体检发现问题 → TODO追踪 → 自动修复 → 次日体检验证,形成无人值守的修复闭环。 +> 版本: v1.1 | 最后更新: 2026-06-24 +> 核心理念:三层自检 + TODO自动执行 + 失败升级LLM,形成无人值守的修复闭环。 -## 一、自愈循环架构 +## 一、三层自检架构 -``` - ┌───────────────────────────────────┐ - │ morning_health_check.py │ - │ 每日 8:00(开盘前) │ - │ │ - │ 体检 7 层 43+ 项 │ - │ 发现问题 → 写 TODO │ - └──────────┬────────────────────────┘ - │ TODO: health_fix_xxx - ▼ - ┌───────────────────────────────────┐ - │ self-todo cron │ - │ 每 2-3 小时自动执行 │ - │ │ - │ 读取 pending 任务 │ - │ 按优先级逐个处理 │ - │ 完成后 git commit + 标记完成 │ - └──────────┬────────────────────────┘ - │ git push - ▼ - ┌───────────────────────────────────┐ - │ 次晨体检验证 │ - │ │ - │ 确认昨日问题已修复 → ✅ │ - │ 问题依然存在 → ⚠️ 升级标记 │ - └───────────────────────────────────┘ -``` - -## 二、健康检查 → TODO 对接 - -### 对接点 - -morning_health_check.py 发现异常后: - -``` -1. 读当前 TODO 文件 -2. 检查是否已有相同 issue 的 TODO(去重) -3. 如果没有 → 追加新 TODO: - - status: pending - - priority: 根据 severity(critical→high, error→medium, warn→low) - - deps: 无 - - title: "[体检发现] {问题描述}" -4. 如果有相同 TODO 且 status=completed → - - 说明昨天标记修复但今天仍然有问题 → 重新打开 - - 修改 status=pending, priority 升一级 -``` - -### TODO 字段映射 - -| 体检 severity | TODO priority | 预期修复时间 | -|---------------|---------------|-------------| -| critical | high | 当前 session / 下一个 self-todo | -| error | medium | 24h 内 | -| warn | low | 48h 内 | - -## 三、xiaoguo 信号桥(知微消费 xiaoguo_scanner 产出) - -### 问题 - -xiaoguo_scanner 每5分钟写 `signal_news` 表,但知微没有任何组件读取它。 - -### 解决方案 - -新增 `xiaoguo_signal_consumer.py`(no_agent 脚本,每30分钟运行一次): - -``` -xiaoguo_signal_consumer.py (每30分, 盘中) - │ - ├── 读 mofin.db signal_news 表 - │ WHERE source LIKE 'xiaoguo%' - │ AND (processed=0 OR processed IS NULL) - │ AND date(created_at) == today - │ - ├── 逐条处理: - │ ├── source=xiaoguo(看多信号): - │ │ ├── 检查是否已在自选/持仓 - │ │ ├── 拉腾讯行情(实时价/PE/涨跌幅) - │ │ ├── 五维快速评估(大盘→行业→消息→基本面→技术) - │ │ ├── 决策:加自选 / 关注 / 跳过 - │ │ └── 写入 decisions.json / watchlist.json - │ │ - │ └── source=xiaoguo_risk(看空信号): - │ └── 检查持仓止损距,预警 - │ - └── 标记 processed=1 -``` - -### 执行层次 - -健康检查和信号消费是 **两个独立管道**: - -| 管道 | 脚本 | 频率 | 用途 | +| 层级 | 脚本 | 频率 | 范围 | |------|------|------|------| -| 系统体检 | morning_health_check.py | 每日8:00 | 检查全部组件健康状态 | -| 信号消费 | xiaoguo_signal_consumer.py | 每30分 9:30-15:00 | 消费小果扫描信号 | +| 盘中高频 | intraday_health_check.py | 每15分 9-15 | XMPP/Gateway/Scanner/价格/信号管道 | +| 每日早检 | morning_health_check.py | 8:00 | 8类48项:基础设施/SENSE/RESPOND/ADAPT/IMPROVE/数据/管道/元自检 | +| 每周深度 | 策略评估/建议对账/剪枝 | 周六 | 策略准确率/闭环/分支效率 | -## 四、核心文件 +## 二、自愈循环 + +``` +自检发现问题 + ├─ auto_fix_issue() 当场能修 → 修完标记✅ + └─ 不能当场修 → 写TODO(带fix_action+原因) + │ + self_todo_executor.py (每10分, no_agent) + │ + ┌─────┴──────┐ + │ │ + fix_action成功 fix_action失败 + │ │ + completed ✅ 调gateway API(localhost:8643) + 带完整上下文(问题+详情+失败原因) + │ + 知微(LLM)处理 → completed + 仍搞不定 → 在结果里说明 +``` + +## 三、核心文件 | 文件 | 用途 | |------|------| -| /home/hmo/MoFin/docs/self-healing-loop.md | 本文档 | -| /home/hmo/MoFin/scripts/morning_health_check.py | 体检脚本(已存在,需修改) | -| /home/hmo/MoFin/scripts/xiaoguo_signal_consumer.py | 信号消费脚本(新建) | -| /home/hmo/.hermes/profiles/position-analyst/todo.json | TODO 系统数据文件 | +| `scripts/morning_health_check.py` | 每日早检(no_agent, 8:00) | +| `scripts/intraday_health_check.py` | 盘中高频(no_agent, 每15分) | +| `scripts/self_todo_executor.py` | TODO执行器(no_agent, 每10分) | +| `scripts/xiaoguo_signal_consumer.py` | 小果信号消费(no_agent, 每30分) | +| `data/health_checklist.json` | 检查清单(可自动扩展) | +| `data/mofin.db → todos 表` | TODO数据库(替代旧todo.json) | -## 五、TODO 集成修改计划 +## 四、TODO生命周期 -### morning_health_check.py 修改项 - -在 main() 函数末尾追加 TODO 写入逻辑: - -```python -def write_todos_for_issues(report_entries): - """将体检发现的异常写入 TODO 系统""" - todo_path = Path("/home/hmo/.hermes/profiles/position-analyst/todo.json") - # 读现有 TODO - # 去重(检查是否已有相同 issue) - # 追加新 TODO - # 写回 +``` +创建(自检发现)→pending→in_progress→completed(修复成功) + →pending(重试未到上限) + →needs_llm→调gateway→completed + →报告说明(LLM也搞不定) ``` -### xiaoguo_signal_consumer.py 新建 +## 五、Fallback设计 -30分钟盘中循环,消费 signal_news 中的未处理 xiaoguo 信号。 - -### self-todo cron 适配 - -确保 self-todo cron(b53435fbb38b 每小时多次运行)能识别并处理 `[体检发现]` 前缀的 TODO 项。 +- 小果LLM不可达 → scanner降级标记unknown,继续扫榜单搜新闻 +- 小果离线 → 盘中自检不报严重错误,核心功能不受影响 +- 任何fix_action失败 → 调gateway API让知微处理,不搁置