本章节将带领读者一步步动手实践,使用Python和流行的开源框架Lang Chain, 搭建一个基础的RAG系统。我们将重点关注核心流程的实现,并提供相应的代码示例。请确保你已具备基本的Python编程能力, 并对LLM和向量检索有初步了解。
环境准备与技术选型
开发环境:
-
编程语言:Python(推荐版本3.8或更高)
-
核心依赖库及其用途:
-
langchain:一个强大的开源框架,用于快速开发基于语言模型的应用程序,它极大地简化了RAG流程中各个组件(如文档加载、文本分割、向量存储、LLM调用、链构建等)的集成和编排。(CSDN博客:基于LangChain搭建RAG系统)
-
sentence-transformers : 一个流行的Python库,提供了大量预训练的SOTA(State-of-the-Art)文本嵌入模型,方便我们将文本转换为高质量的向量表示。
-
faiss-cpu/faiss-gpu:Facebook AI开发的非常高效的相似性搜索库,适合本地构建和查询向量索引。-cpu版本适用于无GPU环境。
-
chromadb:一个开源的、专为AI应用设计的向量数据库,易于在本地启动和使用,并能与LangChain很好地集成。
-
openai:如果选择使用OpenAI的LLM(如GPT-3.5-turbo,GPT-4) 和Embedding模型(如text-embedding-ada-002),需要此库进行API调用。
-
transformers:Hugging Face提供的库,可以方便地加载和使用本地部署的开源LLM和Embedding模型。
-
pypdf , unstructured, python-docx, beautifulsoup4:用于加载和解析不同格式的文档(PDF, TXT, DOCX, HTML等)。 unstructured尤其擅长处理复杂格式文档。
-
(可选)fastapi,uvicorn:如果需要将RAG系统部署为API服务,这两个库是构建高性能Web API的常用选择。
-
-
安装命令示例:
首先,建议创建一个独立的Python虚拟环境(例如使用venv 或 conda )。激活虚拟环境后,执行以下命令安装核心依赖:
bash
pip install langchain langchain-community langchain-core sentence-trans
# 如果使⽤OpenAI的LLM,可能还需要 specific langchain-openai
pip install langchain-openai
# 如果使⽤Ollama运⾏本地模型
pip install langchain_community ollama
# 注意:unstructured[local-inference] 会安装⼀些本地解析所需的依赖,如tesserac
# 根据你实际选择的组件,可能还需要安装其他特定库。
技术选型考量(工具/模型):
在搭建RAG系统时,我们需要对关键组件进行选型。以下是一些常见的考量维度和选项:
-
向量数据库(Vector Database):
-
对比维度:部署复杂度(本地vs.云托管)、性能(查询延迟、吞吐量)、可扩展性、功能特性(如元数据过滤、混合检索支持、备份恢复)、社区支持、成本。
-
选项示例:
-
本地/轻量级: FAISS S(库,极快,适合原型), ChromaDB(易用, 适合入门和中小型项目), SQLite+ sqlite-vss(基于SQLite的向量搜索扩展)。
-
可本地可云/生产级:Milvus(功能强大, 可扩展性好), Qdrant (Rust编写,性能优秀),weaviate (支持GraphQL,混合检索)。
-
云原生/托管服务:Pinecone , Amazon OpenSearch Service (with k-NN), Google Vertex AI Vector Search。
-
-
-
Embedding模型(Text Embedding Model):
-
对比维度:模型效果(尤其是在目标语言和任务上的表现,可参考MTEB、C-MTEB等榜单) 、向量维度(影响存储和计算)、计算资源需求、推理速度、是否支持中文及多语言、许可协议。
-
选项示例:
-
中文优先:BAAI/bge-large-zh-v1.5,BAAI/bge-m3(支持中英等多语言), shibing624/text2vec-base-chinese,阿里云DashScope的文本嵌入服务。
-
英文/通用:OpenAI的 text-embedding-ada-002, text-embedding-3-small/large, Sentence Transformers库中的all-MiniLM-L6-v2(轻量高效), all-mpnet-base-v2(效果较好)。
-
多语言:sentence-transformers/paraphrase-multilingual-mpnet-base-v2,intfloat/multilingual-e5-large.
-
-
-
7大型语言模型(LLM-Generator) :
-
对比维度:生成质量(遵循指令能力、连贯性、创造性)、推理成本(API费用或本地部署资源消耗)、上下文窗口大小、API易用性或本地部署可行性、对中文等特定语言的支持程度、响应速度。
-
选项示例:
-
OpenAIAPI:gpt-3.5-turbo bo(性价比高), gpt-4,(能力更强,上下文更长,成本更高)。
-
国内模型API:阿里云通义千问(qwen-turbo,qwen-plus ),智谱AI ChatGLM系列(glm-4),百度文心系列,腾讯混元等。
-
本地开源模型:Llama-2/3系列, Mistral AI的Mistral-7B, Mixtral-8x7B,清华大学的ChatGLM3-6B, 阿里巴巴的Qwen1.5系列(如Qwen1.5-1.8B-Chat,Qwen1.5-7B-Chat)。本地部署需要相应的硬件资源 (GPU) 和配置工作(如使用 transformers , Ollama , vLLM等工具)。
-
-
本教程选型(示例):
为了方便入门和本地快速实践,本教程将采用以下技术栈作为示例。读者可以根据自己的实际需求和环境进行替换。
-
RAG框架:LangChain(版本>0.1.0)
-
向量数据库:ChromaDB(本地运行,无需复杂配置)
-
F Embedding模型:BAAI/bge-small-zh-v1.5 (HuggingFace模型,兼顾中文效果与本地资源消耗,使用:sentence-transformers加载)
-
LLM模型:
-
优先展示使用 OpenAI API (gpt-3.5-turbo),因其易用性和广泛性。(需要自行准备OpenAI API Key)
-
同时,会提供使用本地部署的ollama+Qwen1.5-1.8B-Chat模型的备选方案,方便没有APIKey或希望完全本地化的读者。(需要自行安装Ollama并拉取模型)
-
请确保在开始后续步骤前,已按照上述安装命令安装了必要的库,并准备好了所选LLM的运行环境(APIKey或本地模型服务)。