Python 做脑,Go 做手。 告警到达 → 计划生成 → 交给 Go 执行引擎可靠 执行(调度/重试/超时/HITL/崩溃恢复)→ 事件流回推 → 根因报告。
与 orbit-agent 仓库(事件溯源执行引擎)联合叙事: orbit-agent 证明底 层执行能力,本项目证明业务集成与 AI 应用能力。
告警(webhook/API) ──▶ Python 智能面(本仓库)
│ ① 指纹 wfID = sha256(alertname + labels)
│ ② 计划(LangGraph 动态规划 / 变更类 runbook)
│ ③ POST /workflows/register(幂等)
│ ④ watchdog: HITL 超时 → reject + 升级通知
▼
Go 执行引擎 agentopsd(orbit-agent/cmd/agentopsd)
│ supervisor 启动扫描自动 Recover;引擎池
│ 工具: metric_query / cmdb_get / rag_search /
│ restart_service / llm_infer(经 MCP 回调)
│ 语义: 重试 / HITL 挂起 / Abort(graceful+补偿)
│ kill -9 → 重启 → 从事件日志断点续跑
▼
Redis Stream 事件流(数据面,执行真相)
▼
Python 消费事件 → 节点终态/根因/耗时 → 报告
▼
审批控制台(GET /ui): 批准/拒绝/中止 + 通知面板
设计要点:
- 执行是资产,不是进程: 事件溯源 + 幂等注册,重复告警/引擎崩溃不会 产生双工作流或丢执行
- 执行面独立于智能面存活: Go 崩溃 Python 零感知,恢复后从断点续跑; Python 崩溃凭 SQLite 会话表 + 事件流重建
- 信任边界 = 沙箱边界: 固定工具直接执行,LLM 生成物(阶段 3)强制 容器沙箱
前置同阶段 3 + 无需额外依赖(协议 mock 由 app/infra_mock.py 自带)。
./demo/e2e_stage4.sh阶段 4 脚本演示三条路径(审批挂起 / 拒绝升级 / 中止补偿):
- 路径A 审批挂起: 变更类告警
RestartServiceAlert走固定 runbook (require_approval节点)→ n3 挂起WAITING_HITL→resume approve(携带审批意见)→ Ansible job 重启服务 → 闭环SUCCEEDED+ 根因报告 - 路径B 拒绝升级: 同一告警另一实例挂起后不审批 → Python watchdog
超时(10s)自动
resume reject→FAILED+ escalation 升级通知 (GET /notifications,审批控制台可见) - 路径C 中止补偿:
DiskHighAlert(runbook,补偿节点 n3 → n2)执行中abort→ 未开始节点ABORTED、补偿节点照常执行 → 工作流级ABORTED终态
单独启动(阶段 4 增加 infra mock):
docker compose up -d redis
.venv/bin/python app/infra_mock.py & # 协议 mock: Prometheus/CMDB/Ansible,9091
(cd ../orbit-agent && go build -o /tmp/agentopsd ./cmd/agentopsd)
/tmp/agentopsd --listen :8080 --redis localhost:6379 --store redis \
--llm-mcp-url http://127.0.0.1:8001/mcp --infra-url http://127.0.0.1:9091
AGENTOPS_HITL_TIMEOUT_S=30 .venv/bin/uvicorn app.main:app --port 8000
.venv/bin/python -m app.mcp_server &
open http://localhost:8000/ui # 审批控制台前置: docker + docker compose;orbit-agent 仓库在 agentops 同级目录;
export DEEPSEEK_API_KEY=...(阶段 2 起 e2e 的规划器与 llm_infer
节点真实调 DeepSeek);embedding 模型预缓存(/tmp/fastembed_cache,来源
与离线加载方法见 docs/design.md D2 —— 未缓存自动降级 BM25,demo 不
阻塞)。
python3 -m virtualenv .venv && .venv/bin/pip install -r requirements.txt
./demo/e2e.she2e 脚本 12 步: compose 起 redis → agentopsd → MCP 互操作探针
(Python 官方 SDK ↔ agentopsd /mcp)→ Python 智能面 + llm_infer MCP
server → 模拟告警 CPUHighAlert(LangGraph 动态计划,断言
planSource=langgraph)→ 执行过半时 kill -9 引擎 → 重启自动恢复 →
Replan 演示: append 追加节点 n5(引擎续跑执行)→ 轮询终态
(5 节点全 COMPLETED)+ 根因报告(含追加节点结论)→ 检索审计
(retrieval_audit 表命中/耗时)→ kill -9 Python 智能面 → 重启后
status/report 接续。
单独启动:
docker compose up -d redis
(cd ../orbit-agent && go build -o /tmp/agentopsd ./cmd/agentopsd)
/tmp/agentopsd --listen :8080 --redis localhost:6379 --store redis \
--llm-mcp-url http://127.0.0.1:8001/mcp
AGENTOPS_PLAN_DELAY_MS=1500 .venv/bin/uvicorn app.main:app --port 8000
.venv/bin/python -m app.mcp_server & # llm_infer MCP server(独立进程,8001)
curl -X POST localhost:8000/alert/receive \
-H 'Content-Type: application/json' \
-d '{"alertname":"CPUHighAlert","labels":{"instance":"web-01"}}'接口契约(双仓库共享): docs/interface.md。
| 模块 | 职责 | 阶段 |
|---|---|---|
app/alerting.py |
告警解析 + 指纹去重(wfID 确定性) | 1 |
app/planner.py |
固定计划 JSON(降级兜底)+ {labels.x} 插值 + delay 注入 |
1 → 3 |
app/planner_lg.py |
LangGraph 规划器: 规划期 RAG → LLM 生成 DAG → 校验重试 → 兜底 | 3 |
app/rag.py |
混合检索: jieba BM25 + fastembed 向量 + RRF 融合(Qdrant 内存) | 3 |
app/kb.json |
运维 runbook 知识库(13 条,规划期检索来源) | 3 |
app/registry.py |
Go 控制面客户端(register/append/resume/abort/status/tools,GoDown/Conflict/BadRequest 区分) | 1 → 4 |
app/events.py |
事件契约解析 + blob 旁路还原 + 终态投影(含 ABORTED) | 1 → 4 |
app/report.py |
根因报告(节点终态/耗时/根因) | 1 |
app/session.py |
SQLite 会话表 + 检索审计表 + 通知表(崩溃后重建锚点) | 1 → 4 |
app/watchdog.py |
HITL 超时策略: 持续挂起超时 → 自动 reject + escalation 通知 | 4 |
app/main.py |
FastAPI 入口(告警接收/append/resume/abort/状态/报告/通知/UI) | 1 → 4 |
app/infra_mock.py |
协议级 mock: Prometheus 查询 / CMDB / Ansible 异步 job(9091) | 4 |
app/static/ui.html |
审批控制台: 工作流列表 + 批准/拒绝/中止 + 通知面板 | 4 |
app/llm.py |
DeepSeek 调用(llm_infer 无状态契约) |
2 |
app/mcp_server.py |
llm_infer MCP server(独立进程,8001) |
2 |
- 固定计划 + mock 工具 + kill -9 恢复演示 ✅
- MCP 双向: 规划期工具探测 +
llm_infer回调(真实 LLM)+ Python 崩溃接续 ✅ - LangGraph 动态计划 + 规划期 RAG(混合检索)+ append Replan ✅
- 协议级工具 mock(Prometheus/CMDB/Ansible)+ HITL 审批 UI + watchdog
超时升级 + 引擎 Abort(graceful + 补偿)✅ ——
demo/e2e_stage4.sh - 压测评估: 闭环耗时 / 恢复 RTO / 重试成功率(可复现数字)
- Go(orbit-agent):
gofmt -l+go build+go vet+go test -race - Python:
ruff check+pytest(事件契约测试用 Go 真实导出 fixture, 防 schema 漂移)