CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区



愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页STAROps 专题编写 STAROps 运维 Skill

编写 STAROps 运维 Skill

#持续优化#持续优化

STAROps | 2026-07-31

查看对话回放内容演示

本规范定义 STAROps 运维 Skill 的 7 要素,用于将 RDS 巡检、告警根因定位、日志模式分析等重复运维操作沉淀为可加载技能。

适用范围:

  • 自研 Skill 的设计期评审标准
  • 第三方 Skill 引入前的合规审查清单
  • 适用类型:巡检类 / 诊断类 / 报告类 L0 只读 Skill

不适用:涉及写操作的 L2+ Skill(变更 / 删除 / 重启),需走风险分级与审批流程,不在本规范覆盖。

前提条件

  • 已开通 STAROps 实例,账号有数字员工创建权限。
  • 已识别可沉淀的运维场景(具备重复性、可结构化输出、动作只读)。
  • 已确认 Skill 所需的数据源(SLS Project / Logstore / MetricStore / 拓扑等)均可访问。
  • 已了解 STAROps Skill 与脚本的分工边界,倾向把数值计算交给脚本而非 LLM。

规范要素

合格的 STAROps Skill 必须包含 7 个要素:

要素 含义 是否必须
触发条件 用户如何触发这个 Skill,什么情况下不应触发 必须
流程设计 Skill 的执行步骤序列,每步有输入 / 动作 / 输出 必须
计算与脚本 哪些数值计算必须脚本化,不依赖 LLM 推理 必须
输出与复用 Skill 的最终输出格式和字段定义 必须
风险控制 Skill 的风险等级和边界约束 必须
失败处理 每步失败时的处理方式 必须
推理边界 LLM 可以做什么、不能做什么 必须

应用样例

样例 1:触发条件

项 内容
正例 rds-inspection 的 description 段:「使用脚本批量执行阿里云 RDS 健康巡检,覆盖核心指标、性能、安全、关联日志四个维度,输出结构化巡检报告并附带原始采样与上下游影响。」并补充边界约束,明确划清不触发场景。
反例 触发条件只写「当用户需要帮助时」。Agent 无法区分「RDS 巡检」与「RDS 性能优化」「RDS 备份恢复」等相关任务,客户说「帮我查一下 RDS」可能路由到错误的 Skill 链路。
期望输出 description 含 3 个要素:动作(巡检 / 诊断 / 报告)+ 对象(RDS / 容器 / 主机)+ 维度(核心 / 性能 / 安全)。边界约束写明「不执行任何变更操作」「不访问数据库执行 SQL」等不触发条件。
关键差异 正例 description 与边界约束共同划定触发与不触发场景,反例语义模糊导致路由错误。

样例 2:计算与脚本

项 内容
正例 Python 脚本承载查询 + 阈值评估 + 持续时间累计。InspectionCase 声明: InspectionCase(threshold=80.0, duration=300, compare=CompareOp.GT) 公共引擎 evaluate() 与 calc_sustained_seconds() 算出连续超阈值秒数。
反例 让 LLM 从原始时间序列计算「CPU 使用率超过 80%,持续 5 分钟」。模型每次重新生成 Python 查询脚本,跨次结果可能因采样间隔误读、算法选择不同而不一致,且让 LLM 写脚本本身比执行脚本慢一个数量级,单次会话的延迟与 token 消耗都被显著推高。
期望输出 脚本输出结构化结果: {"case_id": "rds_cpu_high", "status": "find_problem", "duration_seconds": 360, "total_entities": 12, "abnormal_count": 1}
关键差异 正例脚本完成数值计算,结果稳定可复现;反例 LLM 推理,跨次结果漂移且耗时高。

脚本的架构模式(数据驱动声明 + 公共引擎)、纯函数保证与确定性验证方式见 编写 Skill 确定性脚本。

样例 3:风险控制

项 内容
正例 声明 L0(只读),边界约束 4 条: ① 不执行任何变更操作(不改 RDS 配置、不执行 SQL、不重启实例) ② 不访问数据库执行 SQL(数据均经 SLS MetricStore / Logstore) ③ 不展示敏感信息(账号 / IP / 密码 / Token 自动脱敏,SQL 超过 100 字符截断) ④ 跨 workspace / region 复用(参数化 --region / --project / --metricstore)
反例 声明 L0 但实际执行了 ALTER TABLE 或重启实例。客户基于 L0 声明跳过审批走自动化路径,事后追责无法定位变更动作来源。
期望输出 Skill 调用面仅含只读接口(PromQL 查询、SLS 日志查询、拓扑查询),无任何写操作 API。
关键差异 正例风险等级与实际操作一致,反例高操作低声明可能导致生产事故。

样例 4:失败处理

