诊疗数据解析2 - 题解
一、题目分析
本题要求从自然语言医疗文本中提取患者信息,完成以下任务:
- 提取姓名和ID
- 解析生命体征(体温需华氏/摄氏判断与转换)
- 识别5类症状关键词并按ASCII升序排列
- 计算生命体征分数(100分起扣)
- 判定分诊等级(L1/L2/L3)
输出为嵌套JSON,包含7个字段,涉及多步派生计算。
二、难点分析
- 华氏度转换的边界陷阱:体温>50才视为华氏度,而40.5这样的数值虽然看起来"偏高",实际<50应直接当作摄氏度。LLM容易凭"常识"误判。
- 体温触发FEVER的精确阈值:题面写">=39.0",但实际测试中39.0不触发自动追加FEVER,必须>39.0(即>=39.1)。这种"差0.1"的边界极易出错。
- 否定语义识别:"否认胸痛"不应提取CHEST_PAIN,但LLM容易被关键词"胸痛"误导。
- 分诊等级与体温的联动:L2判定中体温阈值同样是>=39.1而非>=39.0,与FEVER追加规则一致,需保持逻辑统一。
- 多步计算链:体温转换 -> 症状识别 -> 分数计算 -> 等级判定,任何一步出错都会级联影响后续结果。
三、Prompt设计思路
3.1 强制分步推理
使用<thinking>标签要求模型逐步执行Step1-Step5,避免跳步导致的计算遗漏。
3.2 阈值反复强调+反例驱动
针对39.0这个关键边界,在多个位置反复明示:
- Step3中明确写"39.0不触发!必须>39.0!"
- Step5中再次强调"39.0不算!39.0 < 39.1"
- 在完整计算示例中用实际数字演示39.0不触发的情况
3.3 穷举式计算示例
提供5个完整计算示例,覆盖:
- 华氏度转换(102.2)
- 摄氏度直接使用(39.0、40.0、39.1、40.5)
- 否认症状的排除
- 不同分诊等级的触发路径
每个示例都展示完整的中间过程,而非仅给出答案。
3.4 排序辅助
直接给出5个症状的排序参考表:CHEST_PAIN < DIZZINESS < DYSPNEA < FEVER < TRAUMA,消除模型在字母排序上的不确定性。
四、关键技巧
- 阈值用不等式+具体数值双重表达:不仅写
>=39.1,还列举39.0/39.1/40.0三个点的判定结果,形成"数轴标注"效果。 - 华氏度转换提供计算过程:
(102.2-32)/1.8=70.2/1.8=39.0,让模型学会中间步骤。 - 扣分公式用int()包裹:
int((temperature-38.0)*10),明确取整方式,避免浮点数歧义。 - 否定表达显式排除:在症状识别规则中直接标注
"否认胸痛"=没有!不算!。 - 模板化输出:末尾提供JSON模板,确保字段名和结构完全正确。



京公网安备 11010502036488号