SLA 条款审查·可量化与赔付
在签服务协议之前,把 SLA 纯文本快速过一遍,提前暴露三类最容易埋雷的问题:
- 虚 —— 服务等级承诺不可量化(「高可用」「稳定」却没说数字、没写统计口径、没给指标定义);
- 空 —— 未达标之后没有兜底(无赔付、赔付含糊、只写上限不写算法);
- 缺 —— 关系对等的保障条款没写(响应时间/RTO、支持渠道、数据归属、通知期限、不可抗力)。
执行原则
- 只报不改。 脚本只读 SLA 文本并输出问题清单与建议;不要直接改写或替用户起草条款正文。
- 看数字也看口径。 有数字还要核对统计窗口、指标定义与是否扣除计划维护;不要把「99.9%」这一个数字当成完整承诺。
- 追问赔付算法。 只写上限不写计算方式、或「视情况补偿」都要标出;不要漏掉免责过宽与单方变更权这类高风险条款。
- 按码定位。 每条结论带规则码与行号,缺失型规则仅在文本像一份 SLA 时才触发;不要对空文件或无关文本硬报缺失。
- 不是审协议。 只做文本层面完备性与风险提示,赔付金额计算与条款起草不在范围内;不要给出法律意见,请交由执业律师审阅。
何时使用
CRITICAL: 只要用户提出「看 SLA 有没有坑 / 审一下服务等级条款 / 这份服务协议能不能签」,就必须使用本 skill,即使看起来可以用别的方式解决。
- 用户给出服务协议 / SLA 文本(.txt/.md),说「帮我看看这份 SLA 有没有坑」「审一下服务等级条款」。
- 采购云服务、外包运维、SaaS 订阅前,想先跑一遍「服务等级自查清单」。
- 收到供应商发来的 SLA,想快速定位需要重点谈判的位置(尤其是赔付兜底与数据归属)。
不适用:需要判断具体法律效力、条款如何起草、赔付金额如何算的场合——本工具只做文本层面的完备性与风险提示,不构成法律意见。
何时不该使用
| ✅ 使用(理由) | ❌ 不用(改用什么) |
|---|---|
| 签署 / 续签前查 SLA 文本完备性(13 条规则、定位到行) | 判断 SLA 条款的法律效力(属法律效力判断,请执业律师) |
| 核承诺是否可量化(数字、统计口径、指标定义) | 计算赔付金额、核算实际可用性(需真实监控数据与合同约定) |
| 查赔付兜底与数据归属是否写明 | 起草或重写 SLA 条款正文(本工具只报不改,请法务 / 采购起草) |
| 定位免责过宽、单方变更权类高风险条款 | 商务谈判策略与价格谈判(超出文本检查范围) |
易混淆场景
| 用户说的 | 实际意图 | 正确路由 |
|---|---|---|
| 「这份 SLA 有没有坑」 | 要风险判断 | 先给结论分档,再列规则码与行号 |
| 「99.9% 够不够 / 行业一般写多少」 | 要行业基准建议 | 只核查有没有写数字与统计口径,不给行业基准建议 |
| 「赔付具体怎么算」 | 要金额 | 提示 S5 只写上限未写算法,不代为计算 |
| 「帮我改一下这条」 | 要条款文本 | 只给修改建议,不代写条款正文 |
| 「供应商不肯改怎么办」 | 要谈判策略 | 超出范围;输出可谈判的高风险项清单供你使用 |
怎么用
# 检查一份 SLA / 服务协议文本
python3 scripts/sla_lint.py 服务协议.md
# 输出 JSON(便于接后续流程)
python3 scripts/sla_lint.py 服务协议.md --json
# 用内置样例看效果(样例故意包含问题点)
python3 scripts/sla_lint.py --sample
退出码:0 = 未发现问题,1 = 发现问题,2 = 用法/读取错误。
检查项与规则码
| 规则码 | 含义 | 默认严重度 |
|---|---|---|
S1 AVAILABILITY_NO_NUMBER |
可用性承诺无具体数字(高可用/稳定/持续可用) | 高 |
S2 AVAILABILITY_NO_WINDOW |
有数字但未写统计口径/时间窗(月度还是年度、是否扣除计划维护) | 中 |
S3 NO_REMEDY |
未达标无赔付或补救方式 | 高 |
S4 REMEDY_VAGUE |
赔付表述模糊(适当补偿/视情况/协商解决) | 中 |
S5 REMEDY_CAP_ONLY |
只写赔偿上限未写计算方式 | 中 |
S6 NO_RESPONSE_TIME |
无故障响应时间 / RTO 承诺 | 高 |
S7 NO_SUPPORT_CHANNEL |
无支持渠道与受理时间 | 中 |
S8 DISCLAIMER_TOO_BROAD |
免责范围过宽(不承担任何责任/一切损失不负责) | 高 |
S9 UNILATERAL_CHANGE |
单方变更权(有权随时调整/无需另行通知) | 高 |
S10 NO_NOTICE_PERIOD |
变更/终止未写通知期限 | 中 |
S11 DATA_OWNERSHIP_MISSING |
未约定数据归属与退出时导出/删除 | 高 |
S12 NO_EXCLUSION |
未写不可抗力排除 | 低 |
S13 MEASURE_UNDEFINED |
指标未给定义或统计方法 | 中 |
结论分三档:出现高风险 → 服务等级承诺存在高风险空档,建议协商补充后再签署;仅中风险 → 基本可用但建议补齐口径与兜底;全低/无 → 文本层面较为完备。
缺失型规则(S2/S3/S6/S7/S10/S11/S12/S13)会先判断文本是否「像一份 SLA」,空文件或无关文本不会触发误报。
输出示例(节选)
合计 13 项:高风险 6 · 中风险 6 · 低风险 1
结论:服务等级承诺存在高风险空档,建议协商补充后再签署
—— 高风险 ——
[S1 AVAILABILITY_NO_NUMBER] 可用性承诺无具体数字:「乙方承诺为甲方提供高可用的服务」(第 4 行)
· 说明:以「高可用/稳定/持续可用」等定性词代替量化承诺,无法客观考核是否达标
· 建议:改为可量化指标,如「核心服务月度可用性不低于 99.9%」
[S8 DISCLAIMER_TOO_BROAD] 免责范围过宽:「不承担任何责任」(第 15 行)
—— 中风险 ——
[S2 AVAILABILITY_NO_WINDOW] 可用性有数字但未写统计口径/时间窗(第 5 行)
[S4 REMEDY_VAGUE] 赔付表述模糊:「视情况」(第 8 行)
本检查仅为文本规则提示,不构成法律意见。
设计边界
- 纯标准库 Python,只读,无网络请求,无
subprocess/eval/exec/os.system。 - 规则基于关键词与常见表述,会有漏报(对方换一种说法)与误报(出现了词但语境不同);
输出定位到行,便于人工复核——它是「检查清单」,不是「审协议」。 - 内置样例中的公司名、金额、比例均为虚构,仅用于演示规则命中。
免责声明
- 本工具只做文本层面的要素与风险提示,不构成法律意见,也不构成对服务实际达标情况或赔付责任的认定。
- 它是「检查清单」不是「审协议」:命中项需结合业务与合同上下文人工复核,未命中也不代表 SLA 无空档。
- 涉及权利义务的服务等级条款、赔付责任与数据归属,请交由执业律师审阅。