你有没有想过,大模型如何更聪明地回答问题?🤔当传统 RAG 遇上多模态与商业智能(BI),会碰撞出怎样的火花?🤔
今天我们将围绕医学这个专业领域,一步步搭建出一个集众多本领于一身的小型智能 AI 医学问答系统,全程干货预警,记得备好笔记本!
下图和视频效果是我们今天的目标!涉及多路召回多模态 RAG、多模态问答、Chat-BI、Agent、LLM 微调、多模态模型微调等等。让我们开始吧!

一、朴素 RAG:大模型的「初代智能助手」
什么是 RAG?让 AI 边查资料边回答!
RAG(检索增强生成,Retrieval-Augmented Generation)是一种结合信息检索(Retrieval)和文本生成(Generation)的技术,用于提高大模型的准确性和实用性。通过在生成文本前检索外部知识库中的相关信息,RAG 可以让大模型在回答问题时结合最新、最相关的数据,从而减少幻觉现象,并提升答案的专业性和时效性。
简单说就是:让大模型在回答问题前,先去「翻书」(检索知识库),再结合最新资料输出答案!
✨ 核心优势:
- 告别「幻觉」:用真实数据撑腰,拒绝瞎编
- 与时俱进:实时抓取最新信息,知识不过期
- 专业度 UP:领域知识库加持,回答更靠谱
Naive RAG:AI 的「基础解题套路」
先来看最基础的 RAG 工作流,像不像学生写作业?
💡 步骤分解:
- 审题(用户提问):比如「推荐适合上班族的护眼食物」
- 查资料(检索模块):从食谱数据库中找出含维生素 A、叶黄素的食材列表
- 写答案(生成模块):结合检索到的食材,推荐食谱并解释原理

🔍 关键技术点:
① 检索(Retrieval)
用户输入问题后,系统会基于该输入在外部知识库或向量数据库中检索相关内容。通常使用语义搜索(Semantic Search)或 BM25、Dense Retrieval(DPR)、Embedding-based Retrieval 等技术来匹配最相关的文档片段。
② 增强(Augmented)
检索到的文本内容会作为额外的上下文,与用户输入一起提供给 大模型。这一阶段涉及 Prompt 设计,确保大模型在生成回答时充分利用检索到的信息,而非仅依赖其内部知识。
③ 生成(Generatation)
大模型结合检索到的信息和自身的预训练知识,生成最终的回答。这一过程可能涉及对检索信息的重构、摘要或融合,以确保答案的连贯性、准确性和可读性。
🌟 优点:
- 简单高效:由于模块化设计,容易实现和调试。✅
- 可扩展性强:检索模块和生成模块可以独立优化或替换。✅
⚠️ 局限性:
- 单模态依赖:仅依赖文本作为输入和检索内容,无法有效处理多模态数据。❌
- 领域水土不服:通常直接使用通用领域 LLM,未针对领域知识或任务需求进行微调。❌
二、多模态能力接入:让模型秒变「图文全能王」
多模态 RAG:让模型拥有「超级感官」
传统 RAG 只能 “读文字”,多模态 RAG 却能 “看图片、听声音”!通过多模态嵌入技术,把文字、图像、音频全塞进同一个 “语义魔法空间”,让模型既能精准检索图文中的隐藏信息,又能生成会 “动起来” 的回答。在医学领域,多模态 RAG 的跨模态检索与生成能力正在展现出颠覆性价值,例如在肺部疾病诊断中,系统可以同时针对患者的 CT 影像切片、病理报告文本对患者做出诊断。下面我们将从整体架构出发,带领读者深入了解多模态 RAG 的基本原理及其作用。
多模态 RAG VS 基础 RAG:升级点大揭秘!
基础的 RAG 主要针对文本数据进行了检索与生成。然而,要支持多模态输入和输出,需要对基础 RAG 架构进行一定的调整和扩展。

