检索增强生成系统

一个基于LangChain和Gemini模型的检索增强生成(RAG)系统,采用解耦架构并通过FastMCP框架作为微服务提供。

  • by g-wtham
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 g-wtham/reAct-Agent-MCP-RAG-

使用说明

使用模型上下文协议(MCP)重建代理+RAG系统

使用解耦架构构建的检索增强生成(RAG)系统。它利用 LangChain,由以下电源供电 双子座嵌入 和那个 Gemini 2.5闪光灯型号,并使用 模型上下文协议(MCP) 通过 FastMCP 框架。

该应用程序分为三个主要组件:服务器(后端RAG)、用于测试的异步命令行客户端和用于交互的Streamlit web客户端。

https://github.com/user-attachments/assets/895b83b3-ef0b-4cce-8f7f-ae9140f5eb3b

主要特点

  • 双子座动力RAG: 用途 GoogleGenerativeAIEmbeddings (text-embedding-004)用于矢量创建和 gemini-2.5-flash 用于问答。
  • 解耦架构(MCP): RAG逻辑作为单独的服务运行,使用 FastMCP 随着 streamable-http 传输,促进模块化和可扩展性。
  • 矢量存储: 色度 用于存储和检索文档块。
  • 交互式前端: 现代的、基于形式的 溪流 该应用程序提供了一个流畅的聊天界面。

先决条件

在运行应用程序之前,请确保已安装以下内容:

  1. Python 3.9+

  2. pip 和 venv

  3. 安装依赖项:

    pip install langchain-google-genai langchain-community langchain-classic fastmcp streamlit python-dotenv pypdf
    
  4. 设置API密钥: 创建一个名为的文件 .env 在根目录中,并添加您的Gemini API密钥:

    GEMINI_API_KEY="YOUR_GEMINI_API_KEY_HERE"
    
  5. 添加示例数据: 将要查询的PDF文件放入项目根目录并命名 sample.pdf.

🏃 运行应用程序

这是一个 客户端服务器应用程序 并要求 两个步骤 同时奔跑。

步骤1:启动MCP RAG服务器

打开你的 第一端子 并运行服务器文件。此过程加载PDF,创建向量数据库,初始化RAG链,并在上启动MCP服务 http://127.0.0.1:8000.

python rag_mcp_server.py

步骤2A:运行Streamlit Web客户端(推荐)

打开A 第二终端 并运行Streamlit前端。此客户端将使用 fastmcp.Client 与正在运行的服务器通信。

streamlit run rag_mcp_client.py

浏览器窗口将自动打开聊天界面。

步骤2B:运行终端客户端(用于测试)

或者,您可以直接使用终端客户端测试MCP连接:

python terminal_mcp_client.py

后端RAG使用以下顺序:

  • 嵌入: GoogleGenerativeAIEmbeddings(model="text-embedding-004")
  • 矢量数据库: Chroma
  • LLM ChatGoogleGenerativeAI(model="gemini-2.5-flash")
  • 链条: RetrievalQA.from_chain_type 将这些组件组合成 retrieve_answer 功能。