AI数据叙事Day10:Prompt工程——让大模型理解元数据与本体
GPT能写论文、能编代码、能陪你聊哲学。但如果你直接把医院数据库的原始记录丢给它——六张 Excel 表、3990 名患者、几万条医嘱——它大概率会懵。
不是因为大模型不够聪明,而是因为它不知道你的数据"长什么样"。它不知道"患者 ID"和"就诊 ID"是什么关系,不知道"出院诊断"和"医嘱药品"之间隔着一张就诊记录。
换句话说:大模型懂语言,但不懂你的"本体"。
在我们的"医院叙事生成助手"项目中,解决这个问题的核心方法不是换更大的模型,而是做更精细的 Prompt 工程——把"元数据"和"本体"一起喂给大模型,让它先读懂数据的"说明书",再读数据本身。
项目中的元数据应该比较好理解,主要是对字段的描述,在此不做举例。(在现实实践过程中经常会遇到许多元数据写作不规范的情况,或者对方没有给你提供数据说明的情况,在本项目中也出现了不少类似情况,如何通过技术手段来形成科学的元数据规范,我们会在后续说明)
在我们的项目中,医疗知识图谱的本体包含:
9 类实体(节点):患者、就诊、疾病、主诉、检查、检验、药品、手术、科室
9 种关系(边):HAS_VISIT、DIAGNOSED_WITH、PRESCRIBED、PERFORMED_EXAM 等
属性约束:疾病分西医/中医两种 type,诊断分入院/出院两种 diagnosis_type
这些就是我们要喂给大模型的"说明书"。
项目中所有与大模型的交互,都遵循同一个三层结构。这不是什么高深理论,而是"让大模型不胡说"的工程实践。
大模型是个"千面演员",你给它什么剧本,它就演什么角色。在我们的项目中,不同场景给大模型分配了不同的"人设":
RAG 患者问答:"你是一位资深的医院数据分析师。请严格基于下方提供的患者真实就诊数据回答问题,不要编造任何数据。"
诊疗路径叙事:"你是一位资深医院科室主任,擅长总结科室诊疗规范和临床路径。"
患者故事线:"你是一位资深临床医生,擅长撰写专业的患者就诊记录摘要。语气专业但不冰冷。"
质控分析:"你是一位医院质量管理专家。请基于下方的质控异常检测数据,生成结构化、专业的质控分析报告。"
中医特色:"你是一位资深的中医临床数据分析专家。请区分中药/中成药与西药,分析用药组合的中医治则治法意义。"
角色设定的作用不仅是"风格",更是"约束"。当你告诉它"你是数据分析师,不要编造",它会在生成时自我审查,降低幻觉概率。
角色设定之后,大模型知道"我是谁",但还不知道"我在处理什么"。所以我们需要在 Prompt 中注入"本体描述"——不是把图谱的代码 schema 贴进去,而是用自然语言描述数据的结构和含义。
以 RAG 问答中的患者时间线为例,我们在 User Prompt 中这样描述数据结构:
患者就诊数据包含以下信息:
每次就诊的 ID、入院/出院日期、住院天数
主诉:患者入院时的主要症状描述
诊断:包含西医诊断和中医证型,标注是否为主诊断
用药:药品名称、剂量、频次、给药途径
检查:CT、B 超、心电图等检查项目
手术:手术名称、麻醉方式
异常检验:标记为异常的检验指标
这段描述就是"本体注入"——大模型读完之后,就知道"主诉"和"诊断"不是一回事,"用药"里的括号里的是频次而不是剂量,"异常检验"需要特别关注。没有这段说明,大模型可能会把"主诉"当成"诊断"来引用,或者把护理级别当成药品来统计。
有了角色和本体,最后一步是把"实例数据"格式化成大模型最容易消化的形式。
以患者故事线为例,我们从 Neo4j 图谱中检索出患者的完整时间线,然后格式化成这样的文本:
--- 第 1 次就诊 (2022-03-15 ~ 2022-03-22, 住院 7 天) --- 主诉:咳嗽、咯血 主要诊断:肺恶性肿瘤 用药:华蟾素胶囊(每日三次)、盐酸氨溴索口服液(每日两次) 检查:胸部 CT 平扫、肿瘤标志物 手术:胸腔镜肺叶切除术 异常检验:癌胚抗原升高
格式化文本既保留了结构(缩进、标签),又保留了可读性。
再以诊疗路径为例,统计数据被格式化为:
疾病:肺恶性肿瘤 相关就诊人次:1,247 平均住院天数:9.3 天 最常用药品: - 华蟾素胶囊: 892 例 (71.5%) - 盐酸氨溴索口服液: 756 例 (60.7%) 常见合并症: - 高血压: 423 例 (33.9%) - 肺部感染: 312 例 (25.0%)
这种格式让大模型一眼看出"频次"和"占比",也自然学会了在叙事中引用"71.5% 的患者使用华蟾素胶囊"这样的精确表述。
大模型的"幻觉",很多时候不是因为模型"坏",而是因为"信息不对等"。模型不知道你的数据长什么样,只能凭训练时的"经验"瞎猜。
我们的三层 Prompt 工程,从三个维度压缩了幻觉空间:
角色约束:"你是数据分析师,不要编造"——从动机上降低编造冲动。
本体对齐:"主诉是症状描述,诊断是疾病名称"——从认知上消除概念混淆。
实例锚定:"华蟾素胶囊: 892 例 (71.5%)"——从事实上提供精确弹药,让模型每一句话都有出处。
在 RAG 问答模块中,我们还增加了一个"数据