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)
系统要求
分阶段安装
- 复制存储库
git clone https://github.com/your-repo/RAG-Tester.git
cd RAG-Tester- 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"- 依赖性安装
uv sync- 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功能
- 通过UI中的设置菜单或按钮打开“文档管理”(Document Management)。
- 注册PDF或文本文件。
- 聊天时,您可以根据文档的内容提问。
MCP服务器设置(可选)
settings/mcp_config.json在文件中添加MCP服务器信息,或使用GUI中的MCP服务器设置菜单。
- 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等。
代码流(发送消息时):
- 输入:如果用户输入消息并按下发送按钮
ChatWindow从EVENT_TYPE: "chat"激发事件。 - RAG搜索(Backend):
- Worker 线程接收事件。 - 如果启用了RAG功能,并且有已注册的文档, RAGManager通过搜索与问题相关的文档区块(Chunk)(ragSearch). - 如果找到“上下文”(Context),请将其包括在提示中。
- LLM推论(Agent):
- OllamaAgentManager配置并运行LangChain图形。 - 如果LLM认为需要使用工具 MCPClient通过运行外部工具并接收结果。
- 流响应:
- 生成的答案令牌和工具运行结果 out_queue通过实时传递到UI(chat_message 事件)。 - ChatWindow在屏幕上立即显示。
2.RAG选项卡(文档管理和搜索测试)
用于管理RAG系统的文档和测试搜索性能的空间。
主要功能:
- 注册文档:PDF,注册文本文件并为矢量数据库(FAISS)编制索引。
- 文档/区块管理:可以查看和删除已注册文档列表和已拆分文本块。
- 测试RAG搜索:无需实际聊天,您可以通过搜索关键字来测试文档的搜索是否正确。可以查看搜索到的区块内容以及相似度得分(Similarity Score)。
- RAG设置:可以精细调整RAG参数,如区块大小(Chunk Size)、重复区间(Overlap)、搜索方式(Similarity/MMR)、搜索数量(k)。
代码流(注册文档时):
- 选择文件:用户单击“添加文档”按钮选择文件。
- 文档处理(Backend):
- Worker 螺纹 rag_add_pdf 接收等事件。 - RAGManager加载文档,并将文本拆分为设置的大小。 - OllamaEmbeddings 使用(bge-m3模型等)将文本转换为矢量。 - 矢量数据 FAISS 存储为索引文件,元数据为 SQLite 存储在数据库中。
- 反映结果:处理完成后,UI中的文档列表将更新。
代码流(测试搜索时):
- 搜索请求:在RAG选项卡的搜索窗口中输入查询。
- 矢量搜索:
- RAGManager通过矢量化输入的查询,在FAISS索引中搜索类似的区块。 - 根据设置的搜索方式(相似度、MMR等)选择最佳结果。
- 显示结果:详细显示已搜索区块的内容、来源文档、相似度分数等,以验证搜索质量。
系统体系结构和技术堆栈
该应用程序使用以下技术实现高响应性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许可证
