我基于开源 AIOps 项目做了一个 SRE 实验排障 AI Agent

本系列共 6 篇,本文为第 1 篇。
原始链接(含完整代码块、9 节 ASCII 流程图、Giscus 评论、点赞互动):
https://andersthorvald.github.io/projects/sre-ai-agent/build-from-open-source-aiops/

项目仓库:https://github.com/andersthorvald/sre-lab-doctor

本系列在个人站 SRE Wiki 同步更新。

一句话定位

项目代号 SRE Lab Doctor,仓库 andersthorvald/sre-lab-doctor,tag v0.1.0(2026-07-02),8/8 主功能完成。已开源,Apache 2.0。

把学员的实验问题贴进来,AI 按主机拆分给出排障步骤、修复建议、验证命令和复盘笔记。严格只诊断不执行命令——所有命令由学员手动复制粘贴,避免 v0.1 出安全问题。

为什么做这个

我在做 SRE 课程实验的过程中,反复踩同一批坑:

  • 防火墙没放行:服务配完发现 80 端口被拦
  • BIND9 配 listen-on { 127.0.0.1; };:slave 当然连不上 master
  • Docker 容器内 curl 127.0.0.1:是容器自己,不是宿主机
  • 自定义 NAT 网段宿主机没路由:ping 都 ping 不通

每次都当场查、查完忘、下次再踩一遍。

把这些坑整理成知识库,让 AI 帮我按「踩过的坑」针对性诊断——这是最初的动机。

顺便选了 fork 自 NightMend(Apache 2.0)的开源 AIOps 平台做底座——账号、权限、审计、夜莺原生告警这些基础设施都现成,省得从零造。

明确不做的:不是通用 ChatGPT 替代品、不会自动 SSH 到学员机器、不会自动改配置文件。走 Diagnosis-only Mode。

架构 + 关键代码

诊断流程:

[学员填 7 字段表单] → 基础清洗 → 知识库匹配(top-2)
                                      ↓
        Markdown 输出 ← 17 条高危命令检测 ← Markdown 渲染
              ↑
   LLM 调用(MiniMax-M2.7,30–50 秒) ← Prompt 构造

技术栈:NightMend(fork 自上游) + FastAPI + Python 3.11 + React + Ant Design + PostgreSQL + Redis + MiniMax-M2.7 + Docker Compose(5 容器)。

知识库匹配简化版:

def match_knowledge(lab_type, error_text):
    """按 lab_type + 关键词给 10 个内置案例打分,取 top-2"""
    candidates = [c for c in ALL_CASES if c.lab_type == lab_type]
    if error_text:
        keywords = extract_keywords(error_text)
        for c in candidates:
            c.score = sum(1 for kw in keywords if kw in c.tags)
    return sorted(candidates, key=lambda x: x.score, reverse=True)[:2]

三个有意思的坑

坑 1:双场景 Prompt 的形式错位

prompt 写死「按 7 节排障模板输出」,学员输「DNS 服务器是什么」这种概念性问题,LLM 强行套模板输出「## 1. 当前现象总结」,内容是维基百科腔的科普文——形式错位。

改成「先判断场景再选模板」:故障场景含「报错 / 失败 / refused / timeout / denied」等关键词走排障模板,其他走知识模板。

本质:prompt 是给模型的合同,合同对不上场景就乱套。

坑 2:Reasoning 思考块 + 三层超时

MiniMax-M2.7 是 reasoning 模型,输出里有 <!-- ... --> 思考块,占最终输出长度的 40%。加 _strip_thinking() 剥离。

复杂 prompt 要 30–50 秒,链路里默认有三个超时,都要动:

默认 调到
httpx 45s 180s
nginx proxy_read_timeout 60s 180s
前端 axios 15s 用 aiApi(60s)

坑 3:17 条高危命令「帮倒忙」

最初想「检测到危险命令直接替换成 [已过滤]」——结果帮倒忙:学员照着敲命令出来发现字段没了、不知道哪步被吃了、LLM 还会换个写法重新塞进去。

改成「只警告不阻挡」:命中后追加「🚨 高危命令警告」块,命令原文保留,学员知情决策。

17 条覆盖:rm -rf /mkfsdd if=... of=/dev/sdXiptables -Fnft flush rulesetsystemctl stop sshd|network|firewalldchmod -R 777 /chown -Rcurl ... | shwget ... | bashkill -9 1shutdownrebootsetenforce 0 等。

v0.1 数据

维度 数据
v0.1 主功能 8 / 8 完成
回归测试场景 5 / 5(100% 通过)
内置知识库案例 10 个(Nginx×2 / DNS×2 / iptables×2 / SSH×2 / rsync×1 / Docker×1)
高危命令正则 17 条
LLM 平均响应 30–50 秒

🔴 Diagnosis-only 三条红线:不 SSH、不 systemd、不存凭据。

路线图

v0.2(2–3 周后开搞):LLM 兜底(MiniMax 超时切 DeepSeek)+ 流式响应 SSE + 多轮对话 + 知识库扩 K8s/Prom/Zabbix + 👍/👎 反馈

v0.3:知识库后台 UI + Prompt A/B 测试 + 导出 PDF

v1.0:多租户 SaaS + 与 NightMend 告警联动 + 主动学习

写在最后

最大收获不是「我会做 AI Agent」,是体会到 LLM 产品跟传统软件不一样——prompt 改了全链可能全变、超时没调够体感像挂、安全设计偷懒产品都不可信。

下一篇会讲选型对比——为什么没从零写、为什么选 NightMend、对比过哪几个开源 AIOps 项目。


原文(含完整代码示例、9 节 ASCII 流程图、Diagnosis-only 红色警告块):

👉 https://andersthorvald.github.io/projects/sre-ai-agent/build-from-open-source-aiops/

系列主页(6 篇目录):
https://andersthorvald.github.io/projects/sre-ai-agent/

项目仓库:
https://github.com/andersthorvald/sre-lab-doctor

作者:Thorvald · 2026-07-02 · SRE AI Agent 系列 · 第 1 篇

posted @ 2026-07-02 19:11  安德斯  阅读(0)  评论(0)    收藏  举报