Zugang aus Übersee: www.kdjingpai.com
Ctrl + D Lesezeichen für diese Seite

Medical-RAG 是一个专为中文医疗领域设计的问答智能体项目. 它基于检索增强生成(RAG)技术,通过结合外部知识库来提升大型语言模型(LLM)在医疗建议上的准确性和安全性. 该项目的核心是利用高性能向量数据库 Milvus 存储和检索医疗知识,并整合 LangChain 框架来管理整个问答流程. 项目实现了一套完整的自动化数据处理流水线,包括使用LLM进行智能数据标注、构建医疗领域专用词表以及将数据高效入库. 它采用先进的混合检索架构,结合了稠密向量的语义检索和稀疏向量的关键词检索(BM25),并通过可配置的重排算法融合多路结果,以提高检索内容的精准度. 开发者可以通过灵活的YAML配置文件来部署和管理整个系统,使其能够适应不同的运行环境和需求.

Funktionsliste

  • 自动化数据处理: 项目提供自动化数据标注流水线,支持通过HTTP或本地GPU调用大模型进行推理,加速标注流程.
  • 自动化词表管理: 内置多线程和医疗领域分词器,能够自动化构建和管理用于稀疏检索的词表,提升查询准确性.
  • 混合检索架构: 同时支持稠密向量检索和稀疏向量检索。稠密检索支持Ollama、OpenAI、HuggingFace等多种嵌入模型;稀疏检索则使用经过医疗领域优化的BM25算法.
  • 结果重排与融合: 支持使用RRF(Reciprocal Rank Fusion)或加权方式融合多路检索结果,提升最终答案的相关性.
  • 医疗领域深度优化: 预设了包含6大科室分类和8大问题类别的专业分类体系,并使用pkuseg医疗领域分词模型进行文本处理.
  • 高性能向量数据库: 基于Milvus v2.6+版本,支持高效率的向量检索、批量嵌入和并发查询.
  • 灵活的配置系统: 所有核心参数,如数据库连接、模型选择、检索策略等,均通过YAML文件进行配置,便于在不同环境中部署和调整.
  • 高效率接口封装: 封装了Milvus的常用接口,并提供了RAGSearchTool等核心工具类,方便开发者进行二次开发和调用.

Hilfe verwenden

该项目提供了一套完整的从环境准备到最终查询的流程,以下是详细的操作步骤,旨在帮助用户快速上手使用.

Schritt 1: Vorbereitung der Umwelt

