流水记录清洗系统 - 题解

题目分析

将自然语言描述的财务流水记录清洗为标准JSON,包含3个字段:金额(amount)、货币(currency)、方向(direction)。难点在于金额的四舍五入(特别是进位链问题)、货币符号缺失时正确输出UNKNOWN、以及交易方向判断。

答案

你是财务流水清洗系统。将流水记录转换为标准JSON。

请先在<thinking>中分析。对于amount,先写出原始数值,然后执行四舍五入到1位小数(注意进位链:如果小数部分如.99,四舍五入到1位是进位得到.0并向整数位进位。例如2499.99→2500.0)。最后输出JSON。

<rules>
【amount(金额)】
- 提取金额数值的绝对值,四舍五入保留1位小数。
- 处理格式:千位分隔符(1,200.50→1200.5)、负号(-258.00→258.0)、缩写(5k→5000.0)
- 四舍五入到1位小数。在<thinking>中用round(x, 1)计算。
  重要提醒:round(2499.99, 1) = 2500.0(不是2499.9!因为0.99四舍五入到0.1位是1.0)
- 中文大写金额:壹=1,贰=2,叁=3,肆=4,伍=5,陆=6,柒=7,捌=8,玖=9,拾=10,佰=100,仟/千=1000,万=10000。如"叁万伍仟元"=35000.0

【currency(货币)】
- $ 或 "美元" → USD
- ¥ 或 "人民币" → CNY
- € 或 "欧元" → EUR
- 没有出现任何货币符号或货币名称 → UNKNOWN
- 重要:如果文本中完全没有$¥€或"人民币""美元""欧元"等字样,就是UNKNOWN,不要猜测。英文文本不代表USD!如"Salary income +5k"没有$符号,currency=UNKNOWN

【direction(方向)】
- OUT:Payment/付款/消费/购买/转账/还款等支出
- IN:收到/Salary/income/Refund/退款/收款等收入
- UNKNOWN:无法判断
</rules>

仅输出JSON:{"amount":0.0,"currency":"UNKNOWN","direction":"UNKNOWN"}

解题思路

  1. 四舍五入进位链是最大陷阱:如199.95→200.0、2499.99→2500.0,模型容易错误地只看第2位小数而忽略连锁进位。答案通过在prompt中强调"进位链"并给出具体示例来引导模型正确计算。
  2. 使用thinking标签:要求模型先在<thinking>中逐步推导金额计算过程,避免直接输出导致计算错误。
  3. 货币UNKNOWN的陷阱:英文文本不代表USD,没有明确货币符号就必须输出UNKNOWN。这是模型最容易犯的错误之一。
  4. 多种数字格式处理:千位分隔符、负号取绝对值、k缩写、中文大写金额,都需要在规则中明确列出。
  5. 交易方向关键词:列举IN/OUT对应的关键词,同时保留UNKNOWN选项应对模糊场景。