模块化检索增强生成系统

Agentic RAG MCP是一个模块化的检索增强生成系统,具备高级分块、多源LLM支持、强大的数据库集成和多语言问答功能,适用于需要从多种数据源获取准确信息的场景。

  • by MohamedMarawany
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 MohamedMarawany/agentic-rag-mcp

使用说明

代理型RAG MCP(注:RAG可能指某种特定技术或系统,MCP可能指管理控制平台或类似概念,具体含义需根据上下文确定,此处为直译)

一个模块化的检索增强生成(RAG)系统,具备先进的分块处理、多源大型语言模型(LLMs)、强大的数据库集成能力以及多语言问答(英文/阿拉伯文)功能。

特点/功能

  • 混合文档分块处理: Docling(支持Markdown格式)在无法处理时自动回退到NLTK,以生成细粒度且适合RAG(检索增强生成)的片段。
  • PDF内容提取与问答处理: 对任何PDF文件提问,享受透明分块预览功能。
  • 多源大型语言模型(LLM)支持: 本地模型(如Ollama:Mistral、Llama2等)、OpenAI GPT备用方案,以及Transformers(支持英语和阿拉伯语)。
  • 网页搜索备用方案: 当大型语言模型/PDF缺少信息时,使用DuckDuckGo、Wikipedia和Serper API获取真实世界的答案。
  • 数据库集成: 将问答数据存储在SQL(SQLite)、NoSQL(MongoDB)和Neo4j图数据库中,并提供清晰的来源追踪(例如,“WebSearchAgent - Serper”)。
  • 节点链接: 在Neo4j中,问答交互被链接起来以进行会话/序列分析。
  • 验证: 基于规则和基于大型语言模型(LLM)的答案验证,特别是针对时间/日期和银行业务相关问题。
  • 多语言问答: 自动选择阿拉伯语模型来回答阿拉伯语问题。
  • 可扩展的、生产就绪的代码库: 模块化设计,便于添加功能。

快速入门

  1. 克隆仓库并安装依赖项:

    pip install -r requirements.txt
    
  2. (可选)安装Ollama以用于本地大型语言模型:

    • 从 https://ollama.com/download 下载并运行一个模型:
      ollama run mistral
      
  3. 准备您的PDF文件:

    • 将您的PDF文件放在 files/ 目录(例如。, files/questions_english.pdf)。
    • 更新文件名中的 main.py 或者在需要时通过命令行界面(CLI)进行。
  4. 运行应用程序:

    python main.py
    
    • 当系统提示时,请输入您的问题。
    • 该系统将显示数据块预览、答案来源以及验证状态。
    • 所有问答内容均保存在SQL、MongoDB和Neo4j中。
  5. 检查您的数据:

    • 使用Neo4j浏览器、SQLite工具或MongoDB Compass来查看问答记录及其关系。

配置

  • 编辑 config.yaml 对于数据库统一资源标识符(DB URIs)、分块方法以及网络代理设置。
  • .gitignore 排除数据文件(例如。, rag.db), 模型,以及秘密。

要求

  • Python 3.9及以上版本
  • 见 requirements.txt 对于所有依赖项

笔记

  • 为了获得最佳的本地大型语言模型(LLM)效果,请使用Ollama并搭配支持的模型(如Mistral、Llama2等)。
  • 对于阿拉伯语问答,如果问题为阿拉伯语,系统会自动选择一个阿拉伯语模型。
  • 所有答案来源(大型语言模型、网络搜索代理)均被追踪并存储。
  • Neo4j节点被链接起来用于会话/序列分析。
  • 如果Docling分块处理仅生成一个分块,则会自动使用NLTK分块处理。

高级用法

  • 使用CLI选项运行以自定义PDF、配置或显示所有问答:
    python main.py --pdf files/questions_english.pdf --show-sql
    python main.py --show-nosql
    
  • 跨数据库导出或比较问答记录以进行分析。

故障排除

  • 如果分块处理失败,请检查Docling的安装/版本;自动回退到使用NLTK。
  • 对于OpenAI配额错误,请使用Ollama或Transformers。
  • 对于缺失的记录,请检查日志中的SQL错误或使用导出脚本进行数据库比较。

如需提出功能请求或寻求帮助,请打开一个议题或联系维护者。