本文目录导读:

实用脚本要在“可执行”和“可判断”之间取得平衡,核心思路是:让脚本负责定量,让人负责定性;脚本输出事实与边界,人做价值与语境判断。 下面从设计原则、结构模式、具体手法和示例来展开。
先分清:哪些该定量,哪些该定性
| 维度 | 适合定量(脚本) | 适合定性(人) |
|---|---|---|
| 数据 | 计数、比例、阈值、趋势、异常检测 | 含义、动机、优先级、伦理 |
| 判断 | 是否超过阈值、是否匹配规则 | 是否值得做、是否可接受 |
| 输出 | 指标、清单、候选集、告警 | 决策、取舍、解释 |
| 场景 | 重复、规则明确、可度量 | 模糊、上下文依赖、价值冲突 |
原则:脚本不做价值判断,只提供判断所需的证据和边界。
四种平衡模式
阈值 + 人工复核
脚本算出分数/指标,超过阈值才推送给人。
- 脚本:计算风险分 0–100
- 人:>80 必须复核,60–80 抽样,<60 自动通过
候选集 + 人工排序
脚本缩小范围,人做最终选择。
- 脚本:从 10000 条中筛出 50 条候选
- 人:从 50 条中定 5 条
多信号 + 加权解释
脚本输出多个维度的定量结果,并给出“为什么”,人综合判断。
- 脚本:
{覆盖率: 0.92, 冲突数: 3, 置信度: 0.71, 原因: [...]} - 人:结合业务语境决定是否采纳
规则引擎 + 例外通道
脚本处理标准情况,人处理例外。
- 脚本:自动处理 90% 标准案例
- 人:10% 例外进入人工队列
脚本设计的具体手法
输出要“可解释” 不要只给一个数字,要给构成这个数字的分项和权重。
result = {
"score": 0.78,
"breakdown": {"完整性": 0.9, "一致性": 0.6, "时效性": 0.8},
"flags": ["一致性偏低"],
"confidence": "medium"
}
显式标注不确定性
- 置信度、样本量、数据缺口
- 例:
"样本量": 12, "置信度": "低", "建议": "人工确认"
把定性判断变成可配置参数 不要把人的判断硬编码进脚本,而是暴露为配置项。
thresholds: auto_approve: 0.9 manual_review: 0.6 weights: risk: 0.5 value: 0.3 cost: 0.2
保留原始数据与中间结果 便于人回溯、复核、调整判断。
分级输出
- L1 自动通过
- L2 自动通过 + 记录
- L3 人工复核
- L4 人工决策 + 记录理由
一个完整示例:内容审核脚本
def review_content(text):
# 定量部分
score = 0
reasons = []
if contains_banned_words(text):
score += 50
reasons.append("命中违禁词")
if toxicity_score(text) > 0.7:
score += 30
reasons.append("毒性偏高")
if is_duplicate(text):
score += 10
reasons.append("疑似重复")
# 分级
if score >= 80:
action = "block"
need_human = True
elif score >= 50:
action = "flag"
need_human = True
else:
action = "pass"
need_human = False
return {
"action": action,
"score": score,
"reasons": reasons,
"confidence": "high" if len(reasons) > 1 else "low",
"need_human": need_human,
"raw": text # 保留原文供人判断
}
人看到的是:分数 + 原因 + 是否需要介入 + 原文,而不是一个黑箱结果。
常见反模式
| 反模式 | 问题 | 改进 |
|---|---|---|
| 脚本直接下结论 | 越权做价值判断 | 输出证据,人做结论 |
| 只有一个总分 | 无法解释、无法复核 | 输出分项 + 原因 |
| 硬编码阈值 | 无法适应语境 | 配置化、可调 |
| 不标置信度 | 误导决策 | 显式标注不确定性 |
| 例外无法处理 | 边界情况崩溃 | 保留人工通道 |
一句话总结
脚本负责“把世界变成可读的数字和边界”,人负责“在这些数字和边界之上做取舍”。 平衡点在于:脚本输出得足够结构化、可解释、可配置,让人能在几秒内完成定性判断,而不是被淹没在数据里,也不是被黑箱替做决定。