RAG测试工具

基于Ollama和LangChain的RAG测试工具,支持本地LLM运行、文档检索增强生成和MCP工具集成,适用于开发AI代理和文档管理应用。

  • by godstale
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 godstale/RAG-Toolkit

使用说明

RAG工具包

RAG ToolKit是基于Ollama/LangChain的RAG测试工具。您可以使用Ollama注册的嵌入模型在RAG DB中注册和搜索多个文档。当输入用户的问题时,可以将在RAG DB中搜索到的结果作为MCP工具注册的agent进行处理后进行回答。

RAG ToolKit的所有操作都使用Ollama在本地环境中运行,因此嵌入和LLM使用无需额外费用。此外,通过结合MCP的ReAct agent生成答案,您可以根据RAG搜索结果生成更适合您的问题的答案。但是,为了正确执行此过程,不仅要修改MCP设置,还要修改ReAct agent的提示等,以满足您的需要,并进行充分的测试。

该项目可以成为希望用Python开发基于GUI的RAG/AI-Agent应用程序的开发人员的有用基础代码。

关键功能(Key Features)

  • 运行本地LLM:通过Ollama在本地免费驱动LLM模型,降低隐私和成本
  • RAG(生成搜索增强):在本地矢量数据库中注册PDF、文本文件等,以提供基于文档的上下文识别答案
  • MCP工具集成:通过MCP服务器协议集成和调用外部工具和服务
  • 管理对话记录:自动保存对话内容并浏览上一次对话
  • 实时流媒体:实时流式输出LLM答案和工具调用结果
  • 直观的GUI:提供基于PySide6的桌面界面(包括MCP服务器和RAG文档管理功能)

安装方法(Installation)

系统要求

  • Python 3.12或更高版本
  • 奥拉玛 安装(用于运行本地LLM)
  • 紫外线 (包管理器,推荐)

分阶段安装

  1. 复制存储库

    git clone https://github.com/your-repo/RAG-Tester.git
    cd RAG-Tester
    
  2. uv安装(如果没有)

    # pip 사용
    pip install uv
    
    # 또는 curl (Unix-like)
    curl -LsSf https://astral.sh/uv/install.sh | sh
    
    # 또는 PowerShell (Windows)
    powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
    
  3. 依赖性安装

    uv sync
    
  4. Ollama安装和型号下载 Ollama官方网站安装后,使用以下命令下载LLM模型和嵌入模型:

    • LLM型号 (例如qwen 3:14b):用于聊天和生成答案
    • 嵌入模型 (bge-m3):用于RAG文档矢量化
    ollama pull qwen3:14b
    ollama pull bge-m3
    

如何运行(How to Run)

uv run main.py

运行上述命令将打开GUI窗口,您可以开始聊天。

使用RAG功能

  1. 通过UI中的设置菜单或按钮打开“文档管理”(Document Management)。
  2. 注册PDF或文本文件。
  3. 聊天时,您可以根据文档的内容提问。

MCP服务器设置(可选)

  1. settings/mcp_config.json 在文件中添加MCP服务器信息,或使用GUI中的MCP服务器设置菜单。

  2. Exa MCP服务器示例 (Web搜索和代码上下文搜索):

    这个示例 exa-mcp-server添加使用搜索Web搜索和编码相关上下文的功能。 要使用 Exa AI必须从中获得API密钥。

    {
      "mcpServers": {
        "exa": {
          "command": "npx",
          "args": [
            "-y",
            "exa-mcp-server",
            "tools=get_code_context_exa,web_search_exa"
          ],
          "env": {
            "EXA_API_KEY": "your_exa_api_key_here"
          },
          "transport": "stdio"
        }
      }
    }
    

    Exa MCP主要工具:

    • web_search_exa:执行实时Web搜索并获取相关内容。
    • get_code_context_exa:专门搜索与编程相关的上下文,包括最新的库、SDK和API文档。

应用程序配置和功能详细信息(App Structure&Details)

应用程序 Chat选项卡第一课 RAG 탭 由两个主要界面组成。

1.Chat选项卡(对话界面)

用户与AI对话并使用工具的主空间。

主要功能:

  • AI聊天:与设置的Ollama模型进行对话。
  • RAG连接:如果您在RAG选项卡上注册了文档,请在提问时自动搜索相关文档并将其反映在您的答案中。
  • 使用MCP工具:LLM根据需要自动调用活动MCP服务器上的工具(例如Web搜索、代码执行等)。
  • 对话记录:您可以开始新的聊天或载入和删除历史记录。
  • AI设置:可以实时调整LLM模型、Temperature、System Prompt等。

