项目简介
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能够基于用户上传的私有文档(如课程大纲、学生笔记)回答问题,并支持按文件名过滤和指定检索数量。
安装步骤
- 克隆仓库:
首先,将Sudar项目仓库克隆到您的本地机器:
git clone https://github.com/Adhish-Krishna/Sudar.git cd Sudar - 配置环境变量:
在项目根目录创建一个名为 '.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' 文件中。 # 确保这些依赖服务已正确配置并运行。 - 使用Docker Compose运行所有服务:
Sudar平台设计为通过Docker Compose部署。请确保您的系统已安装Docker和Docker Compose。在项目根目录运行以下命令,即可启动包括 'sudar-tools-mcp-server' 在内的所有Sudar平台服务:
这条命令将会在后台启动所有服务。您可以通过 'docker-compose ps' 命令检查它们的运行状态。docker-compose up -d
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客户端现在可以:
- 声明能力: 客户端可以向MCP服务器请求其能力列表,以了解所有可用工具及其参数。
- 调用工具: 客户端可以根据需要,通过MCP协议向服务器发送JSON-RPC请求,调用这些已注册的工具。请求体将指定工具的'name'和'arguments'。服务器会执行相应的操作(如进行Web搜索、保存内容等),并将结果以JSON-RPC响应的形式返回给客户端。
示例: 假设MCP客户端想要调用 'web_search' 工具来搜索关于“细胞分裂”的信息。客户端将构建一个包含 'web_search' 工具名称和查询参数的请求,发送给服务器。服务器收到请求后会调用Tavily API执行搜索,然后将搜索结果返回给客户端,供LLM进一步处理或生成回复。
信息
分类
网页与API