项目简介

本项目是一个示例应用,展示了如何将Amazon Bedrock上的基础模型与Chainlit前端以及一个自定义的MCP(模型上下文协议)服务器集成,以创建一个具有工具增强功能的交互式聊天界面。该MCP服务器提供基础的数学计算能力,例如加、减、乘、除,供LLM客户端通过标准化的MCP协议调用。

主要功能点

  • Amazon Bedrock 集成: 使用Amazon Bedrock上的Anthropic Claude 3.7 Sonnet模型作为LLM。
  • Chainlit 交互界面: 提供友好的Web聊天界面,方便用户与LLM进行对话。
  • MCP 数学工具服务器: 实现了一个简单的MCP服务器,提供加、减、乘、除四种数学运算工具。
  • 工具调用: LLM可以通过MCP协议调用数学工具服务器提供的工具进行数学计算。
  • LangGraph ReAct Agent: 使用LangGraph构建ReAct(Reasoning and Acting)代理,智能地决定何时以及如何使用数学工具。
  • 流式响应: 支持流式响应,提供更流畅的用户体验。

安装步骤

  1. 克隆仓库

    git clone https://github.com/aws-samples/sample-bedrock-mcp.git
    cd sample-bedrock-mcp
  2. 创建虚拟环境并安装依赖

    uv sync --all-groups

    确保已安装 UV 包管理器 (可以使用 'pip install uv' 安装)。

  3. 配置 AWS 凭证 如果尚未配置 AWS CLI,请运行 'aws configure' 并配置您的 AWS 凭证和区域 (需要具有Bedrock访问权限的账户)。

  4. 构建项目

    uv build

    构建完成后,会在 'dist/' 目录下生成 wheel 文件 'sample_bedrock_chainlit_mcp-0.1.0-py3-none-any.whl',这个 wheel 文件将作为 MCP 服务器运行。

服务器配置

MCP 服务器需要通过 MCP 客户端(本例中为 Chainlit 应用)进行配置连接。在 Chainlit 聊天界面中,点击输入框下方的插头图标,打开 MCP 连接对话框,填写以下信息:

{
  "server name": "math",  // MCP 服务器名称,可以自定义,例如 "math"
  "command": "uvx dist/sample_bedrock_chainlit_mcp-0.1.0-py3-none-any.whl", // MCP 服务器启动命令,指向构建生成的 wheel 文件
  "type": "default"   // 连接类型,默认为 stdio
}
  • server name (服务器名称): 为 MCP 连接指定一个名称,例如 "math",在Chainlit界面中用于标识该连接。
  • command (命令): MCP 服务器的启动命令。这里使用 'uvx' 运行构建生成的 wheel 文件。'uvx' 是 'uv' 包管理器提供的命令运行器,用于执行 wheel 文件。'dist/sample_bedrock_chainlit_mcp-0.1.0-py3-none-any.whl' 是上一步构建生成的 MCP 服务器 wheel 文件路径。
  • type (类型): MCP 连接类型,默认为 'default' (stdio),表示使用标准输入/输出流进行通信。

基本使用方法

  1. 启动 Chainlit 应用 打开终端,导航到项目根目录,运行以下命令启动 Chainlit 应用:

    chainlit run src/ui/app.py

    Chainlit 应用启动后,通常会在浏览器中打开一个 Web 界面(默认地址为 http://localhost:8000)。

  2. 连接 MCP 服务器 在 Chainlit Web 界面中,按照 "服务器配置" 步骤配置并连接 MCP 服务器。连接成功后,界面会给出提示。

  3. 与 LLM 对话并使用数学工具 在 Chainlit 聊天界面中,您可以向 LLM 提出包含数学问题的对话,例如:

    • "What's (3 + 5) x 12?" ( (3 + 5) 乘以 12 是多少?)
    • "Can you calculate 144 divided by 12?" (你能计算 144 除以 12 吗?)
    • "If I have 7 apples and get 9 more, then give 4 away, how many do I have left?" (如果我有 7 个苹果,又得到 9 个,然后送走 4 个,我还剩下多少个?)

    LLM 会自动判断是否需要使用数学工具,并通过 MCP 服务器调用相应的数学工具进行计算,最终返回结果。

信息

分类

AI与计算