项目简介

该GitHub仓库是AWS解决方案库的一个示例,旨在展示如何在Amazon EKS上构建可扩展的LLM推理和代理AI应用。其中包含了两个核心的MCP服务器实现:一个用于提供实时的Web搜索能力(通过Tavily API),另一个用于提供本地文件系统操作(如读写文件)。这些MCP服务器通过标准化的Model Context Protocol (MCP) 协议与上层代理AI应用进行通信,极大地丰富了LLM的功能和交互能力。

主要功能点

  • 实时Web搜索服务: 代理AI可以通过此服务进行实时的网络信息检索,包括通用网页搜索和新闻搜索。这使得LLM能够获取RAG知识库中可能缺失的实时或动态信息,确保回答的时效性和全面性。
  • 本地文件系统操作服务: 赋予代理AI读写文件的能力。例如,LLM可以将生成的故事、报告或数据分析结果保存到服务器的指定目录,也可以读取本地文件作为其上下文信息进行处理。
  • MCP协议标准化支持: 两个MCP服务器均基于Model Context Protocol (MCP) 标准构建,通过JSON-RPC协议提供服务。这确保了与任何兼容MCP的客户端(如Strands SDK代理框架)的无缝集成和通信。
  • 云原生高可用部署: 该解决方案设计用于在Amazon EKS Kubernetes集群中部署,具备出色的可扩展性、高可用性和容错能力,适用于生产级的AI应用。

安装步骤

本项目作为AWS解决方案库的复杂示例,部署过程涉及多个AWS服务的配置和Kubernetes资源的部署。建议您参考GitHub仓库根目录的'README.md'中的“Quick Start Guide”和其指向的“Detailed Installation Guide”链接,以获取最完整和精确的部署指令。以下是核心步骤的概括:

  1. AWS环境准备: 确保您已配置AWS CLI,并且拥有管理Amazon EKS、ECR、CloudFormation等AWS服务的相应权限。
  2. Kubernetes工具安装: 安装并配置'kubectl',使其能够访问您的目标AWS区域的EKS集群。
  3. Docker环境: 确保Docker已安装并正在运行,这对于构建和推送容器镜像至关重要。
  4. EKS集群部署: 按照AWS官方指南,部署一个生产就绪的Amazon EKS集群,并配置Karpenter等自动扩缩容组件。
  5. 模型托管与网关: 部署分布式模型服务(如Ray Serve, vLLM)和统一的LLM API网关(如LiteLLM Proxy)。
  6. 可观测性集成: 部署Langfuse等服务进行LLM交互的可观测性监控。
  7. MCP服务器部署: 将Tavily Web搜索MCP服务器和文件系统MCP服务器作为独立的Kubernetes服务部署到EKS集群中。
  8. 代理AI应用部署: 部署基于Strands SDK构建的代理AI应用,并配置其连接到上述MCP服务器。
  9. 依赖配置: 配置必要的API密钥(如Tavily API Key、Hugging Face Token等)和环境变量,通常通过Kubernetes ConfigMap和Secrets进行管理。

服务器配置

MCP客户端(例如本仓库中的Strands SDK代理应用)需要配置MCP服务器的连接信息才能与其建立通信。以下是两个MCP服务器的典型配置参数,它们会以JSON格式或环境变量的形式提供给客户端:

  • Tavily Web搜索MCP服务器的配置示例:

    {
      "server_name": "Tavily Web Search Server",
      "command": "python",
      "args": ["src/mcp_servers/tavily_search_server.py"],
      "transport": "streamable-http",
      "port": 8001,
      "description": "提供实时Web搜索和新闻搜索工具。此服务依赖于'TAVILY_API_KEY'环境变量,该变量需提前配置在服务器运行环境中。"
    }

    参数说明:

    • 'server_name': MCP服务器的唯一标识名称。
    • 'command': 启动MCP服务器进程的执行命令(例如,在Python环境中运行脚本)。
    • 'args': 传递给'command'的命令行参数,此处是MCP服务器脚本的相对路径。
    • 'transport': 服务器与客户端通信使用的传输协议,这里采用“streamable-http”,通常通过HTTP或WebSocket承载JSON-RPC消息。
    • 'port': MCP服务器监听传入请求的网络端口。
    • 'description': 服务器功能的简要描述及配置注意事项。
  • 文件系统MCP服务器的配置示例:

    {
      "server_name": "Filesystem Server",
      "command": "python",
      "args": ["src/mcp_servers/mcp_filesystem_server.py"],
      "transport": "streamable-http",
      "port": 8001,
      "description": "提供对本地文件系统进行读、写、列出目录等操作的工具。此服务不依赖额外的API密钥。"
    }

    参数说明:

    • 参数含义与Tavily服务器类似。'args'中指向文件系统服务器脚本的路径。
    • 请注意:如果两个MCP服务器部署在同一主机上,且都使用默认的8001端口,会导致端口冲突。在实际部署中,应确保为它们配置不同的端口或使用Kubernetes等容器编排工具进行端口管理。

在实际运行时,这些配置信息会通过环境变量(例如,'TAVILY_MCP_SERVICE_URL'在'src/config.py'中引用)、Kubernetes ConfigMap或直接代码配置的形式提供给MCP客户端。

基本使用方法

一旦MCP服务器成功部署并能够被Kubernetes服务发现机制访问,Agentic AI应用(例如,本仓库中'agentic-apps/strandsdk_agentic_rag_opensearch/src/main.py'里的'SupervisorAgent')会自动发现并连接这些MCP工具。

用户只需通过自然语言与代理AI进行交互,代理AI会根据任务需求智能地调用相应的MCP工具:

  • Web搜索场景: 当用户提出“今天有什么新闻?”或“最新的AI进展是什么?”等时间敏感或知识库外的问题时,代理AI会调用Tavily Web搜索MCP服务器提供的'web_search'或'news_search'工具来获取实时信息。
  • 文件操作场景: 当用户指示“把这个报告总结保存到文件里”时,代理AI会调用文件系统MCP服务器提供的'file_write'工具,将生成的内容保存到服务器的指定输出目录。

整个过程对最终用户来说是透明的,代理AI在后台完成了工具的发现、调用和结果集成。

信息

分类

AI与计算