本地_RAG_mcp
这是我尝试创建一个本地RAG mcp服务器来与本地.docx、.xlsx文件聊天。
与Ollama&MCP的本地文件问答
该项目提供了一个基于Python的MCP代理,允许您使用Ollama进行本地语言模型推理,与本地Word(.docx)和Excel(.xlsx)文档聊天,确保您的私人数据保留在您的计算机上。
它使用LangChain社区组件进行文档加载、文本分割、嵌入和向量存储(ChromaDB),以及 mcp-sdk 将此功能作为一组工具公开。
特征:
- 私人和本地: 所有的处理、嵌入和语言模型推理都是通过Ollama在本地进行的。没有数据离开你的机器。
- 支持的文档类型: 目前支持Microsoft Word(.docx)和Excel(.xlsx)文件。(可轻松扩展为PDF、.txt等格式)
- 简单索引: 一个专用的MCP工具,用于扫描指定目录、处理文档并构建可搜索的矢量索引。
- 自然语言问答: 用自然语言询问有关文档内容的问题。
- MCP集成: 通过MCP工具公开功能,可用于 MCP检查员 或
mcp-cli.
原理
- 文档加载: 代理扫描指定的本地文件夹以查找支持的文档。
- 文本分块: 文档内容被拆分为更小、可管理的块。
- 嵌入: 使用局部Ollama嵌入模型将每个块转换为数值表示(嵌入)(例如。,
nomic-embed-text). - 矢量存储: 这些嵌入及其相应的文本块存储在本地ChromaDB矢量存储中。
- 查询(RAG-检索增强生成):
- 当你问一个问题时,它也会被嵌入。 - 系统在向量存储中搜索嵌入与问题嵌入最相似的文档块。 - 这些相关块(上下文)与您的原始问题组合成提示。 - 该提示被发送到本地Ollama聊天模型(例如。, llama3)以生成答案。
先决条件
- python Python 3.9+
- 没有 : 你需要Ollama安装并运行。
- 安装: ollama.com - 确保奥利玛为模特提供服务。您可以通过运行来测试这一点 ollama list 在你的终端。
- 所需Olama型号:
- 拉动嵌入模型: ollama pull nomic-embed-text - 拉取聊天模式: ollama pull llama3
安装
- 克隆存储库(或下载脚本):
# If you create a Git repository:
# git clone https://github.com/ItsMistahJi/local_RAG_mcp
# cd local_RAG_mcp- 创建虚拟环境(推荐):
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate- 安装Python依赖项:
pip install -r requirements.txt设置和使用
- 准备您的文件:
- 创建一个名为的文件夹 docs_simple 与位于同一目录中 server.py 脚本(或配置 DOC_DIR 在脚本中)。 - 放置您的 .docx 和 .xlsx 将文件放入此 docs_simple 文件夹。
- 运行MCP代理脚本:
打开终端,导航到项目目录,然后运行:
python server.py脚本将启动,尝试连接到Ollama,然后等待MCP客户端连接(如MCP Inspector)。您将在此终端中看到日志输出。
- 使用MCP检查器进行交互(推荐):
- 下载并安装 MCP检查员. - 打开MCP检查器。 - 配置代理: - 如果未自动检测到代理,则可能需要手动添加它。 - 转到“文件”>“首选项”>“代理”(或类似部分)。 - 单击“添加”或“+”图标。 - 姓名: 给它一个描述性的名称(例如,“我的本地RAG代理”)。 - 命令: 输入完整命令以运行脚本: python /full/path/to/your/server.py. - 运输: 选择 stdio. - 保存配置。 - 连接和使用: - 回到主MCP检查器窗口,在列表中找到您配置的代理。 - 点击“连接”或其旁边的播放图标。MCP检查器将运行您的脚本。 - 连接后,您将看到可用的工具: - initialize_and_index:请先运行此工具。这不需要争论。它将处理以下文件 docs_simple 并在中创建本地矢量数据库 chroma_db_simple。检查代理的终端日志以了解进度。 - ask_question:索引完成后,使用此工具。这需要一个论点:
{
"question": "Your question about the documents here"
}代理将检索相关信息并生成答案。
- 使用互动
mcp-cli(备选方案):
确保你的Python脚本(server.py)是 不 已经在运行。 mcp-cli 将为每个命令启动它。
- 列出可用工具(可选检查):
mcp tool list CompanyDocumentQA-Ollama --command "python server.py" --transport stdio- 索引文件:
mcp tool call CompanyDocumentQA-Ollama initialize_and_index --command "python server.py" --transport stdio*(等待此操作完成。您将在终端中看到日志。)*
- 问一个问题:
mcp tool call CompanyDocumentQA-Ollama ask_question '{"question": "What is the company policy on annual leave?"}' --command "python server.py" --transport stdio脚本概述(server.py)
- 配置: 文档目录、ChromaDB路径、Ollama模型等的顶部常量。
- 辅助功能: 要加载和拆分文档,请初始化Ollama组件。
initialize_and_index(MCP工具):
- 负载 .docx 和 .xlsx 文件夹。 - 将它们分割成块。 - 使用Ollama生成嵌入。 - 将块和嵌入存储在持久ChromaDB中。
ask_question(MCP工具):
- 回答用户问题。 - 嵌入问题。 - 从ChromaDB检索相关文档块。 - 构造一个包含问题和上下文的提示。 - 从Ollama LLM那里得到答案。
- 主模块: 设置日志记录,初始化Ollama组件,并在上启动MCP代理服务器
stdio.
定制和未来增强功能
- 更多文档类型: 添加PDF加载程序(
PyPDFLoader),文本文件(TextLoader)等等,inload_documents_from_directory记住安装必要的软件包(例如。,pypdf,unstructured). - 不同型号: 改变
EMBEDDING_MODEL_NAME和LLM_MODEL_NAME使用其他Ollama型号。确保它们在本地被拉动。 - 分块策略: 试验
chunk_size和chunk_overlap在……里面RecursiveCharacterTextSplitter为了获得更好的结果。 - 检索器选项: 修改
search_kwargs={"k": 3}在……里面ask_question以检索更多/更少的块。如果需要,探索其他检索模式。 - 快速工程: 在中优化提示模板
ask_question以获得更好的LLM响应。 - 错误处理: 加强错误处理和用户反馈。
- Web UI(例如Streamlit/Gradio): 将MCP代理或其核心逻辑封装在一个简单的web UI中,以便非技术用户更容易访问,可能是通过让UI调用MCP代理工具。
故障排除
- “找不到Ollama”/连接错误:
- 确保Ollama正在运行(ollama serve 或Ollama桌面应用程序)。 - 验证 OLLAMA_BASE_URL 脚本中的内容与Ollama设置相匹配(默认值为 http://localhost:11434). - 确保模型(nomic-embed-text, llama3)被拉动: ollama list.
- “找不到文档”/“矢量存储为空”:
- 仔细检查 DOC_DIR 脚本中的路径,并确保它指向正确的文件夹。 - 确保您的文档文件位于该文件夹中,并且具有支持的扩展名(.docx、.xlsx)。 - 跑吧 initialize_and_index 工具。在索引过程中检查终端日志是否有错误。
mcp-cli问题:
- 确保 mcp-cli 安装正确(pip install "mcp-cli[cli]"). - 使用完整 --command "python /path/to/script.py" 和 --transport stdio 旗帜。
- MCP检查员看不到代理:
- 确保您在MCP检查器首选项中正确配置了代理,并使用Python脚本的完整路径 stdio 运输。 - 确保MCP检查器尝试启动脚本时,脚本尚未运行。
