MCP代理工具

MCP代理是一个基于大型语言模型(LLM)的工具,用于与各种专业后端服务器交互,执行数学计算、文件操作、数据库交互等任务。

  • by PrajeetRagavR
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 PrajeetRagavR/Agent_with_Multiserver_MCP

使用说明

MCP代理项目文档

1. 项目概述

这个项目实现了一个MCP(模型上下文协议)代理,旨在与各种专用的后端服务器进行交互。该代理利用大型语言模型(LLM)来理解自然语言查询,并将这些查询路由到这些服务器提供的相应工具。这使得系统具有灵活性和可扩展性,能够执行多种任务,如数学计算、文件系统操作、数据库交互等。

该项目的主要目标是展示将大型语言模型(LLMs)与外部工具和服务集成的力量,通过对话界面实现智能自动化并增强用户交互。Streamlit应用程序为与代理进行交互提供了用户友好的前端界面。

2. 技术栈

该项目采用了一套强大且现代的技术栈来实现其目标。以下是所使用的关键技术:

  • python整个项目的主要编程语言,因其多功能性、丰富的库以及强大的社区支持而被选中。
  • **Streamlit(可译为“流利应用”或保持原名,根据上下文决定是否需要意译)**用于构建交互式网页用户界面(UI)。Streamlit的简洁性和快速开发能力使其成为以最少代码创建数据应用程序和仪表板的理想选择。
  • LangChain一个基于语言模型开发应用程序的框架。它提供了工具和抽象概念,用于将不同的组件(大型语言模型、工具、代理、记忆)串联起来,以创建复杂的大型语言模型驱动应用程序。
  • **MCP(模型上下文协议)**一个自定义框架,使智能体能够与各种专用后端服务器(例如数学、文件、PostgreSQL)进行交互。它促进了自定义工具的创建和集成,这些工具可供大型语言模型(LLM)智能体使用。该平台设计为可扩展的,便于轻松添加新的服务器功能和工具。
  • **PostgreSQL(译文:波斯特格瑞斯数据库)**一个功能强大的开源关系数据库系统,用于存储和管理结构化数据。它提供了可靠性、数据完整性和复杂数据操作所需的高级功能。
  • Groq一个推理引擎,能够快速高效地执行大型语言模型。在此,它被用来驱动大型语言模型(LLM)代理,使其能够快速响应并高效处理自然语言查询。

3. 项目结构

该项目组织为以下关键目录和文件:

  • main.pyMCP代理后端逻辑和测试的主要入口点。它负责初始化服务器、加载工具、创建代理,并展示各种交互。
  • streamlit_app.py这个Streamlit应用程序提供了图形用户界面(GUI),用于与MCP代理进行交互。它处理聊天交互、文档摘要,并显示代理的响应。
  • agent.py包含MCP代理的核心逻辑,包括如何处理自然语言查询、选择工具以及执行操作。
  • llm.py定义了代理所使用的大型语言模型(LLM)的配置及其与Groq的集成方式。
  • memory.py管理代理的对话记忆,使其能够在多次交互回合中保持上下文。
  • requirements.txt列出项目所需的所有Python依赖项。
  • servers/此目录包含各种后端服务器的实现,这些服务器为MCP代理提供工具:
    • files_server.py提供文件系统操作工具(例如,列出、读取、写入、删除、重命名文件)。
    • math_server.py提供进行数学计算的工具。
    • postgres_server.py启用与 PostgreSQL 数据库的交互。
    • prompt_server.py管理并提供代理使用的各种提示。
  • tmp/一个用于文件操作的临时目录,由(某程序或用户)使用 files_server.py。

4. 安装说明

