从零开始搭建RAG系统系列(二):手把手教你从零搭建RAG系统实战

本章节将带领读者一步步动手实践,使用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或本地模型服务)。

相关推荐
Yo_Becky24 分钟前
【PyTorch】PyTorch预训练模型缓存位置迁移,也可拓展应用于其他文件的迁移
人工智能·pytorch·经验分享·笔记·python·程序人生·其他
DeepSeek-大模型系统教程27 分钟前
深入金融与多模态场景实战:金融文档分块技术与案例汇总
人工智能·ai·语言模型·程序员·大模型·大模型学习·大模型教程
xinxiangwangzhi_32 分钟前
pytorch底层原理学习--PyTorch 架构梳理
人工智能·pytorch·架构
yzx99101336 分钟前
关于网络协议
网络·人工智能·python·网络协议
AiTEN_Robot37 分钟前
AGV 无人叉车关键技术问题解析:精准定位算法 / 安全避障逻辑 / 系统对接协议全方案
人工智能·机器人·自动化·制造
云天徽上39 分钟前
【PaddleOCR】OCR常见关键信息抽取数据集,包含FUNSD、XFUND、WildReceipt等整理,持续更新中......
人工智能·计算机视觉·信息可视化·paddlepaddle·paddleocr·文本识别
zskj_zhyl39 分钟前
智绅科技:以科技为翼,构建养老安全守护网
人工智能·科技·安全
刘海东刘海东40 分钟前
结构型智能科技的关键可行性——信息型智能向结构型智能的转换(提纲)
人工智能
Jay Kay1 小时前
TensorFlow源码深度阅读指南
人工智能·python·tensorflow
FF-Studio2 小时前
【硬核数学 · LLM篇】3.1 Transformer之心:自注意力机制的线性代数解构《从零构建机器学习、深度学习到LLM的数学认知》
人工智能·pytorch·深度学习·线性代数·机器学习·数学建模·transformer