项目简介

Sudar AI教育工具MCP服务是Sudar平台的一个核心组件,旨在为大型语言模型(LLM)客户端提供标准化的工具接口。它将复杂的外部功能(如Web搜索、内容抓取、文档管理和RAG检索)封装成LLM可直接调用的工具,通过Model Context Protocol (MCP) 协议进行通信,从而扩展LLM在教育领域的应用能力,赋能教师和学生。

主要功能点

  • Web搜索: 利用Tavily API进行互联网搜索,获取最新的教育内容、科学事实和学习资料。例如,LLM可以搜索“光合作用的最新研究进展”来为教材提供最新信息。
  • 网页抓取: 从指定的网页URL中提取并整理主要文本内容。当LLM需要从特定网页(如维基百科、教育博客)获取详细信息时,可以使用此工具。
  • 内容保存: 将Markdown格式的教育内容(如LLM生成的作业、讲义)转换为PDF文件,并保存到MinIO对象存储中,支持按用户和会话进行组织,方便教师管理和分发。
  • 文档检索 (RAG): 从预先摄入的文档库中检索与LLM查询相关的上下文信息。这使得LLM能够基于用户上传的私有文档(如课程大纲、学生笔记)回答问题,并支持按文件名过滤和指定检索数量。

安装步骤

  1. 克隆仓库: 首先,将Sudar项目仓库克隆到您的本地机器:
    git clone https://github.com/Adhish-Krishna/Sudar.git
    cd Sudar
  2. 配置环境变量: 在项目根目录创建一个名为 '.env' 的文件(可以参考 '.env.example')。请务必填写以下关键服务和API密钥信息,这些是MCP工具服务运行所必需的:
    # MCP工具服务自身及依赖服务的配置
    TAVILY_API_KEY="您的Tavily搜索API密钥"
    MINIO_URL="http://localhost:9000" # MinIO对象存储服务地址
    MINIO_ACCESS_KEY="minioadmin"     # MinIO的访问密钥
    MINIO_SECRET_KEY="minioadmin"     # MinIO的秘密密钥
    MINIO_BUCKET_NAME="sudar-content" # MinIO中用于存储内容的桶名称
    MD_TO_PDF_URL="http://localhost:3000/convert" # Markdown转PDF服务的HTTP地址
    RAG_SERVICE_URL="http://localhost:3001" # RAG(检索增强生成)服务的HTTP地址
    
    # 此外,Sudar平台还包含其他服务(如Qdrant、Ollama、MongoDB),它们的配置通常在各自服务的 '.env' 文件中。
    # 确保这些依赖服务已正确配置并运行。
  3. 使用Docker Compose运行所有服务: Sudar平台设计为通过Docker Compose部署。请确保您的系统已安装Docker和Docker Compose。在项目根目录运行以下命令,即可启动包括 'sudar-tools-mcp-server' 在内的所有Sudar平台服务:
    docker-compose up -d
    这条命令将会在后台启动所有服务。您可以通过 'docker-compose ps' 命令检查它们的运行状态。

MCP服务器配置

MCP客户端(例如您的LLM应用)需要以下信息来连接并使用Sudar AI教育工具MCP服务:

