食材解析系统2 - 题解
一、题目分析
本题要求从食材描述文本中提取5个字段:
- zone:存储分区(FROZ/COOL/PANT),按关键词优先级判定
- net_qty:净含量,需处理"半瓶""大半"等修饰词
- unit:单位类型(LIQUID_ML/SOLID_G),需根据物品类型判定
- expiry:保质期日期,涉及日期加法计算
- data_warning:单位与物品类型不匹配时为true
二、难点分析
- "剩下的"语义陷阱:题面规则写"含'剩'触发COOL",但"剩下的"是数量修饰语(remaining),不是食物状态描述。LLM容易做字面匹配而误判。
- 单位-物品类型交叉判定:当体积单位(升/L)用于描述固体(肉),需要同时修改unit、net_qty和data_warning三个字段,是一个联动修改。
- 日期加法计算:从购买日期加90/365天需要跨月计算,涉及每月天数差异(5月31天、6月30天等),LLM的数学能力容易出错。
- 修饰词优先级:当单位不匹配时,"大半"等修饰词失效,net_qty强制为-1.0。这种条件覆盖关系容易被忽略。
三、Prompt设计思路
3.1 语义辨析+示例对比
针对"剩下的"陷阱,直接在规则中用自然语言解释:
- "剩下的"是数量修饰语(remaining),不触发COOL
- 只有"剩菜""剩饭"等描述食物状态时才触发
- 给出对比示例:"剩下的花生油" vs "剩菜"
3.2 日期计算逐步展开
提供3个不同起始日期+90天的详细计算过程:
- 2024-05-31 + 90天:逐月累加展示
- 2024-05-30 + 90天:同上
- 2024-05-29 + 90天:同上
通过"5月剩X天 -> 6月30天(累计Y) -> 7月31天(累计Z) -> 8月需W天"的格式,教模型正确做跨月加法。
3.3 完整计算示例覆盖典型场景
提供3个端到端示例:
- 半桶硬邦邦的鲜牛奶(FROZ优先级 + 液体单位 + 昨天购买)
- 5升冻肉(单位不匹配 -> data_warning + net_qty强制-1.0)
- 剩下的花生油("剩下的"不触发COOL)
3.4 液体/固体关键词列表化
明确列出液体类物品关键词(水、奶、油、酒、汁、饮)和固体类物品关键词(肉、米、糖、鱼、菜、蛋),减少模型的推断空间。
四、关键技巧
- 优先级用Step编号强调:zone判定用Step1/Step2/Step3表示优先级递减,而非仅用文字描述。
- 不匹配联动规则显式写出:
unit=SOLID_G, net_qty=-1.0, data_warning=true三者打包出现,避免模型只改其中一个。 - "昨天/前天/大前天"映射表:直接给出日期对应关系,消除相对时间的歧义。
- 反例教学:在zone规则的示例中既有正例("冻肉"->FROZ)也有需要仔细辨别的例子("硬糖"->FROZ),确保模型理解是字面匹配而非语义判断。
- 默认值兜底:无购买时间和保质期信息时,默认从2024-06-01开始加分区天数,确保每种情况都有输出。



京公网安备 11010502036488号