项目简介
该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”链接,以获取最完整和精确的部署指令。以下是核心步骤的概括:
- AWS环境准备: 确保您已配置AWS CLI,并且拥有管理Amazon EKS、ECR、CloudFormation等AWS服务的相应权限。
- Kubernetes工具安装: 安装并配置'kubectl',使其能够访问您的目标AWS区域的EKS集群。
- Docker环境: 确保Docker已安装并正在运行,这对于构建和推送容器镜像至关重要。
- EKS集群部署: 按照AWS官方指南,部署一个生产就绪的Amazon EKS集群,并配置Karpenter等自动扩缩容组件。
- 模型托管与网关: 部署分布式模型服务(如Ray Serve, vLLM)和统一的LLM API网关(如LiteLLM Proxy)。
- 可观测性集成: 部署Langfuse等服务进行LLM交互的可观测性监控。
- MCP服务器部署: 将Tavily Web搜索MCP服务器和文件系统MCP服务器作为独立的Kubernetes服务部署到EKS集群中。
- 代理AI应用部署: 部署基于Strands SDK构建的代理AI应用,并配置其连接到上述MCP服务器。
- 依赖配置: 配置必要的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与计算