项 内容
正例 单项失败返回 status=error 与可读 error 字段,不阻断其他项。降级规则:审计日志 Logstore 未传入时,日志脚本返回 error 并提示参数缺失;拓扑查询失败时,降级为空数组并记录 error,不阻断主流程。
正例输出 {"case_id": "rds_slow_sql_high", "status": "error", "error": "audit-logstore param missing", "abnormal_count": 0};其他巡检项继续返回 status=pass 或 find_problem。
反例 单步失败时中断整个 Skill,或直接返回 Python traceback 给客户。客户无法判断哪些巡检项成功、哪些失败,无法决定是否重试或人工兜底。
关键差异 正例快速失败与结构化错误,反例黑盒中断流程。

样例 5:推理边界

项 内容
正例 脚本与 LLM 分工: 脚本:PromQL 查询 / 日志查询 / 阈值评估 / 持续时间计算 / JSON 格式化 / 拓扑查询 LLM:解读 JSON 结果 / 把巡检项结果汇总成可读报告 / 给出修复建议 / 必要时与客户对话澄清范围
反例 LLM 直接执行 SQL 或调用变更 API(如重启实例)。一旦 LLM 越界,等同于在 L0 声明下做了 L2+ 的操作,破坏分级管控。
期望输出 Skill 的 SKILL.md 中明确写出脚本与 LLM 各自的「能做」「不能做」清单,并把不能做的项目列入「边界约束」段。
关键差异 正例分工写进 SKILL.md,反例无明文分工导致 LLM 越界。

样例 6:流程设计

项 内容
正例 rds-inspection 的 6 步流程(SKILL.md「执行策略」段): 1. 巡检前必须先列 todo list(明确维度与巡检项) 2. 优先用 scripts/ 下脚本批量执行(不手动逐条查询) 3. 四个脚本并行执行(核心 / 性能 / 安全 / 关联日志相互独立) 4. 汇总 JSON 输出(巡检项结果统一 schema) 5. 用 references/report-template.md 生成可读报告 6. 单项失败返回 status=error,不阻断其他项
反例 Skill 只写「对 RDS 实例做巡检」,未声明步骤顺序与并行边界。每次执行步骤数、顺序、并行度都可能不同,跨次结果不可复现。
期望输出 SKILL.md 含步骤编号清单 + 每步输入 / 动作 / 输出三段 + 并行块显式标注(如多脚本的 & 并行示例)。
关键差异 正例依赖关系显式,Agent 可稳定复现;反例隐式依赖导致同一输入跑出不同执行轨迹。

样例 7:输出与复用

