Skip to main content
本教程面向医疗场景,展示如何利用 xParse SDK 解析医疗文档,然后通过大模型自动提取医疗信息、检索相似病例和检查药物相互作用。

场景介绍

业务痛点

在医疗场景中,医生和医疗工作者面临以下挑战:
  • 文档类型多样:需要处理病历、检查报告、处方单、医学影像报告等多种格式
  • 信息提取复杂:需要从非结构化文档中提取症状、诊断、用药、检查结果等关键信息
  • 病例检索困难:需要快速检索相似病例和医学文献,辅助诊断决策
  • 药物安全:需要检查药物相互作用、过敏史、用药禁忌等安全问题
  • 隐私保护:医疗数据涉及患者隐私,需要安全处理

解决方案

通过构建医疗文档Agent,我们可以实现:
  • 自动化文档解析:使用 xParse SDK 自动解析各类医疗文档
  • 智能信息提取:调用 xParse Extract API 直接从文档中提取结构化医疗信息(症状、诊断、用药等)
  • 相似病例检索:基于症状和诊断,从历史病例中检索相似案例
  • 药物安全检查:检查药物相互作用、过敏史、用药禁忌等
  • 医学文献检索:检索相关的医学文献和研究资料

架构设计

核心思路
  • 信息提取:使用 xParse Extract API 直接从文档中提取结构化医疗信息,无需先检索再提取
  • 相似病例检索:使用向量检索找到语义相似的病例
  • 医学文献检索:使用向量检索找到相关的医学文献
  • 药物安全检查:大模型分析检索到的用药信息

环境准备

首先安装必要的依赖:
创建 .env 文件存储配置:
提示:TEXTIN_APP_IDTEXTIN_SECRET_CODE 参考 API Key,请登录 Textin 工作台 获取。示例中使用 通义千问 的大模型能力,其他模型用法类似。

完整代码示例

下面是一个完整的、可以直接运行的示例:

代码说明

Step 1: xParse SDK 解析与文本处理

文档处理分为三个阶段:
  • 解析:使用 XParseClientclient.parse.run() 解析医疗文档,返回 Markdown 格式的结构化文本
  • 分块:使用 LangChain 的 MarkdownHeaderTextSplitter 按标题分块保持病历章节结构,再用 RecursiveCharacterTextSplitter 进行二次分块控制块大小
  • 向量化:使用 DashScopeEmbeddings 生成向量,通过 Milvus.from_documents() 存入向量数据库
为什么使用 LangChain 分块和向量化
  • MarkdownHeaderTextSplitter 能识别 Markdown 标题层级,按病历章节自然分块
  • RecursiveCharacterTextSplitter 控制块大小(1536字符)并保留上下文重叠(100字符)
  • 向量检索比文本匹配更准确,能理解医学概念和术语的语义关系

Step 2: 向量数据库初始化

使用与文档处理相同的 embedding 模型初始化向量数据库连接,保证语义空间一致。

Step 3: 大模型初始化

使用通义千问(qwen-max)作为大模型,用于信息提取和结果分析。

Step 4: Tools 实现

  • extract_medical_info:使用 xParse Extract API 直接从文档中提取结构化医疗信息,无需先检索再提取
  • search_similar_cases:使用向量检索找到语义相似的病例,再用大模型提取关键信息
  • check_drug_interaction:使用向量检索找到相关用药信息,再用大模型检查相互作用
  • search_medical_literature:使用向量检索找到相关文献,再用大模型提取关键信息
关键点extract_medical_info 通过 Extract API 直接对源文件进行结构化提取,避免了向量检索 + LLM 提取的两步流程,提取结果更完整准确。其他工具结合向量检索(语义相似度)和大模型(信息提取和分析),既快速又准确。

Step 5: Agent 配置

Agent 会自动:
  • 判断是否需要先处理文档
  • 选择合适的 Tool 提取信息或检索
  • 组织最终的回答

使用示例

示例 1:处理文档

示例 2:提取医疗信息

示例 3:检索相似病例

示例 4:药物安全检查

示例 5:检索医学文献

最佳实践

  1. 隐私保护:医疗数据涉及患者隐私,确保数据加密存储和传输
  2. 分块策略:使用 MarkdownHeaderTextSplitter 按标题分块保持病历章节结构,便于理解上下文
  3. 块大小控制:通过 chunk_size=1536chunk_overlap=100 平衡语义完整性和检索精度
  4. 药物数据库:在实际应用中,建议集成专业的药物相互作用数据库,提高检查准确性
  5. 多语言支持:医疗术语可能涉及多语言,确保解析引擎支持
  6. 结果验证:Agent 的建议仅供参考,最终诊断需由医生确认
  7. 提示工程:优化大模型的提示词,提高提取和检索准确率
  8. 错误处理:对于识别失败或提取错误的情况,记录错误信息,便于人工处理

常见问题

Q: 如何处理手写病历?
A: 使用支持 OCR 的解析引擎(TextIn xParse),可以识别手写内容,但准确率可能低于打印文档。建议预处理图片(开启 xParse 切边增强)提高识别率。
Q: 如何提高诊断准确性?
A: 1) 优化提示词,明确要求提取的字段;2) 使用更强的模型(如 qwen-max);3) 结合多个检查结果综合判断;4) 参考最新的医学文献。
Q: 如何保护患者隐私?
A: 1) 数据加密存储;2) 访问权限控制;3) 日志脱敏处理;4) 符合HIPAA等医疗数据保护法规;5) 不在提示词中包含患者姓名等敏感信息。
Q: 可以使用其他 LLM 吗?
A: 可以。LangChain 支持多种 LLM,只需替换 ChatTongyi(通义千问)为对应的类,如 ChatOpenAI(OpenAI)、ChatZhipuAI(智谱AI)等。
Q: 如何提高相似病例检索的准确性?
A: 1) 在提示词中明确相似度判断标准;2) 要求大模型提取关键特征(症状、诊断、检查结果)进行匹配;3) 可以结合多个文档综合判断。

相关文档