{
  "server_name": "Sudar Tools Server",
  "command": "python",
  "args": [
    "services/sudar-tools-mcp-server/run.py"
  ],
  "port": 3002,
  "host": "localhost",
  "transport": "sse",
  "description": "提供Web搜索、网页抓取、内容保存和文档检索等教育AI工具。",
  "capabilities": {
    "tools": [
      {
        "name": "web_search",
        "description": "搜索网络以获取教育内容、事实和信息。用于查找最新信息、教育资源、科学事实和学习材料。",
        "parameters": {
          "type": "object",
          "properties": {
            "query": {"type": "string", "description": "要执行的搜索查询"},
            "max_results": {"type": "integer", "description": "要返回的最大搜索结果数,默认为5"}
          },
          "required": ["query"]
        }
      },
      {
        "name": "scrape_websites",
        "description": "从一个或多个指定网站抓取内容。用于提取和分析包含有价值教育内容的URL。",
        "parameters": {
          "type": "object",
          "properties": {
            "urls": {"type": "array", "items": {"type": "string"}, "description": "要抓取内容的URL列表"}
          },
          "required": ["urls"]
        }
      },
      {
        "name": "save_content",
        "description": "将Markdown格式内容转换为PDF并保存到MinIO存储。用于保存生成的作业、讲义或教育内容,每次生成作业后都应使用此工具。",
        "parameters": {
          "type": "object",
          "properties": {
            "content": {"type": "string", "description": "Markdown格式的内容,将转换为PDF"},
            "title": {"type": "string", "description": "PDF文件的标题,也将用作文件名"},
            "user_id": {"type": "string", "description": "可选的用户标识符,用于在MinIO中组织内容"},
            "chat_id": {"type": "string", "description": "可选的会话标识符,用于在MinIO中组织内容"}
          },
          "required": ["content", "title"]
        }
      },
      {
        "name": "retrieve_content",
        "description": "从已摄入文档中检索相关内容。当用户查询包含@文件名.扩展名引用或需要从上传文档获取上下文时使用。",
        "parameters": {
          "type": "object",
          "properties": {
            "query": {"type": "string", "description": "用于查找相关内容的搜索查询"},
            "user_id": {"type": "string", "description": "用户标识符,用于按用户上下文过滤文档"},
            "chat_id": {"type": "string", "description": "会话标识符,用于按会话上下文过滤文档"},
            "filenames": {"type": "array", "items": {"type": "string"}, "description": "可选的特定文件名列表,用于过滤结果。如果未提供,将从查询中自动提取@文件名.扩展名模式"},
            "top_k": {"type": "integer", "description": "要返回的最相关结果数量,默认为5"}
          },
          "required": ["query", "user_id", "chat_id"]
        }
      }
    ]
  }
}

配置信息说明:

  • 'server_name': MCP服务器的友好名称。
  • 'command': 启动MCP服务器所使用的命令(通常是'python')。
  • 'args': 传递给'command'的参数,这里是MCP服务器主程序的路径。
  • 'port': MCP服务器监听的端口,默认为'3002'。
  • 'host': MCP服务器监听的IP地址,默认为'localhost'。
  • 'transport': MCP服务器支持的通信协议,这里是'sse'(Server-Sent Events)。
  • 'description': 服务器功能的简要描述。
  • 'capabilities.tools': 描述了服务器提供的所有工具。每个工具包含:
    • 'name': 工具的名称。
    • 'description': 工具的用途和何时使用。
    • 'parameters': 工具所需的输入参数及其类型和描述。

基本使用方法

一旦Sudar Tools MCP服务器(以及所有依赖服务如MinIO, md-to-pdf, RAG服务)通过Docker Compose成功运行,它将监听 'http://localhost:3002'(或其他配置的端口)。您的LLM客户端现在可以:

  1. 声明能力: 客户端可以向MCP服务器请求其能力列表,以了解所有可用工具及其参数。
  2. 调用工具: 客户端可以根据需要,通过MCP协议向服务器发送JSON-RPC请求,调用这些已注册的工具。请求体将指定工具的'name'和'arguments'。服务器会执行相应的操作(如进行Web搜索、保存内容等),并将结果以JSON-RPC响应的形式返回给客户端。

示例: 假设MCP客户端想要调用 'web_search' 工具来搜索关于“细胞分裂”的信息。客户端将构建一个包含 'web_search' 工具名称和查询参数的请求,发送给服务器。服务器收到请求后会调用Tavily API执行搜索,然后将搜索结果返回给客户端,供LLM进一步处理或生成回复。

信息

分类

网页与API