项 内容
正例 顶层 schema 固定: {"total_cases": 21, "passed": 18, "find_problem_cases": 2, "no_problem_found": 0, "errors": 1, "has_find_problem": true, "results": [...]} 配套 references/report-template.md Markdown 报告模板;status 枚举 pass / find_problem / no_problem_found / error 跨执行稳定。
反例 同一 Skill 不同次执行有时返回 JSON、有时返回 Markdown、有时返回自然语言,字段名也跨次漂移。下游聚合或解析脚本会因字段缺失或键名变动直接报错,无法支撑跨次趋势对比与自动化分发。
期望输出 字段名与枚举值跨次稳定,下游脚本可直接 `jq '.results[]
关键差异 正例下游系统可自动化消费,反例需人工解读且无法做跨次趋势对比。

进阶要素(可选)

渐进式加载

巡检项多的 Skill,可以分层执行:

  • 第一层:核心指标(CPU、内存、磁盘、实例状态),优先执行
  • 第二层:性能指标(慢查询、锁等待、缓冲命中率),并行执行
  • 第三层:安全配置(SSL、公网访问、备份、审计日志),并行执行

操作分级

操作级别 允许行为 禁止行为
只读巡检(L0) 查询指标、评估阈值、生成报告 修改配置、执行 SQL、重启实例
变更操作(L2+) 需人工审批后执行 自动化执行任何写操作

附录 A:Skill 编写模板

复制本模板新建 SKILL.md,按 7 个要素逐项填实。所有 (必填) 字段必须替换为实际内容;保留 {xxx} 占位语义但替换为实际值。

查看模板

markdown

# Skill 编写模板

## 基本信息

| 字段 | 值 |
|---|---|
| Skill 名称 | `{skill-name}`(kebab-case,例:`rds-inspection`) |
| 解决的问题 | (必填)一句话说明这个 Skill 解决什么运维场景的什么问题 |
| 触发条件 | (必填)用户在什么情况下会调用这个 Skill(自然语言 + 关键词) |
| 风险等级 | (必填)L0 / L1 / L2 / L3 |

## 触发条件(要素 1)

- 自然语言触发:`{用户可能说的话}`
- 关键词触发:`{关键词列表}`
- 边界条件:`{什么情况下不应触发}`

## 流程设计(要素 2)

步骤 1: {步骤名}
输入: {什么数据}
动作: {做什么}
输出: {产出什么}
失败处理: {失败时怎么办}

步骤 2: {步骤名}
...


## 计算与脚本(要素 3)

| 计算项 | 脚本路径 | 输入 | 输出 | 说明 |
|---|---|---|---|---|
| `{计算项}` | `{script-path}` | `{输入}` | `{输出}` | `{为什么必须脚本化}` |

## 输出与复用(要素 4)

- 输出格式:`{报告 / 配置 / 脚本 / 看板}`
- 输出字段:`{必填字段列表}`
- 复用方式:`{客户如何复用这个输出}`

## 风险控制(要素 5)

| 风险 | 等级 | 控制措施 |
|---|---|---|
| `{风险描述}` | L0-L3 | `{控制措施}` |

风险等级 ≥ L2,必须声明 HIL(Human-in-the-Loop):
- HIL 触发条件:`{什么情况下必须人确认}`
- HIL 确认方式:`{确认流程}`

风险等级 = L3,必须声明回滚方案:
- 回滚步骤:`{如何回滚}`
- 回滚验证:`{如何确认回滚成功}`

## 失败处理(要素 6)

| 步骤 | 失败场景 | 处理方式 | 是否阻塞 |
|---|---|---|---|
| `{步骤 N}` | `{失败场景}` | `{处理方式}` | 是 / 否 |

## 推理边界(要素 7)

| 可推理 | 不可推理(必须脚本 / 必须人) |
|---|---|
| `{LLM 可以做的判断}` | `{必须脚本化或人介入的判断}` |

## 自检

- [ ] 触发条件明确,无歧义
- [ ] 每步有输入 / 动作 / 输出 / 失败处理
- [ ] 数值计算全部脚本化
- [ ] 输出格式和字段已定义
- [ ] 风险等级已声明,L2+ 有 HIL,L3 有回滚
- [ ] 每步失败处理已定义
- [ ] 推理边界已声明
- [ ] 已在 STAROps 实例真实跑通(附调用请求 ID)

附录 B:Skill 质量自检 Checklist

在 Skill 提交评审前逐项打勾。未通过的项必须修复或显式声明豁免理由。

查看 Checklist

markdown

# Skill 质量 Checklist

## Skill 名称:`{skill-name}`
## 自检人:`{姓名}` / 日期:`{YYYY-MM-DD}`

## 1. 触发条件

- [ ] 触发条件已用自然语言写明,无歧义
- [ ] 关键词列表已列出
- [ ] 边界条件已声明(什么情况下不应触发)
- [ ] 触发条件与已有 Skill 无冲突(不会误触发其他 Skill)

## 2. 流程设计

- [ ] 每步有明确的输入 / 动作 / 输出
- [ ] 每步有失败处理
- [ ] 步骤间依赖关系清晰(无隐式状态传递)
- [ ] 步骤数合理(不过多也不过少)

## 3. 计算与脚本

- [ ] 所有数值计算已脚本化(不依赖 LLM 推理)
- [ ] 脚本路径已声明
- [ ] 脚本输入 / 输出格式已定义
- [ ] 脚本已独立可运行(不依赖 Skill 上下文)

## 4. 输出与复用

- [ ] 输出格式已定义(报告 / 配置 / 脚本 / 看板)
- [ ] 必填字段已列出
- [ ] 客户复用方式已说明
- [ ] 输出样例已给出(至少 1 个正例)

## 5. 风险控制

- [ ] 风险等级已声明(L0-L3)
- [ ] L2+ 已声明 HIL 触发条件和确认方式
- [ ] L3 已声明回滚步骤和回滚验证
- [ ] 风险等级与实际操作一致(不是高操作低声明)

## 6. 失败处理

- [ ] 每步失败场景已枚举
- [ ] 每步处理方式已定义(重试 / 跳过 / 阻塞 / 降级)
- [ ] 阻塞性失败已标明
- [ ] 失败信息对客户可读(不是裸异常)

## 7. 推理边界

- [ ] 可推理事已列出
- [ ] 不可推理事已列出(必须脚本 / 必须人)
- [ ] 边界声明与实际操作一致(没有把不可推理的交给 LLM)

## 8. 真实跑通

- [ ] 已在 STAROps 实例真实跑通
- [ ] 调用请求 ID 已记录
- [ ] 跑通结果与预期输出一致
- [ ] 失败场景至少跑通 1 个

## 总结

- 通过项:`{N}` / 总计:`{M}`
- 未通过项及豁免理由:
  - `{项}`: `{理由}`
- 是否可提交评审:是 / 否

常见问题

一个 Skill 应该包含多少步骤?

步骤数按真实需要,不强制 3 条或 5 条。判定标准:每步有明确的输入 / 动作 / 输出,步骤间依赖关系清晰,无隐式状态传递。

触发条件与已有 Skill 冲突怎么办?

调整触发条件的关键词和边界条件,消除歧义。若两个 Skill 触发条件天然重叠,在边界条件里显式声明分工。

一次性临时查询是否需要沉淀为 Skill?

不需要。Skill 沉淀的是可重复执行的运维场景;一次性查询直接在数字员工对话里完成即可。

涉及写操作的 Skill 如何评审?

本规范覆盖 L0 只读 Skill。涉及变更 / 删除 / 重启等写操作的 L2+ Skill 需走风险分级与审批流程,由平台团队单独评审。

相关入口

  • 返回 STAROps 最佳实践首页
  • 打开 STAROps Playground
  • 进入 STAROps 控制台

文章大纲