文档检索增强生成助手

基于FastMCP框架的RAG助手,支持多格式文档上传、索引和智能问答,利用Groq的LLM和FAISS向量存储实现高效检索和生成。

  • by Anirudh21-hub
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 anirudh21-hub/mcp-powered-rag-qa-bot

使用说明

MCP驱动的PDF检索增强生成(RAG)助手

项目概述

该项目实现了由FastMCP框架支持的检索增强生成(RAG)助手。它使用户能够上传和索引各种文档格式(PDF、DOCX、PPTX、CSV、TXT、Markdown),然后根据这些文档的内容提问。该助手利用Groq强大的LLM进行对话式AI和spaCy嵌入,并使用FAISS进行高效的文档检索。

主要功能包括从不同文件类型中提取强大的文本、智能文本分块和用于查询索引知识库的对话界面。

特性

  • 多格式文档支持: 从以下位置索引和检索信息:
    • PDF(.pdf): 高级文本和表格提取。
    • Word文档(.docx): 从段落、表格、页眉和页脚中提取文本。
    • PowerPoint演示文稿(.pptx): 从幻灯片和形状中提取文本。
    • CSV文件(.csv): 通过自动编码检测和多分隔符支持解析数据,提供结构化文本输出和基本摘要统计。
    • 纯文本(.txt): 简单的文本提取。
    • Markdown文件(.md, .markdown): 智能解析,以保留结构(标头、列表、代码块)并转换为干净的文本。
  • 智能文本预处理:
    • 文本清理和规范化: 删除多余的空白、特殊字符、PDF工件、页码,并规范标点符号和引号。
    • 自动编码检测: 用途 chardet 自动检测文本和CSV文件的编码,防止 UnicodeDecodeError 问题。
    • 递归字符文本拆分器: 将文档分块为可管理的大小,以便高效嵌入和检索。
  • Groq动力LLM: 利用Groq快速高效的语言模型(LLMs)生成会话响应。
  • FAISS矢量存储: 存储文档嵌入,用于快速语义搜索和检索。
  • 会话记忆: 维护聊天历史记录,以提供上下文感知的响应。
  • FastMCP服务器: 提供了一个健壮且可扩展的服务器框架,用于将RAG功能作为API端点公开。

先决条件

在开始之前,请确保已安装以下内容:

  • Python 3.8+: 下载自 python.org.
  • pip: Python包安装程序(通常随Python一起提供)。
  • venv 模块: 用于创建虚拟环境(通常也包含在Python中)。
  • Groq API密钥: 从获取免费的API密钥 Groq控制台.

安装说明

按照以下步骤设置和运行应用程序:

1.导航到项目目录

打开终端或命令提示符,导航到 MCP-Powered-PDF-Retrieval-Augmented-Generation-Assistant 目录:

cd C:\Users\Dell\OneDrive\Desktop\PROJECT\MCP-Powered-PDF-Retrieval-Augmented-Generation-Assistant

2.创建和激活虚拟环境

强烈建议使用虚拟环境来管理项目依赖关系。

python -m venv .venv

激活虚拟环境:

  • 在Windows(PowerShell)上:
    .venv\Scripts\Activate.ps1
    
  • 在Windows上(命令提示符):
    .venv\Scripts\activate.bat
    
  • 在macOS/Linux上:
    source .venv/bin/activate
    

3.安装依赖项

一旦虚拟环境处于活动状态,请安装所需的Python包:

pip install -r requirements.txt

4.下载spaCy模型

这 SpacyEmbeddings 组件需要spaCy模型。下载 en_core_web_sm 型号:

python -m spacy download en_core_web_sm

5.配置环境变量

创建一个 .env 项目目录根目录中的文件(MCP-Powered-PDF-Retrieval-Augmented-Generation-Assistant/.env)并添加以下内容。 确保更换 your_groq_api_key_here 使用您的实际Groq API密钥。

# MCP Server Configuration
HOST=127.0.0.1
PORT=8000

# Groq API Configuration
GROQ_API_KEY=your_groq_api_key_here
GROQ_MODEL=llama-3.3-70b-versatile

# Optional: Set to debug mode
DEBUG=True

要创建/编辑 .env 使用终端的文件(Windows PowerShell):

# Create the .env file
New-Item -Path ".env" -ItemType File -Force

# Add content to the .env file
Add-Content -Path ".env" -Value "PORT=8000" -Encoding UTF8
Add-Content -Path ".env" -Value "HOST=127.0.0.1" -Encoding UTF8
Add-Content -Path ".env" -Value "GROQ_API_KEY=your_groq_api_key_here" -Encoding UTF8
Add-Content -Path ".env" -Value "GROQ_MODEL=llama-3.3-70b-versatile" -Encoding UTF8
Add-Content -Path ".env" -Value "DEBUG=True" -Encoding UTF8

您可以验证您的内容 .env 文件包含:

Get-Content .env

运行应用程序

完成设置后,您可以启动FastMCP服务器。

python mcp_app.py

服务器将启动并显示URL(例如。, http://127.0.0.1:8000/sse/).这是您将用于与RAG助手交互的端点。

用法

MCP服务器运行后,您可以使用提供的工具与之交互。该应用程序公开了两个主要工具: index_file 和 rag_query.

index_file(file_path: str) -> str

此工具允许您为文档建立索引。提供要索引的文件的绝对或相对路径。

示例(使用假设的客户端或FastMCP UI):

# Assuming you have a FastMCP client or similar way to call tools
response = client.call_tool("index_file", file_path="./sample_files/my_document.pdf")
print(response)
# Expected output: "Successfully indexed my_document.pdf"

rag_query(question: str) -> str

此工具允许您根据索引文档的内容提问。

示例(使用假设的客户端或FastMCP UI):

response = client.call_tool("rag_query", question="What is the main topic of the indexed documents?")
print(response)
# Expected output: "The main topic is related to..."

挑战

一致处理多种文件格式:每种文件类型(PDF、PPTX、DOCX、CSV、TXT/Markdown)都有自己的结构和解析问题。确保所有文件得到统一处理而不丢失重要数据是一项重大挑战。

确保准确的分块和嵌入:大型文档必须被分解成更小的块进行检索。设计正确的块大小和重叠是棘手的,因为糟糕的块划分可能会导致搜索过程中上下文丢失或不相关的结果。

为代理通信设计结构化的MCP消息:由于代理使用MCP进行通信,因此创建可以携带所有必要信息(查询、上下文、结果)的一致消息格式需要仔细规划和调试。

未来改进

使用OCR添加对基于图像的文档的支持:目前只支持基于文本的文档。使用OCR(光学字符识别)扩展系统将使其能够处理扫描的图像或文档照片。

集成高级嵌入模型(OpenAI、HuggingFace等):使用更强的嵌入模型可以显著提高检索准确性,特别是对于复杂的查询或技术文档。

使用更专业的代理扩展架构:像Summary Agent(生成简洁的摘要)或PlannerAgent(决定工作流步骤)这样的其他代理可以使系统更加强大和灵活。 .