变更方案自动审核助手

Other

变更方案自动审核助手 — 必要条件:变更方案(docx)+部署表(xlsx);可选:纳管表(xlsx)。三文档交叉核验,按P0-P3风险分级输出Word审核报告

Install

openclaw skills install deploy-plan-review

变更方案自动审核助手 v3.1

必要条件:变更方案 .docx + 部署表 .xlsx。可选:纳管表 .xlsx。自动交叉核验,找出不一致信息和明显错误,按 P0-P3 风险分级生成 Word 审核报告并直接发送到聊天窗口。过程文件自动归档。


触发条件

触发方式判定标准
关键词审核部署方案 / 帮我看下部署方案 / 帮我审核方案 / 部署方案有问题 / 帮我检查方案 / 帮我审一遍
文件上传用户上传 .docx 方案 + .xlsx 部署表(可选 + .xlsx 纳管表)
路径指定用户指明文件路径,如"审核 /path/to/方案.docx 和 /path/to/部署表.xlsx"

必要条件(硬性约束)

⚠️ 部署方案 .docx + 部署表 .xlsx 缺一不可。 仅收到单个文件时不做任何解读,直接回复提示缺少文件。

收到的文件行为
只有 1 个文件❌ 拒绝,提示用户补齐缺失的必要文件
方案+部署表(无纳管表)⚠️ 询问用户是否有纳管表(见 Step 0.2)
方案+部署表+纳管表✅ 直接进入全量审核

核心流程(6步)

Step 0 — 输入校验(必须执行)

在处理任何文档内容之前,必须完成输入检查。

Step 0.1 必要条件校验

部署方案 .docx + 部署表 .xlsx 二者缺一不可。

场景行为
只收到 1 个文件拒绝,不做任何解析。回复示例见下方
只收到纳管表同上,告知纳管表是辅助材料,需配合方案+部署表使用
方案+部署表齐全继续 Step 0.2
三件齐备跳过 Step 0.2,直接进入 Step 1

单文件拒绝回复模板:

⚠️ 审核需要至少两份必要文件:变更方案(.docx) + 部署表(.xlsx)

当前仅收到:{文件名}
缺少:{缺失项}

请补充后重新提交。

Step 0.2 纳管表可选检查

当方案+部署表齐全但无纳管表时,必须使用 clarify 工具询问用户

"收到变更方案和部署表,但未提供纳管表。纳管表用于核验服务器纳管状态(C类检查)。请问:"

选项:

  • A. 稍后提供 — 等你发送纳管表后再继续
  • B. 没有纳管表,需要找项目经理要 — 回复获取建议
  • C. 跳过纳管表校验 — 仅执行 A/B/D 类审核(不检查纳管状态)

用户选 C 后,将 manage_pathNone,仅执行 A/B/D 类审核。 用户选 A/B 后,等待用户补充或回复。

Step 1 — 保存原始输入

任何输入在处理前必须先存档,防止后续覆盖:

from pathlib import Path
import shutil
from datetime import datetime

SKILL_DIR = Path.home() / '.hermes/skills/openclaw-imports/deploy-plan-review'
RAW_DIR = SKILL_DIR / 'data' / 'raw'
RAW_DIR.mkdir(parents=True, exist_ok=True)

ts = datetime.now().strftime('%Y-%m-%d_%H%M%S')
for label, src in [('plan', plan_path), ('deploy', deploy_path), ('manage', manage_path)]:
    if src and Path(src).exists():
        shutil.copy2(src, RAW_DIR / f'{ts}_{label}_{Path(src).name}')

Step 2 — 识别方案类型并确定模板

根据文件名和内容判断方案类型,确定对应模板:

