1. 项目概述打造你的个人AI助手每月成本仅需一杯咖啡钱如果你和我一样对AI助手充满热情但又对动辄每月几十上百美元的运行成本望而却步那么这个项目绝对值得你花十分钟了解一下。tverney/openclaw-agentcore-personal是一个基于 AWS 云服务的个人版 OpenClaw AI 助手部署方案它巧妙地利用了 AWS 最新的AgentCore Runtime技术将传统的“7x24小时运行”模式转变为“按需付费”的服务器无感知模式。简单来说你的 AI 助手在不和你聊天时就像被“冻”起来一样不产生任何计算费用。根据我的实测包含一个基础的 Discord 聊天机器人、完整的 AI 推理能力和数据持久化存储整套基础设施的月成本可以稳定控制在9到15美元之间如果选择 Telegram 或 WhatsApp 等 Webhook 方式接入成本甚至可以降到1-2美元。这对于个人开发者、技术爱好者或者只是想拥有一个私有、可定制 AI 伙伴的用户来说是一个极具性价比的解决方案。这个项目本质上是一个精心编排的 AWS CloudFormation 模板集合它帮你自动化完成了从容器构建、权限配置、服务部署到监控告警的所有复杂步骤。你不需要是 AWS 专家只要跟着步骤操作就能在云端拥有一个功能强大、私密且成本可控的 AI 助手。它原生支持通过 Discord、WhatsApp、Telegram 或 Slack 与你对话并预装了天气查询、笔记提醒、股票追踪、足球比分等超过30项实用技能。接下来我将带你深入拆解这个项目的架构设计、部署细节以及我在实操中积累的避坑经验。2. 核心架构与成本优势解析2.1 为什么选择 AgentCore Runtime从“常驻”到“冻结”的范式转变传统的 AI 助手部署无论是跑在 EC2 虚拟机上还是 Lightsail 托管实例中核心问题在于“闲置成本”。即使你一天只和它对话几次服务器为了保持响应能力也必须24小时不间断运行这导致了大量的资源浪费和费用支出。原项目的 README 中给出了对比一个标准的 EC2 部署月成本约80美元Lightsail 方案约24美元。AgentCore Runtime是 AWS Bedrock 的一项托管服务它专门为运行 AI 智能体Agent而设计。其革命性在于“状态冻结”机制按需激活当你的聊天机器人如 Discord Bot收到一条消息时它会通过 API 调用唤醒 AgentCore 中的 OpenClaw 容器。执行推理容器瞬间启动加载上下文从 S3 恢复会话记忆调用 Bedrock 大模型进行推理生成回复。状态保存与冻结完成响应后容器会将最新的会话状态和记忆写回 S3然后立即进入“冻结”状态。在冻结期间你不为容器占用的计算资源付费只为存储其镜像的 ECR 和会话数据的 S3 支付极低的存储费用。这种模式完美契合了个人助手“低频次、高突发”的使用特点。我自己的助手每天唤醒次数不超过50次每次推理时间在2-5秒月计算成本几乎可以忽略不计。这才是将“Serverless”无服务器理念真正贯彻到 AI 应用层的体现。注意AgentCore Runtime 本身有最低计费时长例如不足1分钟按1分钟计但对于单次对话来说这依然比维持一个全天候的 EC2 实例便宜得多。关键在于你的使用模式是否真的是“间歇性”的。2.2 整体架构拆解各司其职的云服务交响乐项目的架构图清晰地展示了各个 AWS 服务如何协同工作。我们可以将其分为几个核心模块接入层这是你与 AI 交互的入口。项目默认提供了一个运行在t4g.nano EC2 实例上的 Discord 机器人。选择 t4g.nano基于 ARM Graviton2是因为它成本极低约每月4美元且足以处理 Discord 的 WebSocket 连接和简单的消息转发。如果你使用 WhatsApp 或 Telegram它们基于 Webhook可以直接通过 API Gateway 触发 Lambda再由 Lambda 调用 AgentCore从而完全省去 EC2 成本。这是成本优化的一大关键点。计算与推理层核心是AgentCore Runtime它托管着运行 OpenClaw 的 Docker 容器。旁边是Amazon Bedrock提供大模型推理能力。两者通过 IAM 角色进行安全授权无需管理繁琐的 API 密钥。数据与状态层Amazon S3用于持久化存储 OpenClaw 的会话历史、工作空间文件以及记忆文件MEMORY.md。这是实现“状态冻结”后能恢复对话上下文的关键。AWS Secrets ManagerAWS KMS所有敏感信息如 Discord Bot Token、第三方服务 API Key都加密存储在 Secrets Manager 中。KMS 客户主密钥CMK为这些数据提供额外的加密层确保即使有服务被误配置数据也不会泄露。调度与运维层Amazon EventBridge Scheduler由于容器会被冻结在容器内部运行cron定时任务是不可靠的。因此项目使用 EventBridge 从外部定时触发一个AWS Lambda函数再由该函数去唤醒 AgentCore 执行定时任务例如每天早上9点的天气提醒。AWS CloudWatchSNS监控堆栈的运行状态和成本。通过 Cost Explorer 标签和预算告警你可以在费用达到预设阈值如80%时收到邮件或短信通知有效避免意外账单。这种模块化、服务化的设计不仅降低了成本也提高了系统的可靠性和安全性。每个组件职责单一并通过 IAM 实现最小权限原则。2.3 深入成本分析你的钱具体花在了哪里很多云项目只说“大概成本”这往往导致后续账单 surprises。这个项目的可贵之处在于给出了非常透明的成本细分。我们来算一笔明细账以美国东部俄亥俄us-east-2 区域为例EC2 t4g.nano (Discord Bot)按需实例约 $0.0042/小时每月约$3.02。这是最大头的固定支出。EC2 弹性公网 IP每个关联的 IPv4 地址每月$3.60。这是为了让你的 Discord Bot 有固定的公网 IP 与 Discord 服务器通信。注意即使实例停止只要 IP 未被释放此费用仍会产生。AWS KMS 自定义密钥 (CMK)每月每个密钥$1.00。用于加密 Secrets Manager 和 S3 中的数据。Amazon ECR 存储存储 Docker 镜像每月每 GB 约 $0.10。一个压缩后的 OpenClaw 镜像约 1-2 GB每月成本约$0.10 - $0.20。Amazon S3 存储存储会话和记忆标准存储每月每 GB 约 $0.023。个人使用产生的数据量极小 1 GB每月成本可忽略不计$0.05。Secrets Manager每个秘密每月 $0.40。项目大约需要3-4个秘密成本约$1.20 - $1.60。AgentCore Runtime 执行费用这是变量取决于调用次数和持续时间。按每天50次调用每次执行1分钟计算每月成本约$0.50 - $1.00。Bedrock 模型推理费用这是最大的变量取决于你的使用频率和选择的模型。以默认的 Claude Haiku 4.5 为例输入 $1/百万 tokens输出 $5/百万 tokens。假设你每月消耗 50 万 tokens成本约为$3.00。加总固定基础设施成本 ≈ $3.02 (EC2) $3.60 (IP) $1.00 (KMS) ~$1.50 (SecretsECRS3) ≈$9.12。加上模型推理费用总成本很容易控制在$12 - $18之间。如果弃用 Discord 改用 Telegram省去 EC2 和 EIP固定成本骤降至$2.70左右性价比惊人。3. 从零到一的完整部署实操指南3.1 前期准备账户、权限与本地环境在运行那个神奇的deploy.sh脚本之前有几项准备工作必须到位否则部署过程会像缺少零件的拼图一样无法进行。AWS 账户与 CLI 配置 首先你需要一个 AWS 账户。强烈建议在账户内创建一个具有管理员权限的 IAM 用户仅用于编程访问而不是直接使用根账户。然后在本地安装并配置 AWS CLIaws configure依次输入你的 Access Key ID, Secret Access Key默认区域建议选择us-east-2或us-west-2这些区域 Bedrock 服务较全输出格式选择json。启用 Bedrock 模型访问 这是最容易忽略的一步。登录 AWS 控制台进入Amazon Bedrock服务在左侧菜单找到“模型访问”Model access。你需要在这里请求启用你计划使用的模型。对于这个项目至少需要启用Claude Haiku 4.5。点击“修改模型访问权限”找到 Anthropic Claude 下的 Haiku勾选并保存。审批通常是即时的。创建 Discord 机器人可选但推荐 如果你打算使用 Discord 作为交互界面需要先在 Discord 开发者门户创建一个应用和机器人。访问 Discord Developer Portal 点击 “New Application”。为应用命名然后进入 “Bot” 标签页点击 “Add Bot”。在 Bot 设置页面重置令牌Reset Token并立即复制保存这个DISCORD_TOKEN。这个令牌只会显示一次丢失后需要重置。在 “Privileged Gateway Intents” 下开启MESSAGE CONTENT INTENT。这是为了让机器人能读取消息内容。最后在 “OAuth2” - “URL Generator” 里勾选bot和applications.commands权限并在 Bot Permissions 里勾选 “Send Messages”, “Read Message History” 等基础权限。生成一个邀请链接用你的 Discord 账号打开这个链接将机器人邀请到你的服务器中。本地开发环境 项目需要本地安装 Docker 用于构建容器镜像以及 Go 1.21 用于编译一些 CLI 工具。确保你的机器上已经安装docker --version go version3.2 配置文件详解定制你的AI助手克隆项目仓库后核心的配置都在agent-container/.env文件中。复制示例文件并开始编辑cp agent-container/.env.example agent-container/.env这个.env文件是项目的神经中枢以下是我认为最关键的几个配置项及其背后的考量BEDROCK_MODEL_ID这是你 AI 助手的大脑。默认是us.anthropic.claude-3-5-haiku-20241022-v2:0。开头的us.表示使用跨区域推理配置文件能自动路由到最优区域提升可用性和吞吐量。你可以根据成本或性能需求更换为us.anthropic.claude-3-5-sonnet-20241022-v2:0更强更贵或us.amazon.nova-lite-v1:0更便宜。DISCORD_BOT_TOKEN填入你上一步从 Discord 开发者门户获取的令牌。安全警告这个值最终会被存入 AWS Secrets Manager但确保你的本地.env文件不被提交到 Git 仓库它已在.gitignore中。OPENCLAW_WORKSPACE_DIR和OPENCLAW_SESSION_DIR定义了 OpenClaw 在容器内的工作空间和会话目录路径。它们会映射到 S3实现持久化。保持默认即可。MEMORY_CONSOLIDATION_CRON这是项目一个非常聪明的设计——记忆合并守护进程的调度规则。默认*/30 * * * *表示每30分钟运行一次。这个进程会分析最近的对话提取关键事实、用户偏好和决策去重并修剪旧的记忆保持MEMORY.md文件精简且相关。这对于长期运行的 AI 助手维持“记忆力”至关重要。WEATHER_API_KEY如果你希望使用天气技能需要去 OpenWeatherMap 等网站申请一个免费 API Key 并填入。实操心得在首次部署前我建议先使用默认的 Claude Haiku 模型。它速度快、成本低足以应对日常对话和任务。等到一切运行稳定后再根据特定需求如复杂编程问题切换到 Sonnet。同时务必检查community-skills.json文件这里列出了构建时会从 ClawHub 自动安装的社区技能。你可以按需删减避免安装不必要的依赖。3.3 一键部署脚本背后的魔法准备好一切后部署过程简单得令人惊讶bash scripts/deploy.sh这个脚本是一个编排大师它按顺序执行了以下关键操作理解它们有助于你在出现问题时进行排查模板验证首先使用aws cloudformation validate-template检查主 CloudFormation 模板openclaw-simplified.yaml的语法是否正确。Docker 镜像构建与推送进入agent-container目录根据Dockerfile构建包含 OpenClaw 及其所有依赖的 Docker 镜像。脚本会在你的 AWS 账户中创建一个 Amazon ECR弹性容器仓库私有库如果不存在。将本地构建好的镜像打上标签并推送到 ECR。注意镜像大小约 1.5GB上传速度取决于你的网络。CloudFormation 堆栈部署/更新使用aws cloudformation deploy命令将模板中定义的所有资源IAM角色、S3桶、KMS密钥、Secrets Manager秘密、EventBridge规则、Lambda函数、AgentCore Runtime等在 AWS 上创建或更新。这个过程会持续5-10分钟你可以在 AWS 控制台的 CloudFormation 页面查看事件进度。Discord 机器人部署堆栈创建成功后脚本会获取新创建的 EC2 实例 ID。通过 AWS Systems Manager (SSM) 的send-command功能远程在 EC2 实例上执行命令安装 Python 依赖下载 Discord 机器人代码配置 systemd 服务并启动。这样Discord 机器人就作为一个守护进程运行在 EC2 上了。部署中可能遇到的坑与解决错误The runtime role arn:aws:iam::... is invalid or not authorized这通常是 IAM 角色权限问题。CloudFormation 模板已经配置了正确的信任关系但有时 AWS 服务传播有延迟。等待2-3分钟重试或去 IAM 控制台检查名为OpenClawAgentCoreRuntimeRole-...的角色确保其信任实体包含bedrock-agentcore.amazonaws.com。错误Model ... is not accessible说明你在 Bedrock 的“模型访问”页面没有启用对应的模型。返回控制台启用即可。EC2 实例启动失败状态检查不通过可能是 t4g.nano 实例在你选择的区域配额不足。t4g 是 ARM 实例某些区域默认配额可能为0。你需要到 AWS Service Quotas 控制台请求增加Running On-Demand All G instances在特定区域的配额。或者在openclaw-simplified.yaml模板中将实例类型改为t3.nanox86可能稍贵。Discord 机器人上线但无响应首先通过 SSM 连接 EC2 查看日志aws ssm send-command --instance-id i-xxx --document-name AWS-RunShellScript --parameters commands[journalctl -u discord-bot -n 50 -f]。常见原因是 DISCORD_TOKEN 未正确存入 Secrets Manager或者 Bot 缺少MESSAGE CONTENT INTENT权限。当脚本运行完毕看到Stack creation/update completed successfully的输出时恭喜你你的个人 AI 助手云端堡垒已经建成。4. 使用、管理与高级配置4.1 与你的助手对话多种交互方式部署成功后你有多种方式与 OpenClaw 交互1. 通过 Discord默认 这是最直观的方式。只需在你的 Discord 服务器里 你的机器人并发送消息。机器人收到消息后EC2 上的 Python 脚本会通过boto3调用bedrock-agentcore.invoke-agent-runtimeAPI将消息转发给“冻结”的 AgentCore 容器。容器被唤醒处理请求返回回复再由机器人发送回 Discord 频道。2. 通过 OpenClaw Web UI支持 WhatsApp/Telegram/Slack OpenClaw 本身自带一个 Web 管理界面并集成了多个消息平台的插件。你可以通过SSM 端口转发安全地访问这个界面# 获取你的 EC2 实例ID INSTANCE_ID$(aws cloudformation describe-stacks --stack-name openclaw-personal --query Stacks[0].Outputs[?OutputKeyDiscordBotInstanceId].OutputValue --output text --region us-east-2) # 启动端口转发 (将本地端口8080转发到实例的8080端口) aws ssm start-session --target $INSTANCE_ID --region us-east-2 --document-name AWS-StartPortForwardingSession --parameters portNumber[\8080\], localPortNumber[\8080\]然后在浏览器访问http://localhost:8080。在 Web UI 中你可以配置 WhatsApp、Telegram 或 Slack 的 webhook从而实现无需 EC2 的完全 Serverless 接入方案成本更低。3. 直接调用 AgentCore Runtime API 对于开发和调试你可以直接使用 AWS CLI 测试你的助手RUNTIME_ARN$(aws cloudformation describe-stacks --stack-name openclaw-personal --query Stacks[0].Outputs[?OutputKeyAgentCoreRuntimeArn].OutputValue --output text --region us-east-2) aws bedrock-agentcore invoke-agent-runtime \ --agent-runtime-arn $RUNTIME_ARN \ --payload $(echo -n {message: Hello, who are you?} | base64) \ /tmp/response.json --region us-east-2 cat /tmp/response.json4.2 技能扩展让你的助手更强大OpenClaw 的核心能力来自于其技能Skills。项目预置了天气、笔记、股票等自定义技能并通过community-skills.json在构建时自动从 ClawHub 安装更多技能。添加自定义技能 如果你想自己开发一个技能比如查询加密货币价格可以遵循以下步骤在agent-container/skills/目录下创建一个新的 Python 文件例如crypto_price.py。按照 OpenClaw 技能框架编写代码主要包含一个处理函数和技能描述。在agent-container/openclaw.json配置文件的skills部分添加对新技能模块的引用。重新构建并部署容器镜像。你可以使用项目提供的快速重部署脚本bash scripts/quick-redeploy.sh。这个脚本只会重建 Docker 镜像并更新 CloudFormation 堆栈中的容器定义比全量部署快得多。管理社区技能community-skills.json文件是一个技能清单。例如[ clawhub://skill/WebSearch, clawhub://skill/Calendar, clawhub://skill/FileOperations ]在 Docker 构建阶段install-community-skills.sh脚本会读取这个列表并通过 OpenClaw 的 CLI 自动安装。你可以随时修改这个文件然后重新运行quick-redeploy.sh来更新技能集。4.3 运维与监控保持助手健康运行一个稳定的服务离不开监控。查看日志Discord Bot 日志通过 SSM 在 EC2 上查看journalctl -u discord-bot -n 100 -f。AgentCore Runtime 日志这些日志默认发送到 CloudWatch Logs。在 AWS 控制台进入 CloudWatch 日志组查找名为/aws/bedrock/agentcore/runtimes/OpenClawRuntime-...的日志组。这里包含了容器的启动、调用和错误信息。Lambda 调度器日志同样在 CloudWatch Logs查找/aws/lambda/OpenClawScheduler-...日志组查看定时任务是否被正常触发。成本监控与告警 项目模板已经创建了一个基于标签的 AWS 预算。在 AWS 控制台进入“成本管理” “预算”你会看到一个名为OpenClawMonthlyBudget的预算。它监控所有带有Projectopenclaw-personal标签的资源的成本。当实际或预测费用达到你设定阈值的80%和100%时它会通过 SNS 向你发送通知你需要确认订阅发送到邮箱的确认链接。强烈建议你根据自身情况调整预算金额默认可能是100美元。会话与记忆持久化 所有的会话历史和记忆都保存在 S3 桶中。桶名可以在 CloudFormation 堆栈的“输出”选项卡中找到。你可以使用 AWS CLI 或控制台浏览这些文件。MEMORY.md文件记录了 AI 助手从对话中学习到的关于你的长期信息。定期查看这个文件可以了解助手“记住”了什么必要时可以进行手动编辑或清理。5. 故障排查与经验总结5.1 常见问题速查表在数周的部署和使用中我遇到了不少典型问题这里汇总成表方便你快速定位问题现象可能原因排查步骤与解决方案Discord 机器人显示在线但不回复消息。1. Bot 缺少MESSAGE CONTENT INTENT权限。2. EC2 实例安全组未允许出站流量。3. Secrets Manager 中的 Token 配置错误。1. 去 Discord 开发者门户检查 Bot 的 Privileged Gateway Intents。2. 检查 EC2 安全组确保有允许所有出站流量的规则默认应该有。3. 通过 SSM 登录 EC2查看服务日志journalctl -u discord-bot检查是否有 Token 错误。直接调用 AgentCore API 返回InvocationTimeoutException。1. 容器首次启动冷启动时间过长下载层。2. Bedrock 模型响应超时。3. Runtime IAM 角色权限不足。1. 首次调用耐心等待可能需60秒以上。后续调用会快很多。2. 检查 CloudWatch Logs 中 Runtime 的日志看是否有模型调用错误。3. 验证 Runtime 的 IAM 角色是否附加了AmazonBedrockFullAccess策略或必要的 Bedrock 调用权限。定时提醒任务没有执行。1. EventBridge Scheduler 规则未启用。2. Lambda 函数执行失败。3. AgentCore 调用在定时任务上下文中失败。1. 在 EventBridge Scheduler 控制台检查规则状态。2. 查看 Lambda 函数的 CloudWatch 日志看错误信息。3. 检查 Lambda 函数的 IAM 角色是否有调用bedrock-agentcore:InvokeAgentRuntime的权限。部署脚本在docker push步骤失败提示权限拒绝。1. 本地 AWS CLI 凭证过期或权限不足。2. 未对 ECR 仓库进行docker login。1. 运行aws sts get-caller-identity确认当前身份。2. 脚本应自动处理 ECR 登录如果失败手动执行aws ecr get-login-password --region模型响应内容空洞或不符合预期。1..env中BEDROCK_MODEL_ID配置错误。2. OpenClaw 的openclaw.json配置中系统提示词prompt或参数需要调整。1. 确认模型 ID 正确且已在 Bedrock 中启用访问。2. 查阅 OpenClaw 文档调整agent-container/openclaw.json中的model配置部分如temperature,max_tokens等。5.2 安全加固建议虽然模板已经采用了较好的安全实践但作为个人项目负责人你还可以考虑以下几点缩小 EC2 安全组规则模板中 EC2 的安全组可能允许了过于宽松的入站规则如 SSH 22端口来自任意IP。建议在 CloudFormation 模板中将 SSH 入口规则的源IP修改为你自己的公网 IP CIDR例如YourHomeIP/32。使用 IAM 条件限制可以为 AgentCore Runtime 的 IAM 角色添加条件策略限制其只能调用特定的 Bedrock 模型 ID实现更细粒度的权限控制。定期轮换 Secrets对于 Discord Token 等密钥可以定期在 Discord 开发者门户重置并在 Secrets Manager 中更新。可以考虑创建一个 Lambda 函数结合 EventBridge 规则每月自动执行此操作需妥善保管原始 Token 的备份。启用 S3 桶版本控制与生命周期策略为存储会话的 S3 桶启用版本控制防止意外覆盖。同时可以设置生命周期策略自动将30天前的旧会话文件转移到更便宜的 S3 Glacier 存储层或定期清理过于久远的会话以节省成本。5.3 成本优化进阶技巧在基础方案上还有几个压榨成本的技巧弃用 Discord拥抱 Telegram/WhatsApp这是降低固定成本最有效的一步。移除 EC2 实例和弹性 IP每月立省约7美元。你需要花一些时间在 OpenClaw Web UI 中配置 Telegram Bot 或 WhatsApp Business API 的 webhook。虽然初始设置稍复杂但长期来看性价比最高。使用 Spot 实例运行 Discord Bot如果你坚持用 Discord可以考虑将 t4g.nano 改为 Spot 实例。Spot 实例价格可能比按需实例低70-90%。缺点是可能被中断但对于一个个人聊天机器人来说偶尔中断几分钟或许可以接受。你需要在 CloudFormation 模板中修改InstanceMarketOptions。调整记忆合并频率MEMORY_CONSOLIDATION_CRON默认每30分钟运行一次。如果你对话频率很低可以调整为每小时0 * * * *或每天一次。这能减少不必要的 AgentCore 唤醒节省少量计算费用。选择更经济的模型对于日常闲聊、简单问答可以尝试us.amazon.nova-lite-v1:0。它的输入输出成本远低于 Claude Haiku虽然能力稍弱但对于很多场景已经足够。你可以在.env文件中轻松切换并立即通过quick-redeploy.sh生效。5.4 个人使用体会与最终建议经过一段时间的部署和使用这个项目给我的最大感受是它真正将前沿的云原生 Serverless 技术与个人 AI 应用的需求结合了起来。你不再需要操心服务器维护、系统更新、安全补丁只需关注你和 AI 助手之间的对话本身。对于想要入手的同学我的建议是循序渐进先严格按照指南使用 Discord 方案完成首次部署。这是最直接、反馈最快的路径。成功运行起来建立信心。深入探索通过 SSM 端口转发访问 Web UI熟悉 OpenClaw 的管理界面尝试启用一两个其他消息插件。按需定制根据你的使用习惯调整技能列表、模型参数甚至开发一两个专属技能。这才是拥有一个“个人”助手的乐趣所在。关注成本部署后的头两周每天去 Cost Explorer 看看账单。了解你的使用模式产生的真实费用然后利用上面提到的优化技巧进行调整。最后别忘了这是一个开源项目。如果你发现了 bug或者有更好的改进想法可以去 GitHub 仓库提交 Issue 或 Pull Request。技术的乐趣在于分享与共建。现在就去启动你的deploy.sh开启属于你的低成本、高性能个人 AI 助手之旅吧。