ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

LangChain 医疗文本分析:10 分钟搭好病历结构化提取与诊断助手

LangChain 医疗文本分析:10 分钟搭好病历结构化提取与诊断助手 LangChain 医疗文本分析10 分钟搭好病历结构化提取与诊断助手【免费下载链接】langchainThe agent engineering platform.项目地址: https://gitcode.com/GitHub_Trending/la/langchainLangChain 是构建 LLM 应用的通用 Agent 工程框架你可以用它做医疗文本分析把非结构化病历变成结构化字段把医学文献灌进向量库再让模型基于检索到的文献回答诊断问题。本文用 4 小段代码带你走通一个能跑通的最小场景读完照着做即可。场景切入医生一天要看几十份病历手动提取症状、诊断、用药既慢又容易漏查诊断依据时还得一页页翻指南和文献复诊时上下文又接不上。你想做的是让程序负责提取和检索医生只做判断。实战走查搭一个最小 LangChain 医疗文本分析系统整体链路是加载病历 → 切分 → 入向量库 → 结构化提取 → 检索问答。每步只调几个 API。 第一步加载并切分病历文档先把病历文本变成统一的Document再切分避免后续嵌入和检索时文本过长。from langchain_core.documents import Document from langchain_text_splitters import RecursiveCharacterTextSplitter splitter RecursiveCharacterTextSplitter(chunk_size800, chunk_overlap100) chunks [] for name in (admission.txt, discharge.txt): text open(name, encodingutf-8).read() for c in splitter.split_text(text): chunks.append(Document(page_contentc, metadata{source: name}))Document定义在 langchain_core/documents你只管 page_content 和 metadata 两件事切分时带chunk_overlap是为了不让跨块边界的句子被拦腰截断。⚡ 第二步把医学文献灌进向量库切好的片段写进向量库。这里先用内存版把链路跑通生产环境再换成 Chroma 等持久化实现。from langchain_core.vectorstores import InMemoryVectorStore from langchain_core.embeddings.fake import FakeEmbeddings vectorstore InMemoryVectorStore.from_documents(chunks, embeddingFakeEmbeddings()) retriever vectorstore.as_retriever(search_kwargs{k: 3})用FakeEmbeddings是为了先验证流程不依赖外部服务换成真实医学嵌入模型后检索才开始有意义。InMemoryVectorStore 只是存储底座as_retriever 的接口和真实向量库一致后面替换不用改业务代码。 第三步病历结构化提取输出成 Pydantic 模型数据就位后做医疗文本分析的核心动作把自由文本里的症状、诊断、用药抽成可入库查询的字段。from pydantic import BaseModel, Field class PatientInfo(BaseModel): 病历信息结构 symptoms: list[str] Field(description症状列表) diagnosis: str Field(description初步诊断) medications: list[str] Field(default_factorylist, description在用药物) info: PatientInfo llm.with_structured_output(PatientInfo).invoke(从下列病历提取信息\n chunks[0].page_content)定义 Pydantic 模型相当于给模型一张要填的表格不符合 schema 的输出会被自动修正不用手写正则解析。底层解析器在 langchain_core/output_parsers。✅ 第四步接上检索器做诊断问答最后把向量库和模型接起来让模型照文献回答这是诊断辅助流程的骨架。def diagnose(retriever, llm, question: str) - str: docs retriever.invoke(question) context \n\n.join(d.page_content for d in docs) prompt f依据以下医学文献\n{context}\n\n请给出诊断参考{question} return llm.invoke(prompt).content print(diagnose(retriever, llm, 患者发热伴咳嗽、胸闷需优先考虑什么))把检索到的原文直接塞进提示词模型的答案就有出处医生能核对。整条链路还可以用 langchain_core/runnables 的管道语法拼起来需要多轮复诊追问时再加一层 InMemoryChatMessageHistory 存历史消息。深挖本次用到的三个关键模块模块解决什么问题什么时候会用到RecursiveCharacterTextSplitter长病历切成保留上下文的文本块病历长度超出模型上下文窗口时InMemoryVectorStore医学文献分块存储与相似度检索本地调试、演示或搭建医学知识库原型PydanticOutputParser自由文本转固定结构字段提取结果要落库、要统计时三者构成一条主链路分割器管切得干净向量库存查得到输出解析器管进得对。落地场景诊所门诊录入门用结构化提取代替手填症状和用药直接写入病历表单一次接诊省几分钟科室文献组把指南和论文灌进向量库用某疗法证据强度如何这类自然语言查询替代手动翻页医疗 NLP 工程师同一套链路换用医学微调的嵌入和模型复用到诊断辅助、分险分层健康管理团队批量处理历史病历产出结构化疾病档案支撑回溯分析避坑与收尾医疗文本按固定字数硬切会把完整诊断描述拦腰截断记得设 chunk_overlap或先按段落边界切FakeEmbeddings 只能跑通流程验证不了检索质量做医学文献检索评测前必须换真实嵌入模型结构化提取强依赖提示词和字段描述剂量、禁忌症这类关键字段建议加一步人工或规则复核不要直接写回电子病历先拿三份真实病历把四步全跑通再考虑换生产向量库和医学模型这个顺序最稳。【免费下载链接】langchainThe agent engineering platform.项目地址: https://gitcode.com/GitHub_Trending/la/langchain创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表