医嘱信息提取系统2 - 题解
一、题目分析
本题要求从医嘱文本中解析用药信息,输出嵌套JSON:
- drug_metadata:药品元数据(名称、分类、包装规格、优先级覆盖标记)
- theoretical_total:理论用量(需分段累加计算)
- final_dispense:最终发药(向上取整到整板)
涉及药品分类判定、分段给药计算、整板发药三个核心计算模块。
二、难点分析
- "总共X天" vs "再吃X天"语义差异:这是本题最大陷阱。"总共7天"中首剂占第1天,需减1;"再吃7天"是额外天数,不需要减。LLM极易混淆两者。
- 抗生素关键词的子串匹配:
阿莫西林含"西林"是抗生素,但阿司匹林含"匹林"不含"西林",不是抗生素。模型容易做模糊匹配。 - 优先级覆盖标记:当药名同时含抗生素和缓控释关键词时,分类按抗生素(pack_size=6),但需额外标记is_priority_override=true。这是一个容易遗漏的联动字段。
- 多段给药的累加计算:如"前2天2片qd + 之后1片qd再吃7天",需要正确识别分段边界并分别计算再求和。
三、Prompt设计思路
3.1 "总共" vs "再吃"对比教学
这是prompt设计的核心。用两组对比示例直接展示差异:
- "总共7天":首剂3片 + 1片x(7-1)天 = 9。明确标注"不是3+7=10!"
- "再吃7天":前2天用量 + 后7天用量 = 11。明确标注"不是减去前面的2天!"
通过正确答案+错误答案对比,让模型建立正确的语义映射。
3.2 抗生素关键词精确匹配
逐一列出4个关键词(霉素/沙星/头孢/西林),并用注释标注易混淆项:
- "左氧氟沙星"含"沙星" -> 是抗生素
- "阿司匹林"含"匹林"不含"西林" -> 不是抗生素
3.3 五个完整计算示例
覆盖所有关键场景:
- 同时含抗生素+缓释关键词(阿奇霉素缓释片)
- "阿司匹林"的反例(不是抗生素)
- "总共吃1周"的首剂场景
- "再吃X天"的额外天数场景
- 三段给药的复杂累加(泼尼松缓释片)
3.4 频次映射表前置
将qd/bid/tid/qid/qn的频次映射集中呈现,避免模型在计算时猜测频次含义。
四、关键技巧
- 反例标注:在计算示例中用"不是X!"标注常见错误答案,主动预防误解。
- 优先级用检查顺序表达:"先检查抗生素关键词(优先级最高!)",用步骤顺序代替抽象优先级描述。
- ceil函数显式写出:
ceil(14/6)=3板(14/6=2.33->3),展示除法结果和取整过程。 - 子串匹配而非语义匹配:强调"药名包含'沙星'"是字面子串检查,避免模型做药理学推断。
- 完整计算链展示:每个示例从drug_name到final_dispense全流程展示,确保模型理解步骤依赖关系。



京公网安备 11010502036488号