Skip to content

Shao-JR/RAG-CSR

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📚 本地化 RAG 智能客服系统

Python LangChain Gradio

🎯 项目简介

这是一个基于 RAG (Retrieval-Augmented Generation) 算法的本地化 AI 智能客服系统。该系统完全运行于本地环境,利用 Ollama 部署大语言模型(Qwen)和嵌入模型(BGE),结合 ChromaDB 向量数据库构建私有知识库。系统严格遵循“基于知识库回答”的原则,拒绝回答与文档无关的内容(如闲聊、讲笑话等),确保回答的专业性和准确性。

🏗️ 系统架构

graph TD
    subgraph A["用户界面层 - Gradio"]
        A1[Gradio Web UI]
        A2[文件上传组件]
        A3[聊天交互组件]
    end

    subgraph B["RAG 核心引擎 - LangChain"]
        B1[文档加载器<br/>PDF/TXT]
        B2[文本分割器<br/>RecursiveSplitter]
        B3[向量数据库<br/>ChromaDB]
        B4[检索器<br/>Retriever]
        B5[LLM 调用<br/>Ollama/Qwen]
    end

    subgraph C["本地模型服务 - Ollama"]
        C1[嵌入模型<br/>BGE-Large]
        C2[大语言模型<br/>Qwen 3.5:4b]
    end

    A2 -->|上传文件| B1
    B1 --> B2
    B2 -->|生成 Embedding| C1
    C1 --> B3
    B3 --> B4
    A3 -->|用户提问| B4
    B4 -->|检索相关片段| B5
    B5 -->|生成回答| A3
    C2 --> B5
Loading

📦 安装依赖

在开始之前,请确保您的环境中已正确安装以下组件。

  1. 安装 Ollama 及拉取模型 本项目依赖 Ollama 在本地运行模型。请确保 Ollama 服务已启动,并已拉取所需的 LLM 和 Embedding 模型。

    # 安装 Ollama (macOS / Linux)
    curl -fsSL https://ollama.com/install.sh | sh
    
    # 拉取大语言模型 (用于生成回答)
    ollama pull qwen3.5:4b
    
    # 拉取嵌入模型 (用于构建知识库)
    ollama pull bge-large
  2. 安装 Python 依赖库 在项目根目录下安装所需的 Python 包:

    pip install langchain langchain-chroma langchain-ollama langchain-community gradio pypdf

🚀 快速开始

按照以下步骤在本地运行 RAG 智能客服系统:

  1. 启动应用程序 在项目根目录下运行 app.py 启动 Gradio 服务:

    python app.py
  2. 访问 Web 界面 启动成功后,在浏览器中打开 http://127.0.0.1:7860

  3. 构建知识库

    • 点击顶部的 📁 上传文档 Tab。
    • 上传您的 .pdf.txt 格式的知识库文件。
    • 点击“上传并构建知识库”按钮,等待后台处理完成(终端会显示处理进度)。
  4. 开始问答

    • 切换到 💬 开始问答 Tab。
    • 在聊天框中输入您的问题,系统将仅基于刚刚上传的文档内容给出回答。

指定端口运行 (如需修改)

python app.py --server_port 8080 📜 许可证 本项目采用 MIT License 开源。

📖 详细用法

严格模式 (Strict Mode)

本项目内置了严格的提示词约束 (STRICT_PROMPT_TEMPLATE),旨在消除模型幻觉:

  • 基于事实:模型被强制要求只能使用检索到的上下文信息,不能依赖预训练时的通用知识进行编造。
  • 拒绝无关请求:如果用户提问与知识库无关(例如“讲个笑话”、“你叫什么名字”或“写一首诗”),系统会统一回复:根据知识库无法回答

显存优化与容错

代码针对消费级显卡(约 6GB 显存)进行了优化:

  • 分批处理:在 process_and_store_documents 函数中,文档切片会分批(batch_size=5)存入向量库,防止一次性加载过多数据导致显存溢出(OOM)。
  • 自动回退:如果 OllamaEmbeddings (GPU) 初始化失败,系统会自动捕获异常并切换至 CPU 版本的 HuggingFaceEmbeddings,确保程序在资源受限的环境下仍能运行。

📚 API 参考

核心函数

函数名 参数 返回值 说明
process_and_store_documents file_path: str, batch_size: int = 50 str 加载文档,切分文本,生成向量并存入 ChromaDB。支持 PDF/TXT。
rag_chat_stream question: str Generator[str, None, None] 流式 RAG 问答接口,用于 Gradio 实时响应。
rag_chat question: str str 非流式问答接口,返回包含检索详情的文本。
load_vector_store - Chroma | None 从磁盘加载已持久化的向量数据库。

类与对象

类名 属性/初始化参数 说明
OllamaLLM model="qwen3.5:4b", temperature=0.1, etc. 封装 Ollama 大语言模型调用,配置了上下文窗口和重复惩罚。
Chroma collection_name="documents", persist_directory ChromaDB 向量存储实例,用于文档检索。

About

基于 RAG算法的本地化 AI 智能客服系统

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages