跳到主要内容

代码作为业务规则约束

自然语言规则为什么不够精确?​

  • 歧义来源: 业务规则、办事流程、决策逻辑若只用自然语言描述,概念边界难以界定;
  • 追问示例: “合理的退款请求”“紧急情况”这类概念的边界很难界定;
  • 边界示例: “购买后 7 天内可退款”看似清楚,但“7 天”是自然日还是工作日、“购买”是下单时间还是发货时间都无从确定;
  • 对照: 代码提供无歧义、可执行的表达——要么成功运行,要么抛出错误,不存在模棱两可;

自然语言规则与代码化规则各自优势是什么?​

形式优势局限
写在系统提示词可基于规则向用户解释政策、可寻找变通方案(改签而非取消)、可在调用工具前初判可行性存在理解偏差
编码为校验工具精确无歧义、执行确定(相同输入相同输出)、适合多条件布尔组合/时间计算/跨数据源验证不擅长向用户解释意图
  • 实践: 两者结合——系统提示词保留自然语言规则供理解与沟通,关键决策点配备代码化校验工具作为“守门员”;
  • 真正的价值: 代码化规则的意义不在优化 token 效率,而在防止不可逆的错误操作(取消订单、转出资金、删除数据);
  • 定位: 这是元能力作用在“业务规则”这一层,见 代码作为元能力;

参数如何充当思考的 checklist?​

  • 设计: 不另设独立校验工具,而是让执行工具内部先校验;
  • 做法: 工具描述列出完整政策并要求“调用前先查询订单详情、逐条核对”;
  • 引导参数: 提供可选的 expected_* 参数(如 expected_cabin_class、expected_has_insurance),促使模型把判断依据显式写出;
  • 强制效果: 为填好这些参数,模型必须先调查询工具获取订单详情并逐一确认条件——填参数的过程本身就是强制性 checklist;
  • 行为收益: 模型查到“经济舱且未购保险”时,很可能在准备调用过程中就注意到相关规则,从而根本不发起调用,直接告诉用户“无法取消,可考虑先购买保险或改签”;
  • 边界: 这一层只引导思考、减少无效调用,不承担安全责任——expected_* 只是模型的自我陈述,服务端从不把它当事实;

为什么服务端真值校验才是守门员?​

  • 关键设计: 舱位等级、保险状态、预订时间、航段使用情况、航班状态全部由服务端查数据库获得,当前时间来自服务端时钟;
  • 硬规则: 没有任何一条政策事实来自模型自报的参数;
  • 理由: 模型可能产生幻觉,也可能被提示注入操纵——同一上下文中的 Agent 难以自证清白;
  • 反例: 若把 cabin_class、has_insurance 乃至 current_time 设计成模型填写的参数,模型只要(或被诱导)报错一个值,守门员就形同虚设;
  • 原则: 最后一道防线必须建立在模型无法伪造的数据之上——独立性不仅指独立的模型,更指独立的数据来源;
  • 稽核设计: 模型自报值与真值不一致时记录告警,用于发现错误认知或潜在注入;
def cancel_reservation(reservation_id, cancellation_reason):
r = db.get_reservation(reservation_id) # 政策事实一律查库
now = server_clock.now() # 时间取服务端时钟
if r.any_segment_used: return reject("有已使用航段")
if (now - r.booking_time) <= 24h: return execute()
if r.flight_status == "cancelled_by_airline": return execute()
if r.cabin_class == "business": return execute()
if r.cabin_class in ("basic_economy", "economy"):
return execute() if r.has_insurance else reject("需购买保险")
return reject("不符合取消政策")

三重保障如何组合?​

  • 第一重: 系统提示词的自然语言规则,帮助理解与解释;
  • 第二重: 工具描述与参数设计作为 checklist,引导模型调用前显式核对;
  • 第三重: 服务端基于数据库真值的代码化校验作为最后守门员;
  • 分工: 前两重减少错误的发生,第三重确保错误不会变成不可逆的损失;
  • 实验观察: 在 τ-bench 航空客服场景下,小参数量模型(Qwen3-4B)采用三重保障后显著优于纯自然语言规则的控制组——任务成功率、政策违规次数、无效工具调用次数均有改善,并观察到模型在准备参数时自主识别违规、直接向用户提议替代方案;
  • 必要稽核: 统计 expected_* 自报值与数据库真值不一致的比例,验证服务端真值校验拦截错误认知的必要性;