在医疗收入周期里,我负责写保险拒赔的上诉信。公开数据比任何解释都更有力:KFF在2026年7月报告,熟练护理拒赔案件一旦上诉,95%会被推翻;但实际只有18%的案件被上诉。没有人会放弃一场预期必胜的官司,他们只是——没人有时间写。 这就是为什么需要把“人审”变成“机器检查”。我构建了一个最小的模式,核心只有两个角色:Check和gate。 Check是一个冻结的数据类,包含检查名称、评分函数、最低分数线,以及一个“是否硬性失败”的标志。硬性失败意味着永远不重试,直接终止。 gate则负责执行循环:调用生成器,对输出逐项评分,如果全部通过就返回;如果有失败,则把失败反馈注入下一次生成;如果遇到硬性失败,直接抛错。最多尝试三次,仍不通过就升级处理。 这个模式的精髓在于:没有任何模型输出能绕过评分进入下游。一次失败不是被记录后遗忘,而是转化为下一轮生成的上下文。用代码说,就是: from dataclasses import dataclass @dataclass(frozen=True) class Check: name: str score: callable # (output, ctx) -> float in [0, 1] floor: float hard: bool = False def gate(generate, checks, ctx, attempts=3): trace, feedback = [], None for i in range(attempts): out = generate(ctx, feedback=feedback) scores = {c.name: c.score(out, ctx) for c in checks} failed = [c for c in checks if scores[c.name] < c.floor] trace.append({"attempt": i, "scores": scores, "failed": [c.name for c in failed], "output": out}) if not failed: return out, trace if any(c.hard for c in failed): raise HardFailure(failed[0].name, trace) feedback = render_feedback(failed, scores) raise Escalate(trace) 整个想法就这么简单,但领域无关。任何你想让LLM干活、又没人愿意逐行检查的场景,都是这个形状。 为什么不干脆用人在环?因为在每个输出上都安排一个人,不是安全机制,而是吞吐量的天花板——而且恰恰是你本来想提高的那个天花板。把任务从“写”变成“审”,只是换了一个姿势,天花板没变,还多了一个“审核通过”的虚假许可。 用检查替代人审,让反馈自动循环,让硬规则瞬间拦截。没有人在环,但环里处处是原则。
![]()
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.