代码流(发送消息时):

  1. 输入:如果用户输入消息并按下发送按钮 ChatWindow从 EVENT_TYPE: "chat" 激发事件。
  2. RAG搜索(Backend):
    • Worker 线程接收事件。
    • 如果启用了RAG功能,并且有已注册的文档, RAGManager通过搜索与问题相关的文档区块(Chunk)(ragSearch).
    • 如果找到“上下文”(Context),请将其包括在提示中。
  3. LLM推论(Agent):
    • OllamaAgentManager配置并运行LangChain图形。
    • 如果LLM认为需要使用工具 MCPClient通过运行外部工具并接收结果。
  4. 流响应:
    • 生成的答案令牌和工具运行结果 out_queue通过实时传递到UI(chat_message 事件)。
    • ChatWindow在屏幕上立即显示。

2.RAG选项卡(文档管理和搜索测试)

用于管理RAG系统的文档和测试搜索性能的空间。

主要功能:

  • 注册文档:PDF,注册文本文件并为矢量数据库(FAISS)编制索引。
  • 文档/区块管理:可以查看和删除已注册文档列表和已拆分文本块。
  • 测试RAG搜索:无需实际聊天,您可以通过搜索关键字来测试文档的搜索是否正确。可以查看搜索到的区块内容以及相似度得分(Similarity Score)。
  • RAG设置:可以精细调整RAG参数,如区块大小(Chunk Size)、重复区间(Overlap)、搜索方式(Similarity/MMR)、搜索数量(k)。

代码流(注册文档时):

  1. 选择文件:用户单击“添加文档”按钮选择文件。
  2. 文档处理(Backend):
    • Worker 螺纹 rag_add_pdf 接收等事件。
    • RAGManager加载文档,并将文本拆分为设置的大小。
    • OllamaEmbeddings 使用(bge-m3模型等)将文本转换为矢量。
    • 矢量数据 FAISS 存储为索引文件,元数据为 SQLite 存储在数据库中。
  3. 反映结果:处理完成后,UI中的文档列表将更新。

代码流(测试搜索时):

  1. 搜索请求:在RAG选项卡的搜索窗口中输入查询。
  2. 矢量搜索:
    • RAGManager通过矢量化输入的查询,在FAISS索引中搜索类似的区块。
    • 根据设置的搜索方式(相似度、MMR等)选择最佳结果。
  3. 显示结果:详细显示已搜索区块的内容、来源文档、相似度分数等,以验证搜索质量。

系统体系结构和技术堆栈

该应用程序使用以下技术实现高响应性UI和强大的后端逻辑:

  • 前端(GUI): PySide6 (Qt for Python)。包括主窗口和各种设置对话框。
  • 后端逻辑:采用了多线程体系结构,以防止UI冻结。
    • Worker 主题(ui/worker.py)负责LLM通信、RAG处理、MCP服务器通信等所有长期运行任务。
    • UI和工作器之间的通信通过线程安全(Thread-safe)队列进行。
  • LLM和Tool集成: LangChain 使用框架管理代理结构化、链调用和工具交互。
    • langchain-ollama:Ollama集成
    • langchain-mcp-adapters:MCP协议支持
  • RAG系统:
    • 向量存储: FAISS支持快速的文档矢量相似度搜索。
    • 嵌入: OllamaEmbeddings通过在本地创建矢量嵌入。
    • 元数据: SQLite 数据库(settings/rag_database.db)管理文档和区块的元数据。

配置主要文件(Code Structure)

  • main.py:应用程序的入口点。
  • ui/
    • chat_window.py:定义主应用程序窗口和UI布局
    • worker.py:处理与LLM、RAG和MCP服务器的异步通信的后台工作人员
    • widgets/:各种设置和管理对话框集合
  • agent/
    • llm_ollama.py:LangChain代理管理和Ollama模型交互处理
    • rag_manager.py:实现RAG核心逻辑,包括文档处理、Chunking、索引、搜索等
    • rag_database.py:用于管理RAG元数据的SQLite数据库处理程序
    • chat_history.py:保存和加载对话历史记录
  • mcp_server/
    • mcp_manager.py:MCP工具服务器的设置和生命周期管理
  • settings/:应用程序设置文件和数据库存储库
    • app_settings.py:管理应用程序设置
    • mcp_config.json:MCP服务器设置文件

许可证(License)

MIT许可证