一个轻量级的 AIOps 实验运行器。
第一版基于 Python 实现,当前约定:
- 使用 Typer 编写命令行。
- 使用 uv 管理依赖和运行命令。
安装依赖:
uv sync检查场景文件:
uv run aiops-bench load --scenario scenarios/T1_cpu_saturation.yaml运行场景。默认使用 DeepSeek 生成修复建议并评分,执行环境准备、故障注入、观测采集和清理,并生成中文 report.md:
uv run aiops-bench run --scenario scenarios/T1_cpu_saturation.yamlT1 场景会真实操作当前 kubectl context。目标 workload 由场景文件的 workload 字段显式声明,观测命令和报告不会在代码里硬编码资源名:
- 创建
aiops-t1namespace。 - 应用
deploy/demo-app/k8s.yaml。 - 等待
deployment/demo-servicerollout ready。 - 创建 Chaos Mesh
StressChaosCPU 故障。 - 结束时删除故障和
aiops-t1namespace。
运行前需要先准备本地 lab 和 DeepSeek API key:
docker build -t demo-app:dev deploy/demo-app
minikube image load demo-app:dev
kubectl get crd stresschaos.chaos-mesh.org
export DEEPSEEK_API_KEY=...DeepSeek 使用 OpenAI 兼容接口:
base_url: https://api.deepseek.com
model: deepseek-v4-pro
api key env: DEEPSEEK_API_KEY
默认会顺序运行两个独立 AI Agent:
- 建议 Agent:读取场景和 Kubernetes 现场观测,输出诊断与修复建议。
- 评估 Agent:独立读取场景、现场观测和建议 Agent 输出,按动作约束评分。
可以通过环境变量分别覆盖模型:
export AIOPS_DEEPSEEK_ADVISOR_MODEL=deepseek-v4-pro
export AIOPS_DEEPSEEK_EVALUATOR_MODEL=deepseek-v4-pro也可以把这些变量写进 .env,参考 .env.example。
也可以拆开组合,例如人工生成建议、DeepSeek 评分:
uv run aiops-bench run \
--scenario scenarios/T1_cpu_saturation.yaml \
--advisor manual \
--evaluator deepseek如果只想做环境和故障注入的人工模式烟测:
uv run aiops-bench run --scenario scenarios/T1_cpu_saturation.yaml --manual指定结果输出目录:
uv run aiops-bench run \
--scenario scenarios/T1_cpu_saturation.yaml \
--results-root results运行后会生成类似下面的结果文件:
results/T1_cpu_saturation/<run_id>/
scenario.yaml
observations.json
report.md
run.json
cleanup.json
其中 report.md 是中文优先的人类可读报告;run.json 是完整结构化结果,包含 advisor 建议、evaluator 评估和提示词;observations.json 保留原始 kubectl 输出,便于排障。
如果 StressChaos CRD 创建成功但 Chaos Mesh 没有真实注入到目标容器,run 会被标记为 invalid,并跳过 advisor/evaluator。当前本地 k3d-in-Docker 环境可能因为 cgroup 路径不匹配导致 cgroups: cgroup deleted,这种情况属于实验环境无效,不应计入 AI 评分。
架构说明见 K8s 实验运行器架构。
离线单元测试:
uv run --offline python -m unittest discover -s tests -v
PYTHONPATH=. uv run --offline pytest -q --assert=plain人工模式端到端烟测:
uv run --offline aiops-bench run \
--scenario scenarios/T1_cpu_saturation.yaml \
--manual \
--results-root results/manual-smokeAI 模式端到端烟测:
uv run --offline aiops-bench run \
--scenario scenarios/T6_bad_config.yaml \
--results-root results/ai-smoke