🎵 无服务器MCP聊天机器人演示
一个非常简单的无服务器聊天机器人,使用 快速MCP + AWS基岩.没有身份验证,没有控制台设置,只有代码。非常适合演示!
询问卢克的黑胶唱片收藏,并观察机器人智能地决定何时查询数据。 真正的人工智能 行动起来! 🤖

______________________________________________________________________
🎯 为什么是这个Demo?
非常适合 AWS用户组 和 大学演讲 因为它是:
✅ 简单 -在2分钟内部署 ./deploy.sh\ ✅ 无控制台设置 -一切都在代码中,无需点击AWS控制台\ ✅ AI 代理 -观察机器人决定何时使用工具\ ✅ 真正的MCP -实现模型上下文协议标准\ ✅ 便宜的 -每月约15美元,主要是基岩成本\ ✅ 教育的 -干净的代码,大量注释
什么是“代理”?
传统的机器人总是做同样的事情。 代理AI决定:
- 问“我有什么格里姆斯记录?”→ ✅ 使用工具,查询CSV
- 问“什么是黑胶唱片?”→ ❌ 没有工具,答案来自知识
机器人 选择 基于这个问题。这是代理行为!
______________________________________________________________________
🏗️ 架构(超级简单)
Browser API Gateway Lambda Bedrock
(S3 HTML) → (Public) → (FastMCP) → (Claude)
↓
S3 CSV Data就是这样! 没有身份验证,没有数据库,只是:
- S3托管网站
- API网关路由请求
- Lambda运行FastMCP+基岩
- CSV文件包含数据
为什么选择FastMCP?
快速MCP =Python的模型上下文协议实现
# Define tools with a decorator - SO SIMPLE!
@mcp.tool()
def query_vinyl_collection(query_type: str, search_term: str) -> str:
"""Query the vinyl collection"""
return results就是这样! FastMCP手柄:
- ✅ 工具模式生成
- ✅ MCP协议合规性
- ✅ 基岩格式转换
- ✅ 工具执行
与手动:编写JSON模式,处理工具路由,解析响应\ vs.代理核心:无需控制台设置,一切都在代码中\ vs.朗链:更轻,专注于MCP标准
阅读 框架_GUIDE.md 详细比较!
______________________________________________________________________
🚀 快速入门(说真的,这很容易)
先决条件
- 已配置CLI的AWS帐户(
aws configure) - Terraform已安装
- Python 3.12+
- 基岩通道(允许克劳德进入您所在的地区)
部署一切
./deploy.sh就是这样! 脚本:
- 构建Lambda包
- 部署基础设施
- 配置前端
- 上传到S3
- 显示URL
访问URL并开始聊天! 🎉
手动步骤(如果你想控制)
# 1. Build Lambda
cd lambda && ./build.sh && cd ..
# 2. Deploy infrastructure
cd infra/terraform
terraform init
terraform apply
# 3. Get API URL
terraform output api_chat_url
# 4. Update frontend/index.html with API URL
# 5. Upload frontend
BUCKET=$(terraform output -raw frontend_bucket_name)
aws s3 cp ../../frontend/index.html s3://$BUCKET/
# 6. Get website URL
terraform output frontend_website_url______________________________________________________________________
📁 项目结构
serverless-mcp-chatbot-demo/
├── lambda/
│ ├── handler.py # FastMCP + Bedrock integration
│ ├── requirements.txt # Just boto3 + fastmcp!
│ └── build.sh # Build deployment package
├── infra/terraform/
│ ├── main.tf # ALL infrastructure (simple!)
│ ├── variables.tf # Configuration
│ └── outputs.tf # URLs and next steps
├── frontend/
│ └── index.html # Single-file web app
├── data/
│ └── discogs.csv # Vinyl collection data
├── FRAMEWORK_GUIDE.md # FastMCP vs alternatives
├── DEPLOYMENT_CHECKLIST.md # Step-by-step guide
└── README.md # You are here!没有身份验证代码,没有复杂的状态管理,没有微服务——只有工作的AI!
______________________________________________________________________
💬 如何使用
示例提示
| 提示 | 发生了什么 | 使用了工具? |
|---|---|---|
| “我拥有哪些Grimes专辑?” | 查询CSV,返回结果 | ✅ 是的 |
| “显示4AD标签的乙烯基” | 按标签筛选 | ✅ 是的 |
| “我在2024年添加了哪些记录?” | 按年份筛选 | ✅ 是的 |
| “我有Kraftwerk吗?” | 搜索艺术家 | ✅ 是的 |
| “什么是黑胶唱片?” | 来自知识的回答 | ❌ 没有 |
| “MCP是如何工作的?” | 解释概念 | ❌ 没有 |
注意 🔧 使用FastMCP工具 调用工具时使用徽章!
30秒演示脚本
“这个聊天机器人演示了使用FastMCP和AWS Bedrock的代理人工智能。当我询问我的黑胶唱片收藏时”\[键入“我有什么Grimes记录?”\]“人工智能决定查询数据-看到绿色徽章?但如果我问”\[键入”什么是黑胶唱片?\]“它只是根据知识回答。人工智能选择何时使用工具。所有无服务器,每月花费15美元,真正的MCP协议,一切都在代码中-不需要控制台设置!”
______________________________________________________________________
🔧 它是如何工作的(引擎盖下)
1.FastMCP工具定义
from mcp.server.fastmcp import FastMCP
# Create MCP server
mcp = FastMCP("vinyl-collection-server")
# Define tool with decorator
@mcp.tool()
def query_vinyl_collection(query_type: str, search_term: str, limit: int = 10) -> str:
"""
Query Luke's vinyl record collection.
Args:
query_type: One of: artist, label, year, title, all
search_term: What to search for
limit: Max results (default 10)
"""
# Download CSV from S3
response = s3_client.get_object(Bucket=DATA_BUCKET, Key='discogs.csv')
records = parse_csv(response['Body'])
# Filter records
matches = filter_records(records, query_type, search_term)
# Return formatted results
return format_results(matches[:limit])2.基岩整合
# Get FastMCP tools in Bedrock format
tools = mcp.list_tools_for_llm(llm_format="bedrock")
# Bedrock decides when to use tools
response = bedrock_client.converse(
modelId="anthropic.claude-3-5-sonnet-20241022-v2:0",
messages=messages,
toolConfig={"tools": tools}
)
# If tool use requested, FastMCP executes it
if response['stopReason'] == 'tool_use':
result = mcp.call_tool(tool_name, tool_input)3.代理循环
- 用户发送消息
- Lambda使用FastMCP工具调用基岩
- 基岩是否使用工具的原因
- 如果是:FastMCP执行工具,将结果发送回基岩
- 基岩综合最终答案
- 响应返回给用户
______________________________________________________________________
💰 成本细分
每月费用(1000次查询):
| 服务 | 成本 | 备注 |
|---|---|---|
| 基岩 | ~15.00美元 | 主要成本(克劳德3.5十四行诗) |
| 拉姆达 | 0.17美元 | 1000次调用,ARM64 |
| 第3页 | $0.02 | 存储+请求 |
| API网关 | 0.01美元 | HTTP API(便宜!) |
| 总计 | ~$15.20 | 🎉 |
最贵的是基岩! 基础设施基本上是免费的。
省钱小贴士
- 使用ARM64 Lambda(已配置)
- 保持对话简短(减少令牌)
- 使用较小的基岩模型进行开发
- 利用AWS免费套餐
______________________________________________________________________
🎨 定制理念
使用您自己的数据
替换 data/discogs.csv:
title,artist,year,genre
"Your","Data","2024","Cool"更新工具逻辑 lambda/handler.py 你完了!
想法:
- 藏书
- 配方数据库
- 电影观看列表
- 口袋妖怪卡
- 植物护理指南
- 任何CSV!
添加更多工具
@mcp.tool()
def get_collection_stats() -> str:
"""Get statistics about the collection"""
# Count records, get averages, etc.
return stats
@mcp.tool()
def recommend_similar(artist: str) -> str:
"""Recommend similar artists"""
# Your logic here
return recommendationsFastMCP会自动将它们提供给Bedrock!
改用DynamoDB
对于较大的数据集:
- 在Terraform中添加DynamoDB表
- 更新工具以查询DynamoDB
- 添加IAM权限
让它成为多用户
添加身份验证(为了简单起见,我们删除了它):
- 将Cognito资源添加回Terraform
- 将JWT授权人添加到API网关
- 将身份验证UI添加到前端
请参阅git历史以了解旧的auth实现!
______________________________________________________________________
🐛 故障排除
“YOUR_API_URL_HERE”错误
修复:更新 CONFIG.API_URL 在 frontend/index.html 带有来自的实际API网关URL terraform output api_chat_url
工具从不触发
修复:更具体地说:“什么 记录 我有格里姆斯的吗?vs“跟我说说格里姆斯”
基岩通道被拒
修复:
- 转到AWS基岩控制台
- 启用模型访问
- 选择克劳德3.5十四行诗
- 等待批准(通常是即时的)
Lambda超时
修复:增加超时时间 infra/terraform/main.tf:
timeout = 120 # Increase from 60CORS错误
修复:使用 http:// 不 https:// 对于S3网站URL(默认情况下不支持HTTPS)
构建失败
修复:
cd lambda
rm -rf package lambda.zip
./build.sh______________________________________________________________________
📚 了解更多
文档
- Lambda自述 -深入了解FastMCP实施
- 框架_GUIDE.md -FastMCP vs LangChain vs AgentCore
- 部署中心_CHECKLIST.md -逐步部署
外部资源
______________________________________________________________________
🎓 教育用途
这个项目是 专为教学而设计:
✅ AWS用户组 -显示无服务器+AI模式\ ✅ 大学课程 -云计算课程\ ✅ 训练营 -动手AI+AWS项目\ ✅ 投资组合 -展示全栈技能
你可以:
- 出席聚会(请出席!)
- 在课堂环境中使用
- 根据您自己的演示进行修改
- 写上你的简历
请:
- 不要用它来抓取数据
- 不要堆积大量的基岩账单(监控成本!)
- 如果你用叉子叉,就要赊账
______________________________________________________________________
🤝 贡献
改进意见:
- \[\]流媒体响应
- \[\]对话历史记录
- \[\]更多示例工具
- \[\]成本优化提示
- \[\]多语言支持
- \[\]Docker本地开发设置
PR欢迎!不过要保持简单——这就是重点! 😄
______________________________________________________________________
📄 许可证
MIT许可证-请参阅 许可证 了解详情。
太长,读不下去了:你想怎么用就怎么用!打造酷炫的东西! 🚀
______________________________________________________________________
🙋 问题?
- 发现bug了吗? 打开一个问题
- 用这个做演讲? 标签我-我很想看看!
- 想合作吗? 伸出手来!
由以下材料制成❤️ 面向AWS+AI社区
现在去部署它,向人们展示代理AI! 🎉
