信用卡积分精算 - 题解

一、题目分析

本题要求根据《白金卡积分通用准则 v5.0》计算一笔信用卡交易的最终积分。规则链路:

  1. [R.5] 负面清单检查(优先级最高,命中则 0 分)
  2. [R.1] 基础积分 = 消费金额
  3. [R.2] 场景倍数(餐饮/酒旅 5x,网络支付 2x,取最高)
  4. [R.3] 生日月翻倍(倍数 ×2)
  5. [R.4] BlackCard 额外 +888
  6. [R.6] 封顶 20000

输出 final_score 和 triggered_rules 两个字段。

二、难点分析

  1. 倍数取最高而非叠加:支付宝+餐厅同时满足 2x 和 5x,需取 max=5x,模型容易叠加为 7x 或 10x
  2. 生日月翻倍作用于倍数后的结果:是先乘场景倍数再乘2,不是单独加成
  3. BlackCard +888 不参与翻倍:固定加赠在所有倍数计算之后,模型容易把 888 也翻倍
  4. 封顶在 BlackCard 加成之后:顺序敏感,先加 888 再判断是否超 20000
  5. triggered_rules 格式:需要带方括号 [R.1] 而非 R.1

三、Prompt 设计思路

3.1 严格的步骤化流程(Step1-Step7)

将 6 条规则转为 7 步顺序执行的流水线,每步有明确的输入输出变量名(base、current),避免模型跳步或乱序。

3.2 负面清单前置短路

Step1 就检查黑名单,命中直接输出 0 分,不进入后续计算。这种"短路"设计减少了模型在边界情况下的出错概率。

3.3 品类关键词扩展

将"餐饮"扩展为"餐饮/餐厅/米其林/饭店/餐","酒旅"扩展为"酒店/旅游/民宿",增加模型的匹配准确率。还特别标注"星巴克/咖啡店也属于餐饮"。

3.4 多场景完整示例

提供 5 个示例覆盖:

  • BlackCard + 生日月 + 多品类 → 取 max 倍率
  • 高金额触发封顶
  • 普通卡 + 酒旅 + 生日月 → 封顶
  • 普通卡 + 网络支付(非餐饮)→ 2x
  • 各种边界组合

3.5 区分"普通卡"和"BlackCard"

显式标注"普通卡不加",避免模型对非 BlackCard 用户也加 888。

四、关键技巧

  1. 思维链引导<thinking> 标签要求模型先计算再输出
  2. 变量名传递:用 base、current 等变量名让每步的计算结果串联起来
  3. 示例中展示完整算式:如 200×5=1000, ×2=2000, +888=2888,让模型学会计算过程
  4. 封顶检查位置明确:显式说明"这一步在 BlackCard 加成之后执行"
  5. 格式约束:结尾给出空 JSON 模板锚定输出格式,triggered_rules 示例中带方括号
  6. 普通卡也要检查封顶:用示例(5000×5×2=50000→20000)打破"只有 BlackCard 才会封顶"的假设