方案类型匹配关键词对应模板目录
私有云-计算扩容(VLAN)私有云 + 计算 + VLAN/home/deploy_template/私有云/计算/普通计算/VLAN
私有云-计算扩容(VXLAN)私有云 + 计算 + VXLAN/home/deploy_template/私有云/计算/普通计算/VXLAN
私有云-存储扩容私有云 + 存储/home/deploy_template/私有云/存储/存储扩容
私有云-裸金属扩容裸金属/home/deploy_template/私有云/裸金属/*
行业云-计算扩容(VLAN)行业云 + 计算 + VLAN/home/deploy_template/行业云/计算/普通计算/vlan
行业云-计算扩容(VXLAN)行业云 + 计算 + VXLAN/home/deploy_template/行业云/计算/普通计算/vxlan
行业云-存储扩容行业云 + 存储/home/deploy_template/行业云/存储/原集群扩容
...(完整24种见原版)

匹配优先级:文件名 → 文件路径 → 正文第一段 → 让用户确认

Step 3 — 调用审核引擎

直接调用 scripts/generate_review_report.py,不要再手动写 Python:

import sys
sys.path.insert(0, str(Path.home() / '.hermes/skills/openclaw-imports/deploy-plan-review'))

from scripts.generate_review_report import run_audit

result = run_audit(
    plan_path="/path/to/变更方案.docx",
    deploy_path="/path/to/部署表.xlsx",
    manage_path="/path/to/纳管表.xlsx"  # 可选
)

返回的 result 字典结构:

{
    "plan_name": "方案文件名(不含扩展名)",
    "plan": {...},        # 方案解析结果
    "deploy": {...},      # 部署表解析结果
    "manage": {...},      # 纳管表解析结果(可能为 None)
    "findings": [...],    # 全部审核发现列表
    "docx_path": "output/审核报告_xxx.docx",
    "xlsx_path": "output/问题跟踪_xxx.xlsx",
    "summary": {
        "p0": N, "p1": N, "p2": N, "p3": N,
        "total": N,
        "conclusion": "通过/条件通过/不通过",
        "timestamp": "2026-05-09_143025",
    },
    "raw_archived": "data/raw/",
}

Step 4 — 发送报告到聊天窗口

审核完成后,必须将 Word 报告发送到当前聊天窗口

报告已生成,请查收:
MEDIA:<docx_path>

同时发送一份文字摘要:

📋 审核完成 — {plan_name}

风险统计:🔴P0={p0}  🟡P1={p1}  🔵P2={p2}  ⚪P3={p3}
审核结论:{conclusion}

关键发现:
- {列举前3条最高风险问题}

详细报告请下载上方文件。
问题跟踪表:{xlsx_path}

Step 5 — 结果留存

所有过程文件统一在 skill 目录下:

~/.hermes/skills/openclaw-imports/deploy-plan-review/
├── SKILL.md
├── scripts/
│   └── generate_review_report.py   # 审核引擎
├── output/                          # 审核报告输出
│   ├── 审核报告_方案名_2026-05-09_143025.docx
│   └── 问题跟踪_方案名_2026-05-09_143025.xlsx
├── data/
│   ├── raw/                         # 原始输入存档
│   │   ├── 2026-05-09_143025_plan_变更方案.docx
│   │   ├── 2026-05-09_143025_deploy_部署表.xlsx
│   │   └── 2026-05-09_143025_manage_纳管表.xlsx
│   └── 问题跟踪表.xlsx              # 全量历史问题库

审核基准

核心原则:所有审核以 /home/deploy_template/ 下的方案模板为基准,不主观判断。

审核分四大类:

A类 — 结构合规性(以模板为准)

检查项风险ID审核方法
章节完整性P1-07匹配变更需求/变更安排/变更步骤/割接回退四章
表格完整性P1-06版本修订记录表是否更新(非空白/非占位)
人员表完整P1-03实施/复核/审批/客户四角色是否齐全
占位符替换P2-01搜索 {XXX} [待补充] [填写] XXX资源池

B类 — 数据一致性(方案 vs 部署表)

检查项风险ID审核方法
节点数量P0-02方案标题"新建N台" vs 部署表行数
CPU/OS架构P0-03方案中 x86/aarch64 vs 部署表CPU列
yum源架构P0-04repo URL架构 vs 部署表CPU架构
mon IPP0-05mon节点IP是否在存储IP段内
AZ为空P0-06方案说"新建AZ"但部署表az=NULL
标题正文矛盾P1-01标题数量 vs 正文数量
节点IP不一致P1-02方案IP vs 部署表IP交叉比对

C类 — 纳管表交叉核验(新增)

检查项风险ID审核方法
服务器缺失P0-08部署表中IP是否全部在纳管表中
IP不一致P0-09同IP下部署表与纳管表的hostname是否一致
状态异常P3-01纳管表中是否存在非"已纳管"状态
AZ不一致P3-02同IP下部署表AZ vs 纳管表AZ

D类 — 编辑质量

检查项风险ID审核方法
错别字P2-02扩融→扩容、资原池→资源池 等8组检测
编号错误P2-04章节编号是否跳跃
占位符P2-01全文正则搜索
命名规范P2-06文件名格式检查

风险等级体系(四级)

🔴 高危风险(P0 — 必须改,不改将导致部署失败或业务中断)

ID风险项判定标准
P0-01IP地址冲突多个节点使用同一IP,或与生产环境IP段重叠
P0-02IP不连续/数量不符IP区间数量 ≠ 实际节点数
P0-03CPU/OS架构矛盾方案x86但部署表aarch64(或反之)
P0-04yum源架构不匹配repo URL架构(aarch64/x86_64)与节点不一致
P0-05monitors数量/IP错误mon IP不在存储IP段,或数量<3
P0-06AZ字段为NULL但方案说新建新建AZ场景下部署表az列为空
P0-07关键步骤缺失缺少模板中标记为「必须/必做」的操作步骤
P0-08纳管表服务器缺失部署表中的服务器在纳管表中不存在
P0-09纳管IP不一致部署表管理IP与纳管表管理IP不一致

🟡 中危风险(P1 — 建议改,不影响部署但影响正确性)

ID风险项判定标准
P1-01标题与正文矛盾标题数量与正文数量不一致
P1-02节点信息不一致方案节点列表与表格/部署表不一致
P1-03变更人员表不完整实施/复核/审批/客户角色缺失
P1-04变更时间不合理时间已过或窗口时长不合理
P1-05配置参数错误expand/config.json与部署表不一致
P1-06版本修订记录未更新版本修订表为空白或占位符
P1-07章节缺失缺少非关键章节(如割接回退)
P1-08网络配置矛盾VLAN/VXLAN模式不一致

🔵 低危风险(P2 — 按需修改,规范性/编辑类问题)

ID风险项判定标准
P2-01占位符未替换仍含 {XXX}、[待补充] 等模板占位符
P2-02文字错别字「扩融」「资原池」「部暑」等
P2-03格式不一致标题字号不统一
P2-04编号错误章节编号跳跃
P2-05截图/图片缺失「截图示例」未替换
P2-06文件命名不规范缺少日期或资源池名
P2-07操作记录表格式错误列名或格式与模板不一致

⚪ 提示信息(P3 — 仅供参考)

ID风险项判定标准
P3-01纳管表状态异常存在非「已纳管」状态的服务器
P3-02纳管表AZ不一致纳管表AZ与部署表AZ不匹配

审核结论判定

结论判定规则
通过无 P0 项,且 P1+P2 ≤ 3 项
⚠️ 条件通过无 P0 项,P1 项 ≤ 5 项,修改意见已明确标注
不通过存在 P0 项,或 P1 项 > 5 项

CLI 用法(可选)

审核引擎支持命令行独立运行:

cd ~/.hermes/skills/openclaw-imports/deploy-plan-review

python3 scripts/generate_review_report.py \
    --plan /path/to/变更方案.docx \
    --deploy /path/to/部署表.xlsx \
    --manage /path/to/纳管表.xlsx   # 可选

# JSON 输出(供程序调用)
python3 scripts/generate_review_report.py \
    --plan ... --deploy ... --manage ... \
    --json

边界情况

  • 文件不全(仅1个或仅有纳管表):拒绝解析,直接提示缺失文件(Step 0.1)
  • 无纳管表:触发 clarify 询问,用户可选跳过(C类检查跳过,A/B/D类正常执行)
  • 用户选A/B:等待用户补充或回复后再继续,不尝试跳过
  • 部署表sheet名称不标准:自动搜索含"服务器"/"server"/"02"的sheet
  • 纳管表列名不标准:自动检测"管理IP"/"Management IP"/"主机名"/"AZ"/"状态"/"管理平台"等常见列名
  • 方案无章节标题:P1-07 判定为"缺少全部四章"
  • 方案含多个方案:仅审核主要方案,其他部分忽略

参考

  • 模板目录:/home/deploy_template/
  • 模板结构分析:/root/模板结构分析报告.md
  • 配套技能:deploy-fault-analyzer — 部署故障分析
  • 设计参考:deploy-fault-analyzer v2.0 的 Step 0 存档、多源输入、统一目录结构等模式
  • 编写者注意:Python 中文 f-string 引号陷阱见 references/pitfalls.md