Chameleon-SRE:用 LangGraph 状态机和本地 Llama 3.2,在 minikube 上做 K8s 故障自诊断自修复
项目地址:(作者 KyawLinnKhant,MIT 许可)
一个可本地部署的自治 SRE 智能体参考实现:LangGraph 状态机管决策循环,RAG 检索真实运维手册防命令幻觉,Llama 3.2 30 亿参数模型即可驱动。
不是聊天机器人,是持续运转的状态机
Chameleon-SRE 是有状态的智能体,跑的是持续的「思考-行动-观察-纠错」循环:集群事件或告警进来,模型先推理症状;接着从 ChromaDB 的运维手册知识库做 RAG 检索;然后对集群下发 kubectl 命令;读取执行后的集群状态——问题解决就记录退出,没解决就进入纠错步骤,带着新假设重试。
这和常见的「单轮问答 + 工具调用」有本质区别:状态机允许循环、允许回头、允许换路。LangGraph 的图结构让每一步的输入输出都有明确的状态约束,而不是把正确性寄托在提示词上。
关键设计决策
| 决策 | 选择 | 工程理由 |
|---|---|---|
| 编排框架 | LangGraph 而非 LangChain | 显式状态机,智能体可以循环、纠错、回退 |
| 推理模型 | 本地 LLM(Ollama) | 零延迟、零 API 成本、无数据外泄风险 |
| 知识接地 | ChromaDB RAG | 裸 LLM 会编造 kubectl 参数,用真实文档修正 |
| 验证环境 | Minikube | 零成本本地集群,行为与云端 K8s 一致 |
RAG 接地这条尤其实在:大模型幻觉在运维场景是致命的,一条编造的 kubectl 参数可能搞垮生产集群。Chameleon-SRE 把 Kubernetes 官方文档、错误处置手册、历史事件记录全部向量化入库,每次行动前先检索,命令从真实文档里长出来,而不是模型瞎编。
技术栈与快速启动
编排用 LangGraph,推理用 Ollama 跑 Llama 3.2(3B),向量库 ChromaDB,集群接口是 kubectl 加 minikube,可观测性接 LangSmith 追踪,部署提供 Docker 与 K8s manifests 双路径。
启动五步:
# 1. 建 Python 3.10 环境
conda create -n chameleon python=3.10
conda activate chameleon
# 2. 拉本地模型
ollama pull llama3.2
# 3. 起本地集群
minikube start
# 4. 把运维手册灌进 ChromaDB
python ingest_docs.py
# 5. 启动智能体
python src/main.py
仓库还附带 RBAC、Deployment、ConfigMap 三份 K8s 清单。智能体自己要往集群下发命令,权限边界必须用 RBAC 管起来。
代码结构
agent.py:思考、行动、观察、纠错四个节点tools.py:kubectl 包装器、RAG 搜索、语音告警工具state.py:LangGraph 状态 schema 定义config.py:硬件检测,以及 Ollama、ChromaDB 配置
适用边界与参考价值
让智能体自主操作生产集群,在多数组织里仍需谨慎。这个项目的定位是参考实现与实验平台,minikube 本地验证是它的主场景。
对两类人有直接价值。一是想学习「状态机式智能体」架构的开发者:Think-Act-Observe-Correct 四节点的代码实现,比概念文章直观得多。二是评估本地小模型能做什么的团队:3B 参数模型加 RAG 接地就能完成运维诊断循环,这个事实本身对「必须用大模型」的默认假设是有力的反证。