首先,需要修改的模块包括:
- 检索模块:从仅支持文本检索,到需要扩展为支持多模态检索,例如图像、音频等信息的索引和匹配。
- 生成模块:基础 RAG 仅针对文本生成,现在需要扩展支持多模态输出,如文本结合图像、音频的生成能力。
其次,需要新增的模块包括以下四个部分:
| 模块 |
功能 |
| 多模态编码器🛠️ |
用于对不同模态的数据(文本、图像、音频等)进行编码,以便统一表示并用于检索和生成。 |
| 多模态融合器🧪 |
用于融合不同模态的信息,使其能够协同作用,提高生成内容的准确性和丰富度。 |
| 跨模态检索器🔍 |
支持输入多种数据格式,并能在多模态知识库中找到相关信息。 |
| 多模态解码器🎬 |
负责将生成结果解码为多种形式,如文本、图片、语音等,以适应不同的输出需求。 |
多模态 RAG 的核心组件
为了支持多模态输入和输出,调整和扩展后的多模态 RAG 流程图如下。

下面简单讲一下每个组件的功能以及相关输入输出示例。
✨ 多模态编码与融合:打破信息次元壁
在多模态 RAG 系统中,多模态编码模块是将不同类型的输入(如文本、图像、音频等)统一映射到向量空间的关键组件。其主要作用是对用户查询和知识库内容进行编码,以便进行相似度检索与上下文构建。
相比于传统仅处理文本的 RAG,多模态 RAG 需要将图文等多源信息编码进行统一编码,从而实现跨模态信息的理解与匹配。

- 📖 文本编码常用模型:
- BAAI/bge 系列(如 bge-m3:支持多语言和长文本处理,生成高质量语义嵌入)
- Cohere Embed(提供高效的语义编码和上下文理解,适用于文本检索与生成任务)
- GTE-large(专注于高精度语义匹配与检索,适合大规模文本数据处理)
- 🎨 多模态编码常用模型:
- 图像编码:NFNet-F6、ViT、CLIP ViT
- 音频编码:Whisper、CLAP
- 视频编码:CMVC
在 RAG 系统中,多模态数据编码的融合是一个核心问题。为实现跨模态信息的有效交互与检索,我们需要将不同模态的数据映射到一个统一的向量空间中。这样,不论是文字还是非文字信息,都可以在同一语义空间中进行相似性度量、检索和生成任务。这里介绍三种常用方法。
- 统一模态:将非文本模态(如图像、音频、表格)转换为描述性文本,再用文本编码器统一编码,得到语义向量。
- 共享向量空间:通过多模态编码器(如 CLIP、CLAP)直接将多模态数据编码到同一向量空间,无需中间转换,保留原始信息,统一接口,工程友好。
- 分离检索:不同模态使用专门模型分别编码,检索阶段融合结果,灵活性强,适配性好,适合复杂场景。
🔍 多模态检索模块:想查什么就查什么
1. 基础检索
处理单一模态的查询,如文本到文本、图像到图像的匹配。例如当输入为文本查询,如 "患者出现持续性干咳、低热,胸部CT显示双肺磨玻璃影" 时,则会输出相关文本段落,如 "持续性干咳、低热伴双肺磨玻璃影常见于病毒性肺炎、间质性肺病或早期肺结核";而当输入为图像查询时,如一张胸部 CT 图像时,则会输出胸部 CT 的相关图像。

2. 跨模态检索
支持跨模态查询,例如文本查询匹配图像,或图像查询匹配文本。例如当输入为文本时,如 "一张胸部正位CT图像",则会输出最相关的胸部 CT 的图片;而当输入为胸部 CT 的照片时,则会输出相关描述文本,如 "这是一张胸部正位CT图像,存在左侧气胸"。

