Zing 论坛

正文

RAG Document QA:基于检索增强生成的文档问答系统

一个结合语义搜索与大语言模型的RAG系统,支持用户用自然语言查询自有文档,实现准确、可解释的上下文感知回答。

RAGretrieval-augmented generationdocument QALangChainChromaDBsemantic searchFLAN-T5
发布时间 2026/04/02 18:57最近活动 2026/04/02 19:20预计阅读 3 分钟
RAG Document QA:基于检索增强生成的文档问答系统
1

章节 01

导读 / 主楼:RAG Document QA:基于检索增强生成的文档问答系统

一个结合语义搜索与大语言模型的RAG系统,支持用户用自然语言查询自有文档,实现准确、可解释的上下文感知回答。

2

章节 02

背景:文档问答的技术演进

在信息爆炸的时代,如何高效地从大量文档中提取有用信息是一个普遍挑战。传统的关键词搜索虽然快速,但往往无法理解查询的语义意图,返回的结果可能相关性不高。而纯粹依赖大语言模型的生成式问答虽然能理解自然语言,却容易产生"幻觉",编造不存在的信息。

检索增强生成(Retrieval-Augmented Generation,RAG)技术的出现,为这一问题提供了优雅的解决方案。RAG将文档检索与文本生成相结合:首先通过语义搜索从文档库中找到相关内容,然后将这些内容与用户问题一起输入语言模型生成答案。这样既保证回答基于真实文档,又能充分利用模型的语言理解能力。

3

章节 03

项目概述:RAG Document QA

RAG Document QA是由法国里尔大学机器学习硕士生Sana Mirahsani开发的开源项目,实现了一个完整的RAG文档问答系统。用户可以将自己的文档放入系统,通过自然语言提问,获得基于文档内容的准确回答。

该项目采用Python 3.10开发,核心依赖包括LangChain、Hugging Face Transformers、sentence-transformers和ChromaDB。系统设计简洁,适合作为学习RAG架构的入门项目,也可作为基础框架进行功能扩展。

4

章节 04

嵌入模型与向量存储

系统使用HuggingFaceEmbeddings(基于sentence-transformers)将文档转换为向量表示。这些向量被存储在Chroma向量数据库中,支持高效的相似性搜索。Chroma以SQLite作为底层存储,默认将数据保存在本地的./my_rag_db目录。

向量数据库的选择对RAG系统至关重要。Chroma的优势在于:

  • 轻量级部署:无需单独的数据库服务器,本地文件即可运行
  • 快速检索:基于向量相似度的毫秒级查询响应
  • 元数据支持:可存储文档来源、页码等附加信息
  • 易于扩展:可迁移至Pinecone、Qdrant、Weaviate等生产级方案
5

章节 05

语言模型与生成管道

项目默认使用google/flan-t5-large作为生成模型,通过LangChain的HuggingFacePipeline构建检索-生成链。FLAN-T5是经过指令微调的T5模型,虽然规模相对较小,但足以演示RAG的基本流程。

需要注意的是,由于硬件限制,项目未集成GPT-4等更大规模的模型。开发者明确建议,若需生产级效果,应替换为更强大的LLM,如通过langchain-google-genai接入Gemini系列模型。

6

章节 06

文档处理流程

系统的文档处理遵循标准的RAG流水线:

  1. 文档加载:从/data目录读取文本文件
  2. 文本分块:将长文档切分为适当长度的片段
  3. 向量化:使用嵌入模型将文本块转换为向量
  4. 索引存储:将向量与元数据存入Chroma数据库
  5. 检索生成:接收查询时检索相关片段,拼接为上下文后生成答案
7

章节 07

使用方法与工作流程

项目的使用非常简单,只需几个步骤即可搭建完整的问答环境:

8

章节 08

环境准备

git clone https://github.com/sana-mirahsani/rag_document_qa.git
cd rag_document_qa

python -m venv venv
source venv/bin/activate  # macOS/Linux
pip install -r requirements.txt