要启动并运行MCP Agent项目,请按照以下步骤操作:

  1. 克隆仓库(如适用):

    git clone <repository_url>
    cd mcp-agent-project
    
  2. 创建一个虚拟环境:

    强烈建议使用虚拟环境来管理项目依赖。

    python -m venv .venv
    
  3. 激活虚拟环境:

    • 在Windows上:

      .venv\Scripts\activate
      
    • 在 macOS/Linux 上:

      source .venv/bin/activate
      
  4. 安装依赖项:

    使用 pip 安装所有所需的 Python 包:

    pip install -r requirements.txt
    
  5. 环境变量(如适用)

    创建一个 .env 在项目根目录中创建文件,并添加任何必要的环境变量,例如大型语言模型(LLM)的API密钥或数据库连接字符串。请参阅 .env.example (如提供)用于所需变量。

    # Example .env content
    GROQ_API_KEY="your_groq_api_key"
    DATABASE_URL="postgresql://user:password@host:port/database"
    
  6. PostgreSQL 安装设置:

    确保您已运行并可访问PostgreSQL服务器。更新 DATABASE_URL 在你的 .env 文件中包含正确的连接详情。

  7. 运行Streamlit应用程序:

    一旦所有依赖项都安装完毕且环境变量都已设置,您就可以启动Streamlit应用程序了:

    streamlit run streamlit_app.py
    

    这将在您的网页浏览器中打开该应用程序。

5. 使用指南

一旦Streamlit应用程序运行起来,您就可以通过聊天界面与MCP代理进行交互。以下是使用方法:

  1. 访问应用程序打开你的网页浏览器,并导航到Streamlit提供的URL(通常是 http://localhost:8501)。

  2. 与客服聊天在聊天输入框中输入您的查询或指令,然后按回车键。代理将使用其可用工具处理您的请求。

    • 数学运算请客服进行计算。例如:“123加456等于多少?”或者“计算64的平方根。”
    • 文件系统操作指示代理与文件进行交互 tmp/ 目录。例如:
      • "列出目录中的所有文件 tmp/ 目录。“
      • “阅读以下内容 tmp/my_document.txt。"
      • “创建一个名为 tmp/new_file.txt 内容为“你好,MCP!。“
      • “删除该文件 tmp/old_file.txt。"
    • 数据库交互如果PostgreSQL服务器已配置,您可以指示代理查询或操作数据。例如:“显示‘users’表中的前5条记录。”
    • 文档摘要为代理提供文本或文档以供其总结。
  3. 评审回复代理的回复,包括工具执行的结果,将显示在聊天界面中。

  4. 聊天记录该应用程序保存聊天记录,使您可以查看过去的对话。

6. 故障排除

以下是一些你可能会遇到的常见问题以及解决这些问题的方法:

  • **“无法从文件加载资源:TaskGroup 中存在未处理的错误(1 个子异常)”或“无法从 MCP 客户端加载工具:TaskGroup 中存在未处理的错误(1 个子异常)”**这些错误通常表明一个或多个后端服务器(例如。, files_server.py, postgres_server.py未能正确初始化或保持连接。

    • 检查服务器日志检查终端(或:查看所在终端) streamlit_app.py 正在请求更详细的错误信息 try-except 服务器文件中的代码块。这将提供关于哪个服务器出现故障以及故障原因的具体线索。
    • 验证依赖项确保所有依赖项都已正确安装,方法是运行 pip install -r requirements.txt。
    • 环境变量再次确认所有必要的环境变量(例如。, GROQ_API_KEY, DATABASE_URL) 在您的(设置中)已正确设置 .env 文件。
    • PostgreSQL 状态如果 postgres_server.py 如果失败,请确保您的 PostgreSQL 服务器正在运行且可访问,并且连接详情中(的设置)正确无误 DATABASE_URL 是准确的。
    • 端口冲突确保没有其他应用程序正在使用MCP服务器试图绑定的相同端口。
  • Streamlit 应用程序未加载如果Streamlit应用程序无法加载或显示空白页面:

    • 检查终端输出在你运行的终端中查找任何错误信息 streamlit run streamlit_app.py.
    • 端口可用性确保端口8501(或Streamlit尝试使用的端口)未被防火墙或其他应用程序阻止。
  • 代理未响应或响应错误:

    • 大型语言模型(LLM)API密钥验证您的 GROQ_API_KEY 是正确的且未过期。
    • 服务器连接性确认所有后端服务器均在运行且可被访问 MultiServerMCPClient。
    • 提示工程如果代理一直给出错误的回应,你可能需要优化所使用的提示语 prompt_server.py 或者代理的内部逻辑。

如果您遇到此处未列出的问题,请查阅具体的服务器日志以获取更详细的错误信息,或联系项目维护人员。