RAG文档管理服务

一个轻量级的RAG MCP服务器,提供文档嵌入、搜索、列表和管理功能,适用于需要高效文档检索和问答的场景。

  • by Hitesh-Saha
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Hitesh-Saha/langchain-agent

使用说明

langchain试剂

一个小型示例工作空间,包括:

  • 轻量级RAG MCP服务器(rag-server)它公开了用于嵌入、搜索、列出和管理文档的工具
  • 一个连接到RAG MCP服务器并可以使用RAG工具的示例代理集成

此README描述了如何设置环境、启动RAG服务器和运行代理或示例客户端代码。

先决条件

  • Python 3.12或更高版本
  • git(可选)
  • 紫外线
  • 拥抱面API密钥
  • Google Gemini API密钥

存储库在此文件夹下使用两个单独的Python包:

  • . --the langchain-agent 包(主代理代码)(pyproject.toml存在)
  • ./rag-server --RAG MCP服务器包(pyproject.toml存在)

快速设置

从项目根目录(/workspaces/codespace blank/langchain agent):

  1. 创建并激活虚拟环境

    uv sync --frozen

  1. 在项目根目录中创建一个.env文件,其中包含所需的环境变量(见下文)。

    GOOGLE_API_KEY=<your_google_api_key_here>
    RAG_MCP_SERVER_URL=<your_rag_mcp_server_url_here>
    LANGSMITH_API_KEY=<your_langsmith_api_key_here>
    GOOGLE_GEMINI_MODEL_NAME=<your_google_gemini_model_name_here>

    RAG_DB_PATH=<your_custom_rag_db_path_here>
    HF_TOKEN=<your_hf_token_here>
    MCP_PORT=<your_port_here>

  1. 安装子模块mcp RAG服务器

    git submodule init
    git submodule update

  1. 启动RAG服务器包

    cd rag-server
    uv run rag-mcp-server

  1. 在单独的终端中,激活虚拟环境:

对于Windows:

    source .venv/Scripts/activate

对于Linux/Mac:

    source .venv/bin/activate
  1. 在项目根目录中运行代理代码:
    langgraph dev --port 8080 --allow-blocking

环境变量

服务器和代理使用一些环境变量:

  • RAG_MCP_SERVER_URL--代理将用于联系正在运行的RAG MCP服务器的URL(例如。http://127.0.0.1:8000)
  • HF_TOKEN--如果需要,通过嵌入代码使用拥抱脸令牌
  • MCP_TRANSPORT、MCP_HOST、MCP_PORT——从命令行启动MCP服务器时使用的可选默认值
  • GOOGLE_API_KEY-用于GOOGLE Gemini LLM访问的GOOGLE API密钥

您可以将它们放入rag-server/src中的.env文件中,也可以在启动服务之前在shell中设置它们。

RAG MCP服务器

您还可以在HTTP模式(默认)下单独手动启动RAG MCP服务器,以便代理可以连接:

uv run rag-mcp-server --mode http --host 127.0.0.1 --port 8000 --db-path ./data/rag_database.db

这将:

  • 创建。/data/rag_database.db(目录将自动创建)
  • 启动FastMCP服务器,公开RAG工具(嵌入/搜索/列表/删除/获取/提问)

如果您更喜欢在stdio模式下运行,以便使用使用stdio传输的MCP客户端进行本地测试,请使用--mode stdio。

常见工作流程

  • 摄取文档:
    • 调用embed_document(file_path,metadata)以添加文件并创建嵌入块
  • 搜索上下文:
    • 调用search_documents(query、top_k、min_similarity)以检索相似的块和分数
  • 问一个问题(推荐):
    • 使用ask_question({“question”:…,“context_limit”:N,“similarity_threshold”:X})运行端到端RAG问答,并接收包含来源的答案
  • 管理数据库:
    • list_documents()--列表文件
    • get_datatabase_stats()--获取计数和数据库信息
    • delete_document(文件名)--删除文件的块

故障排除

  • 如果代理无法连接到RAG MCP服务器,请检查RAG_MCP_server_URL,并确保服务器正在运行且可访问。
  • 如果由于缺少模型密钥而导致嵌入失败,请设置HF_TOKEN或特定于提供商的凭据。

贡献

请随时打开问题或PR。在添加新行为时,保持更改较小,并添加最少的测试。

许可证

请参阅顶级项目许可证文件(如果有的话)。