前言本文带你从零搭建一套纯本地 RAG 系统向量模型m3e-base最强中文开源 Embedding向量库FAISSFacebook 开源轻量本地向量库文档本地 TXT / MD大模型可本地 LLaMA、Qwen、ChatGLM也可临时用通义 / DeepSeek API 演示目标本地离线运行、无数据外泄、可直接用于企业知识库一、环境准备一步一步来1.1 安装 Python建议版本Python 3.9 ~ 3.111.2 创建虚拟环境推荐bash运行conda create -n local_rag python3.10 conda activate local_rag1.3 安装依赖必装bash运行pip install torch pip install sentence-transformers pip install faiss-cpu pip install langchain pip install langchain-community全部 CPU 版本任何电脑都能跑。1.4 核心依赖包作用解析为什么要装这 5 个很多初学者会疑惑为什么搭建本地 RAG 需要这五个库它们各自在系统中扮演着不可或缺的角色共同构成了 RAG 的技术底座。以下是每个包的核心职责表格依赖包核心定位在本项目中的具体作用torch底层算力引擎提供深度学习所需的张量计算和 GPU 加速支持。它是运行 m3e-base 模型的基础没有它所有 AI 模型都无法启动。sentence-transformers向量生成工具专门用于加载和运行句向量模型如 m3e-base。它封装了复杂的模型调用逻辑让我们可以用一行代码将文本转换为向量。faiss-cpu本地向量数据库Facebook 开源的高效检索库。负责存储向量并提供毫秒级的相似度计算能力是实现 “语义搜索” 的核心。langchainRAG 流程框架大模型应用开发的 “胶水” 框架。它提供了标准化的接口帮我们把 “文档加载→向量化→检索→生成” 的全流程串联起来。langchain-community生态连接器LangChain 的社区扩展库。它提供了对 FAISS 和 HuggingFace 模型的官方支持是让 LangChain 能 “指挥” 动本地向量库和模型的关键桥梁。一句话总结工作流torch提供动力 →sentence-transformers运行 m3e 生成向量 →faiss-cpu负责检索 →langchain调度全局 →langchain-community打通组件。二、核心组件说明m3e-base向量模型把文本 → 768 维向量FAISS本地向量数据库存向量 做检索LangChain把整个流程串起来本地文档你自己的知识文件.txt/.md三、第一步准备你的知识库文档在项目下新建文件夹plaintextmy_docs/ └── info.txt在info.txt里随便写点测试内容例如plaintext公司上班时间为周一到周五9:00-18:00午休1小时。 员工每年可享受5天带薪年假入职满一年后生效。 加班需要提前申请经部门经理审批通过后才算有效加班。四、第二步加载文档 → 分块 → 向量化 → 构建 FAISS 库新建文件build_rag_db.pypython运行from langchain.vectorstores import FAISS from langchain.document_loaders import TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import HuggingFaceEmbeddings # 1. 加载文档 loader TextLoader(my_docs/info.txt, encodingutf-8) documents loader.load() # 2. 文档分块 text_splitter RecursiveCharacterTextSplitter( chunk_size200, chunk_overlap50 ) texts text_splitter.split_documents(documents) # 3. 使用 m3e-base 向量模型 model_name moka-ai/m3e-base embedding HuggingFaceEmbeddings( model_namemodel_name, model_kwargs{device: cpu}, encode_kwargs{normalize_embeddings: True} ) # 4. 构建 FAISS 向量库 db FAISS.from_documents(texts, embedding) # 5. 保存到本地 db.save_local(faiss_db) print(向量库构建完成已保存到 faiss_db/)运行bash运行python build_rag_db.py成功后会生成plaintextfaiss_db/ ├── index.faiss └── index.pkl五、第三步加载向量库 测试检索新建文件test_retrieval.pypython运行from langchain.embeddings import HuggingFaceEmbeddings from langchain.vectorstores import FAISS # 加载 m3e-base embedding HuggingFaceEmbeddings( model_namemoka-ai/m3e-base, model_kwargs{device: cpu}, encode_kwargs{normalize_embeddings: True} ) # 加载本地向量库 db FAISS.load_local( faiss_db, embedding, allow_dangerous_deserializationTrue ) # 测试检索 query 我年假有几天 retriever db.as_retriever(search_kwargs{k: 1}) docs retriever.get_relevant_documents(query) print(检索结果) for doc in docs: print(doc.page_content)运行bash运行python test_retrieval.py你会看到plaintext员工每年可享受5天带薪年假入职满一年后生效。✅检索成功六、第四步接入大模型完成完整 RAG 回答这里给你最简单可跑版本你可以换成本地 LLaMAQwenChatGLM任何 OpenAI 格式 API这里先用最简单的 API 方式演示你有本地模型我也能给你改新建文件rag_chat.pypython运行from langchain.embeddings import HuggingFaceEmbeddings from langchain.vectorstores import FAISS from langchain.chains import RetrievalQA from langchain.prompts import PromptTemplate from langchain.llms import OpenAI # # 1. 加载 m3e-base FAISS # embedding HuggingFaceEmbeddings( model_namemoka-ai/m3e-base, model_kwargs{device: cpu}, encode_kwargs{normalize_embeddings: True} ) db FAISS.load_local( faiss_db, embedding, allow_dangerous_deserializationTrue ) retriever db.as_retriever(search_kwargs{k: 1}) # # 2. 提示词模板关键 # prompt_template 你根据以下资料回答问题不要编造。 资料{context} 问题{question} prompt PromptTemplate( templateprompt_template, input_variables[context, question] ) # # 3. 接入大模型 # # 这里替换成你的本地模型或API llm OpenAI( base_urlhttp://你的本地模型地址/v1, api_keydummy, temperature0.1 ) # # 4. 构建RAG链 # qa_chain RetrievalQA.from_chain_type( llmllm, chain_typestuff, retrieverretriever, chain_type_kwargs{prompt: prompt} ) # # 5. 开始提问 # query 我年假有几天 result qa_chain.run(query) print(回答, result)运行bash运行python rag_chat.py输出plaintext回答你每年可享受5天带薪年假入职满一年后生效。✅完整 RAG 运行成功七、整套系统结构总结plaintext用户问题 → m3e-base 向量化 → FAISS 检索 → 取出相关段落 → 送给大模型 → 精准回答八、常见问题你一定会遇到1. m3e-base 下载慢去ModelScope(m3e-base · 模型库)下载到本地, 特别提醒手动下载一定要下全建议把所有文件和目录都下载2. 检索不到分块太大 / 太小问题和文档语义差太远必须用同一个 m3e-base 模型构建和查询3. 大模型回答乱编把 temperature 设为 0.1提示词强制只看资料不许编造4. 纯 CPU 速度慢正常m3e-base CPU 完全够用并发高再上 GPU