🎨 多模态生成模块:会输出图片的 AI 写手
原有 RAG 仅支持文本生成,现在扩展为支持多模态输出,例如生成带有图片的回答或结合语音的解释。当输入为文本查询时,如 "查询数据库中所有论文的题目,基于题目内容将论文聚类为5类,用柱状图展示每类的论文数量,此外每类分别列举几个文章。" ,则会将相关检索结果(文本、图片)传给大模型,最后输出图文回答,如相关文本 + 一张论文类别数量的柱状图。

三、多模态 + BI:复杂 RAG 架构实战
通过前面的探索,我们已经了解了朴素 RAG 如何让大模型具备「查资料再回答」的基础能力,也见证了多模态 RAG 通过图文融合实现的「感官升级」。但当实际应用场景涉及「医院年度病例统计分析」「科研文献数据可视化呈现」等需求时,单纯的多模态处理仍显不足 —— 这类场景既需要解析医学影像、病历文本等非结构化数据,又要对接数据库完成指标计算、图表生成等 BI 任务。
如何让 RAG 系统同时驾驭多模态理解与结构化数据分析?接下来要展开的「多模态 + BI」复杂架构实战,正是为解决这类「既要又要」的高阶需求而生,我们将在朴素 RAG 基础上层层叠加关键模块,最终打造出能同时处理影像诊断、数据统计、图表生成的「全能型 AI 助手」!
首先登场的是 —— VQA 模块(Visual Question Answering)
当用户提问中包含图片时,系统会自动触发 VQA,对图像进行结构化信息提取,挖掘上下文关键内容;若没有图像,就跳过这步,直接进入文本处理环节,效率 UPUP❗❗
接下来,系统通过意图识别模块,将不同类型的问题智能分流:
🔹 论文问答? 走传统 RAG 路线!向量检索 + 大模型生成,精准提取相关文献内容。
🔹 统计问答? 开启 SQL 模式!从提问中抽取结构化信息(如指标、维度、过滤条件),自动生成 SQL 查询,查询结果再由大模型「翻译」成自然语言,一目了然。
✅ 与传统 RAG 的核心差异
| 维度 |
传统 RAG 系统 |
多模态 + BI 的 RAG 系统 |
| 输入类型 |
仅文本 query |
文本 + 可选图像 |
| 感知能力 |
无图像理解 |
引入 VQA,具备视觉问答能力 |
| 意图处理 |
默认文本问答 |
多路径意图识别(论文问答 vs 统计问答) |
| 检索类型 |
向量检索文本块 |
文本向量检索 + 图像信息提取 + 表格 SQL 检索 |
| 响应方式 |
直接生成答案 |
根据意图生成带统计分析的答案或论文图文回答 |
| 应用场景 |
普通问答、文档 QA |
支持论文 QA + 数据分析(BI)混合场景 |
数据准备
以 ArXivQA 数据集为例,从 Papers-2024.md 中的 100 篇论文构建知识库和数据库,在准备数据之前需要先下载论文信息文件(内含论文链接),可以离线下载或者以下命令进行下载:
wget https://raw.githubusercontent.com/taesiri/ArXivQA/main/Papers-2024.md -O 2024.md
我们需要从两方面去准备数据(以医学领域为例):
- 📚 医学知识库:存储论文全文到指定目录,用于文献类问答
- 📊 医学数据库:提取论文元信息(如标题、作者等)到本地数据库,用于统计类问答,论文信息如 title、author 等
以下脚本可以一步搭建医学论文信息的数据库👇
import re
import os
import requests
import time
import json
from tqdm import tqdm
from bs4 import BeautifulSoup
import sqlite3
# 医学相关关键词列表
keywords = ['brain', 'disease', 'cancer', 'tumor', 'medical', 'health',
'clinical', 'biomedical', 'neuro', 'diagnosis', 'imaging']
def contains_keyword(text, keywords):
text = text.lower()
for kw in keywords:
if kw.lower() in text:
return True
return False
def download_pdf(pdf_url, title):
try:
safe_title = re.sub(r'[\\

最低0.47元/天 解锁文章
882

被折叠的 条评论
为什么被折叠?



