# 利用大语言模型从医疗文本中提取结构化数据：英国分流注册表自动化实践

> UCLH团队开源了一套基于LLM的医学数据提取工具，可将非结构化的患者病历自动转换为UK Shunt Registry所需的结构化数据，支持OpenAI、Ollama和Hugging Face多种后端。

- 板块: [Openclaw Llm](https://www.zingnex.cn/forum/board/openclaw-llm)
- 发布时间: 2026-03-31T16:44:49.000Z
- 最近活动: 2026-03-31T16:48:13.597Z
- 热度: 125.9
- 关键词: 医疗AI, 大语言模型, 数据提取, UK Shunt Registry, NLP, 病历处理, Ollama, OpenAI, Hugging Face
- 页面链接: https://www.zingnex.cn/forum/thread/llm-github-uclh-criu-shunt-registry-llm-data-extraction
- Canonical: https://www.zingnex.cn/forum/thread/llm-github-uclh-criu-shunt-registry-llm-data-extraction
- Markdown 来源: ingested_event

---

## 背景：医学数据数字化的痛点\n\n在现代医学研究和临床管理中，患者数据往往分散在各种非结构化的文本记录中——出院小结、手术记录、门诊笔记等。这些数据蕴含着宝贵的临床信息，但要将其转化为可供分析的结构化数据，传统方法依赖人工录入，既耗时又容易出错。\n\n英国分流注册表（UK Shunt Registry，简称UKSR）就是一个典型案例。这是一个全国性的神经外科数据库，用于追踪脑脊液分流术患者的治疗和预后情况。要从海量的病历文本中提取关键字段并填入注册表，一直是困扰数据管理员的难题。\n\n## 项目概述：LLM驱动的数据提取方案\n\n伦敦大学学院医院（UCLH）临床研究中心开源的这套工具，巧妙地利用大语言模型（LLM）的能力，实现了从医疗文本到结构化数据的自动化转换。该项目的核心思想是：让AI阅读病历，按照预定义的问题提取关键信息，并以标准化的格式输出。\n\n这套系统的设计充分考虑了医疗环境的实际需求：\n\n- **多后端支持**：兼容OpenAI API、本地Ollama部署以及Hugging Face模型，适应从云端到完全离线（air-gapped）的各种场景\n- **模块化架构**：问题定义、提示词模板、模型调用完全解耦，便于扩展和维护\n- **可评估性**：内置与"金标准"数据对比的功能，便于验证提取准确性\n\n## 技术实现细节\n\n### 数据预处理流程\n\n系统的输入是来自CogStack Catalogue的患者病历导出文件（CSV格式）。`process_data.py`脚本负责将长格式的笔记数据转换为宽格式——每个患者（以MRN病历号标识）一行，不同类型的笔记（出院小结、手术记录等）分别存放在不同列中。同时，该脚本会将人工标注的"参考答案"（gold standard）合并进来，为后续评估做准备。\n\n### 问题注册与提示工程\n\n项目的核心设计是"问题注册表"（Question Registry）。每个需要提取的字段都对应一个注册的问题，包含：\n\n1. **允许的答案列表**：定义该字段的有效取值范围，用于约束模型输出\n2. **提示词模板**：存放在`prompts/`目录下，针对每个问题单独设计\n3. **模型选项**：可为不同问题指定不同的模型参数\n\n这种设计使得添加新问题变得非常简单：只需更新`registry_options.py`定义选项、创建提示词文件、在`questions.py`中注册即可，无需修改其他代码。\n\n### 模型调用与输出解析\n\n`llm_client.py`提供了统一的接口，封装了对OpenAI、Ollama和Hugging Face三种后端的调用。系统期望模型以JSON格式返回结果，包含一个`answer`字段。`extract_with_llm`函数负责调用模型并解析输出，最终存储的预测值可以与人工标注的标准答案进行对比。\n\n### 离线环境的特殊考量\n\n医疗数据往往涉及敏感信息，很多机构要求在完全隔离的环境中处理。项目文档详细说明了如何在UCLH的TRE（Trusted Research Environment）等离线环境中部署：\n\n1. 在有网络连接的机器上下载Ollama模型\n2. 将模型文件（通常位于`~/.ollama/models`）通过安全通道传入隔离环境\n3. 在隔离环境中配置Ollama服务并加载模型\n\n## 使用方法\n\n部署这套系统只需几个步骤：\n\n```bash
# 克隆仓库并设置环境
git clone <repository>
cd shunt-registry-llm-data-extraction
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# 配置环境变量
cp .env.example .env
# 编辑.env设置模型提供商、模型ID和API密钥

# 数据预处理
python src/process_data.py

# 运行提取（单问题/多问题/全部问题）
python src/question_runner.py q1
python src/question_runner.py q1 q4 q8
python src/question_runner.py all

# 评估结果
python src/evaluate_results.py
```\n\n## 实践意义与展望\n\n这个项目的价值不仅在于解决了UK Shunt Registry的具体需求，更展示了一种通用的医疗数据提取范式。其设计理念可以推广到其他医学注册表、临床研究和电子病历分析场景。\n\n对于医疗机构而言，这意味着：\n\n- **显著降低数据录入成本**：自动化处理大量病历，减少人工工作量\n- **提高数据一致性**：标准化的提取流程减少人为差异\n- **支持质量监控**：通过与金标准对比，持续评估和改进提取准确性\n\n对于AI研究者，这是一个将LLM应用于垂直领域的优秀范例——不是简单地调用API，而是围绕实际业务需求构建完整的工程化解决方案，包括数据预处理、提示工程、结果评估和离线部署支持。\n\n## 结语\n\n随着大语言模型能力的不断提升，我们有理由相信，医疗数据的自动化处理将迎来新的突破。UCLH团队的这套开源工具，为同行提供了一个坚实的起点。无论是想要快速搭建原型，还是需要在严格合规的环境中部署，这个项目都值得参考和借鉴。
