docs: 更新自愈循环+体检文档至最终版
This commit is contained in:
@@ -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
|
||||
|
||||
+44
-121
@@ -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让知微处理,不搁置
|
||||
|
||||
Reference in New Issue
Block a user