在开始之前,你需要准备好基础的运行环境,包括克隆项目、安装依赖以及启动所需的服务。

  1. Projektcode klonen
    首先,从GitHub上克隆medical-rag的源代码到你的本地机器。

    git clone https://github.com/yolo-hyl/medical-rag
    cd medical-rag/src
    
  2. Projektabhängigkeiten installieren
    项目使用Python开发,所有依赖项都记录在setup.py中。使用pip进行安装。

    pip install -e .
    
  3. 启动Milvus向量数据库
    项目使用Milvus作为向量数据库,推荐使用Docker来启动。项目代码中已经包含了便捷的启动脚本。

    cd Milvus
    bash standalone_embed.sh start
    ```    此命令会启动一个单机版的Milvus实例。
    
  4. 启动Ollama服务(可选)
    如果你计划使用本地运行的大模型(如Qwen)进行数据标注或生成答案,你需要安装并启动Ollama。

    # 启动Ollama服务
    ollama serve
    
    # 拉取需要用到的模型
    # bge-m3是一个常用的嵌入模型,用于生成向量
    ollama pull bge-m3:latest
    
    # qwen2:7b是一个性能不错的标注和问答模型
    ollama pull qwen2:7b
    

第二步:基础配置

在运行具体流程之前,需要配置核心参数。配置文件位于src/MedicalRag/config/default.yaml。你需要根据你的环境修改以下关键信息:

  • Milvus连接信息Um sicherzustellen, dassuriim Gesang antwortentoken与你启动的Milvus实例匹配。
    milvus:
    client:
    uri: "http://localhost:19530"
    token: "root:Milvus"
    collection:
    name: "qa_knowledge"
    
  • 嵌入模型配置:指定用于生成稠密向量的模型。以下配置使用本地Ollama服务中的bge-m3Modelle.
    embedding:
    dense:
    provider: ollama
    model: "bge-m3:latest"
    base_url: "http://localhost:11434"
    

第三步:数据处理与入库

数据处理是构建问答系统的核心,项目将其分为数据标注、构建词表、创建集合和数据入库四个环节。

  1. Datenkommentar
    此步骤利用大语言模型自动为原始的问答数据进行分类(如所属科室、问题类型)。

    • 首先,配置标注参数文件:src/MedicalRag/config/data/annotator.yaml.
    • 然后,运行标注脚本:
      python scripts/annotation.py src/MedicalRag/config/data/annotator.yaml
      
  2. 构建词表
    为了支持BM25稀疏检索,需要根据医疗领域的语料构建一个专有词汇表。

    python scripts/build_vocab.py
    

    该脚本会处理数据并生成一个名为vocab.pkl.gz的词表文件。

  3. 创建Milvus集合(Collection)
    此步骤会在Milvus中创建一个用于存储向量和相关信息的集合。集合的结构(Schema)由default.yaml配置文件定义。

    # 使用默认配置文件创建集合
    python scripts/create_collection.py -c src/MedicalRag/config/default.yaml
    
    # 如果需要强制删除并重建集合,可以添加--force-recreate参数
    python scripts/create_collection.py --force-recreate
    
  4. 数据入库
    将经过处理和标注的数据进行向量化,并最终存入Milvus集合中。

    python scripts/insert_data_to_collection.py
    

    这个脚本会自动处理数据的向量化(包括稠密和稀疏向量)并批量插入数据库。

第四步:查询与检索

当数据全部入库后,就可以开始进行问答检索了。

  1. 配置查询策略
    你可以通过修改src/MedicalRag/config/search/search_answer.yaml文件来定义检索策略,例如调整不同检索通道(稠密、稀疏)的权重。
  2. 运行查询脚本
    ausnutzensearch_pipline.py脚本来执行查询。

    # 使用指定的搜索配置文件进行查询
    python scripts/search_pipline.py --search-config src/MedicalRag/config/search/search_answer.yaml
    

    脚本会进入一个交互模式,你可以输入问题(如“梅毒的症状有哪些?”)来测试检索效果。

核心工具使用

项目还提供了一个名为RAGSearchTool的工具类,方便在其他代码中直接调用检索功能。

from MedicalRag.tools.rag_search_tool import RAGSearchTool
# 从配置文件初始化工具
tool = RAGSearchTool("config/search.yaml")
if tool.is_ready():
# 执行单个查询
results = tool.search("梅毒的症状有哪些?")
print(results)
# 执行批量查询
results_batch = tool.search(["梅毒的治疗方法", "高血压的预防措施"])
print(results_batch)
# 带过滤条件的查询(例如,只在“外科”相关的知识中检索)
results_filtered = tool.search("骨折怎么办", filters={"dept_pk": "3"}) # 假设3代表外科
print(results_filtered)

Anwendungsszenario

  1. 智能诊疗助手
    该系统可以作为医生的临床辅助工具。当医生遇到复杂或罕见的病例时,可以快速查询相关的诊疗指南、药物信息和最新的医学研究,为诊断和治疗提供决策支持。
  2. 医学生教育与培训
    可用于构建模拟问诊系统,帮助医学生在虚拟环境中练习提问、诊断和制定治疗方案。系统能够根据学生的提问提供标准答案和相关知识点,加快学习进程。
  3. 患者健康咨询
    可以部署为面向公众的智能客服或聊天机器人,为患者提供7×24小时的初步健康咨询服务。用户可以询问关于常见疾病、症状、用药注意事项等问题,系统能提供来自权威知识库的安全、准确的回答,缓解医院门诊压力。
  4. 医疗知识库管理与检索
    对于医院和研究机构,该系统可以整合内部的海量医疗文档、病历和研究论文,构建一个智能化的知识管理平台。研究人员和医护人员可以通过自然语言快速、精准地找到所需信息。

QA

  1. 这个项目解决了什么问题?
    它主要解决了通用大语言模型在专业领域(尤其是医疗领域)知识不足、容易产生“幻觉”或提供不准确信息的问题。通过RAG技术,将模型回答限制在可靠的外部医疗知识库范围内,从而提供更准确、安全的医疗建议.
  2. 项目中使用了哪些关键技术?
    项目主要使用了检索增强生成(RAG)、向量数据库(Milvus)、自然语言处理框架(LangChain)、混合检索技术(稠密向量与稀疏向量BM25结合)以及多种可选的大语言模型后端(如Ollama, OpenAI等).
  3. 如何更换项目中使用的嵌入模型或语言模型?
    更换模型非常简单,只需要修改对应的YAML配置文件即可. 例如,要更换稠密嵌入模型,可以在default.yamlÄnderungembedding.denseAnteil anproviderim Gesang antwortenmodel字段。同样,数据标注使用的LLM可以在annotator.yaml中进行配置.
  4. 如果检索效果不理想,应该如何优化?
    有多种优化方式. 首先,可以尝试调整search_answer.yaml配置文件中不同检索通道的weight(权重),以改变稠密和稀疏检索结果的融合比例. 其次,可以检查并扩充用于构建词表的数据,生成一个更高质量的vocab.pkl.gz文件来提升稀疏检索的准确性. 最后,确保你的知识库数据质量高且覆盖面广是提升效果的根本.
0Lesezeichen
0Gelobt

Sie können keine AI-Tools finden? Versuchen Sie es hier!

Geben Sie einfach das Schlüsselwort Barrierefreiheit Bing-SucheDer Bereich KI-Tools auf dieser Website bietet eine schnelle und einfache Möglichkeit, alle KI-Tools auf dieser Website zu finden.

zurück zum Anfang

de_DEDeutsch