DeepHPO v3.0.0 - 三轮推理架构

#coding

项目介绍

DeepHPO是一个基于LLM的临床表型HPO术语提取的Web应用,旨在为用户提供便捷、准确的HPO术语查询服务。

v3.0.0 版本引入全新的三轮推理架构,通过LLM预处理、本地候选搜索、LLM精确匹配三步流程,极致压制LLM幻觉问题,确保每一条输出的HPO术语都经过本地术语库验证。


核心优势

1. 三轮推理架构:准确性优先的设计理念

DeepHPO v2.0 方案将完整HPO术语表(420K tokens)一次性注入LLM上下文,依赖模型"记忆"并输出术语ID。这种方式存在致命缺陷:LLM可能编造不存在HPO ID,即所谓"幻觉"问题。

DeepHPO v3.0 采用截然不同的策略:

步骤 内容 优势
第一轮 LLM预处理提取症状关键词 智能理解临床文本,识别否定语义
第二轮 本地索引化搜索候选术语 快速(毫秒级)、可控、不依赖LLM
第三轮 LLM在候选术语中精确匹配 输出结果100%来自本地库,无幻觉

关键创新:第二轮候选术语来自本地搜索,第三轮LLM只能从中选择,严禁编造。这确保了输出的每一个HPO ID都真实存在于术语库中。

2. 否定语义智能识别:避免误匹配

临床文本中频繁出现否定表述,如"无头痛"、"否认发热"、"非ST段抬高型心肌梗死"。传统方案容易将"ST段抬高"单独提取,导致错误匹配。

DeepHPO在预处理阶段专门识别否定词(非、无、不、未、否认、未见等),并严禁匹配被否定的症状

输入:"急性非ST段抬高型心肌梗死"
✅ 正确匹配:HP:0001658 心肌梗死、HP:0032141 冠心病
❌ 错误拒绝:HP:0012251 ST段抬高(被"非"否定)

3. 谨慎推断策略:宁缺毋滥

LLM预处理阶段支持基于医学知识推断相关症状,但遵循严格规则:

  • 只推断与诊断高度相关、几乎必然伴随的核心症状
  • 不推断非典型、可能不存在或因人而异的症状

例如:诊断"脑梗死"可谨慎推断"肢体无力"(核心症状),但不应推断"失语"、"偏盲"等非必然症状。这避免了过度推断导致的噪声匹配。

4. 本地索引化搜索引擎:毫秒级响应

项目实现了高性能的本地搜索引擎(hpoSearchEngine.ts):

  • 多级索引结构:ID索引、英文名前缀索引、中文名前缀索引、关键词索引
  • 智能匹配策略:精确匹配、前缀匹配、关键词匹配、中文子串滑动窗口
  • 同义词扩展:基于trigram相似度的同义词搜索,补充候选术语

搜索完全本地化,无需向量数据库,无需外部索引服务,启动即可使用。

5. 实时症状高亮:可视化验证

结果页面支持在输入文本中实时高亮匹配的症状词:

  • 蓝色虚线:精确匹配的原始症状词
  • 紫色虚线:子串匹配的扩展词

鼠标悬停高亮词可显示对应的HPO ID,点击可直接跳转到HPO官网查看术语详情。这让用户能直观验证匹配准确性。

6. 双模式切换:灵活应对不同需求

模式 说明 适用场景
LLM匹配 三轮推理完整流程 临床病历文本,需要智能提取和推断
表型搜索 本地搜索直接返回 已知症状关键词,快速查询

用户可通过界面左下角按钮一键切换模式。

7. 自定义API配置:私有化部署友好

支持用户配置自己的API端点:

  • 使用Anthropic Messages API格式
  • 支持DeepSeek、GLM-5等多种模型
  • 配置存储于本地localStorage,不上传服务器

隐私保护:建议私有化部署,在线版本部署于Hugging Face,日志公开可见。


实现方式

第一轮:LLM预处理提取症状

LLM分析临床文本,智能提取患者当前存在的症状,并支持:

  • 从主诉、现病史中提取阳性症状和体征
  • 整理既往病史和拟诊断
  • 识别否定症状并排除
  • 谨慎推断核心症状

输出结构化JSON:

{
  "symptoms": ["头晕", "肢体无力"],
  "medicalHistory": ["脑梗死", "肝硬化"],
  "diagnosis": ["脑梗死"],
  "negatedSymptoms": ["头痛"],
  "familyHistory": ["父亲高血压"]
}

第二轮:本地搜索候选术语

将提取的症状关键词拆分,在本地HPO术语库中进行模糊搜索:

  • 前缀索引快速定位
  • 关键词索引精确匹配
  • 中文子串滑动窗口扩展覆盖
  • 同义词trigram搜索补充候选

此步骤不依赖LLM,响应快速且可控,最终返回约50个候选术语。

第三轮:LLM精确匹配

将候选术语表注入LLM上下文,让模型从中选择最精确匹配的HPO术语:

  • 严格约束:只允许从候选表中选择
  • 置信度分级:高/中/低,便于用户判断
  • 匹配理由说明:remark字段解释匹配依据

在线使用

访问 deephpo在线使用,在线版本默认使用GLM-5模型。

注意:在线版本部署于Hugging Face,日志在Log中公开,无隐私保护,建议私有部署。

通过右上角设置按钮可配置自己的API服务。

deephpo


本地部署

git clone https://github.com/pzweuj/DeepHPO.git
cp .env.local.self .env

# 编辑.env填入API配置
npm install && npm run build