航班票务退款专员 - 题解

一、题目分析

本题要求根据国内航班退票规定,计算旅客退票时的退款金额和手续费。输出3个字段:refund_amount(整数)、fee_charged(整数)、policy_applied(策略列表)。涉及5条规则,核心难点在于规则间的优先级关系和舱位折扣。

二、难点分析

  1. 三层优先级嵌套:T.5误机 > T.4病退 > T.3特价 > T.1+T.2常规计算病退(T.4)可以覆盖特价限制(T.3),但误机(T.5)可以覆盖病退。LLM容易在"有医疗证明+已误机"场景下错误地全额退款。
  2. 时间区间边界:"7天含168小时":恰好168小时属于哪个区间?题目说">168小时"是5%,"≤168小时"是20%,恰好7天=168小时应收20%。这个边界设计专门针对LLM的"含"与"不含"理解偏差。
  3. 舱位代码的隐蔽性:Class C看起来像经济舱代码,实际是公务舱,手续费需打5折。LLM容易把C归类为经济舱。
  4. policy_applied的组合逻辑:病退+特价:需要列["T.3","T.4"](先触发T.3再被T.4覆盖)常规计算:必须同时列["T.1","T.2"]模型容易漏列或多列规则。

三、Prompt设计思路

  1. 命中即停的判定流水线:按优先级从高到低排列4个Step,每步判定后若命中则直接给出结果并"结束"。这种设计避免了模型在命中高优先级规则后继续执行低优先级计算。
  2. 每步给出完整输出模板:每个判定分支不仅写了条件,还直接写出对应的refund_amount、fee_charged、policy_applied值,模型只需匹配条件然后抄写结果。
  3. 时间判断用小时数量化:把"提前7天"转化为"168小时"进行比较,避免模型在"天"的边界上犯糊涂。并且给出多个时间点的判定示例(10天=240h, 7天=168h, 3天=72h等)。
  4. 舱位C的显式提醒:在Step4c处特别标注"Class C是公务舱,手续费要打5折!"这个提醒是针对模型常见错误的防御性设计。
  5. 关键示例精选:提供公务舱C+提前8天、经济舱Y+提前10天、经济舱B+提前12小时三个示例,分别覆盖舱位折扣、长时间区间、短时间区间。

四、关键技巧

  • 优先级瀑布流:将互斥规则设计为瀑布式判定(命中即停),比让模型自行判断"哪条规则优先"更可靠。
  • 量化时间避歧义:将天数转换为小时数进行比较,并用">"和"<="明确边界归属,消除自然语言的模糊性。
  • 异常舱位显式标注:对违反直觉的分类(C=公务舱)做特殊提醒,比依赖模型的先验知识更稳定。
  • thinking标签分离推理:要求先在<thinking>中判定,再输出JSON,避免模型跳过推理直接猜答案。
  • 结果模板化:每个分支都给出完整的输出值,减少模型"知道走哪个分支但算错具体值"的情况。