一个三人客服台,每天回答的全是同一类问题:退款总额、退货窗口、政策条款。团队里没人把服务真正推上过生产环境。他们要的不是"智能",而是一个能信任的闭环——写点小东西,从任何地方都能调用,事后能看清它干了什么,当天就能删干净。
这套流程跑下来,几个数字值得先摆出来:部署耗时1分51秒,其中合成CloudFormation占15.4秒,剩下1分27秒是建栈;一次调用耗时9911毫秒;拆除耗时1分28秒。运行时按使用计费,部署好的Agent闲置时成本为零。
支撑这个用例的,是AgentCore九项能力里的两项,其余七项全部关闭。
- Runtime:把 app/aia_uc01/ 托管为受管端点。构建方式是CodeZip,不做容器化;每个会话分配独立microVM;协议是走 /ping 和 /invocations 的纯HTTP。
- Observability:每次调用向X-Ray发出OpenTelemetry span,通过CloudWatch读取,工具调用因此成为独立span,而不只是日志里的一行文本。
Memory关掉,Agent在轮次之间不留任何东西。Gateway和Identity也关掉,因为客服台暂时没有外部系统要连。部署出的运行时是DEFAULT端点背后的版本1,改JSON重新部署就得到同一端点的版本2——这一层的版本管理就这么简单。
环境要求写得很死:Node.js 20以上(实测22.22.2)、AgentCore CLI 0.31.1、AWS CLI 2.x、uv 0.11.9;宿主机Python 3.10到3.14,但运行时目标是PYTHON_3_13,写在契约里,不是你的解释器版本;AWS账号需开通Bedrock模型访问,区域统一us-east-1;模型是deepseek.v3.2,通过MODEL_ID环境变量传给代码。
整个Agent的表面能塞进一屏main.py。系统提示词明确要求:回答只写一句短话;涉及算术时调用add_numbers工具而不是自己算,然后一句话报出结果;没有订单库、没有工单历史、没有账号查询,遇到这类问题就说看不到,不许猜。
提示词就是产品本身。工具存在的意义是让trace有东西可看——一个从不调用工具的Agent只产生一个span,证明不了什么。入口点是异步生成器,所以流式是默认形态,不是后加的。
真正值得抄的是流外面的那层过滤器。DeepSeek模型有时会写出自己聊天模板标记的碎片,所以每个文本增量在yield之前都要过一遍scrub.feed()。另外,BedrockModel要显式传入MODEL_ID:这个变量缺失时,SDK默认值可能选中你所在区域拒绝的模型,显式传id正是让首次部署不因地理原因失败的关键。
部署前先跑make doctor,15项检查分四组:工具链4项、CLI 1项、文件夹自身7项、AWS环境3项,实测15通过0警告0失败。make dev在本地8080端口跑同一份代码,接真实模型、不部署,本地调用约两秒就通过工具给出了答案。
部署产出的栈只有四个资源:一个AWS::BedrockAgentCore::Runtime、它运行所用的IAM角色、该角色的IAM策略,以及CDK元数据。这就是全部足迹。
四条断言跑在真实部署上,不是mock:运行时在目标区域存在且状态READY;调用一个需要工具的提示词能拿到回答,且回答里没有模型脚手架残留;同一次调用留下的X-Ray trace,span树里包含execute_tool span;不存在其他用例的资源。实测4通过0失败,会话记录16个事件,工具列表为['add_numbers'],回复是"The refund total should be $42."。
trace树读起来就像运行时自己画出的Agent循环:invoke_agent 2.50秒,第一轮chat 0.68秒(431进/60出),第二轮chat 1.82秒(514进/11出),然后是execute_tool add_numbers成功。execute_tool这个span才是重点——它区分了"模型说42"和"工具算出42、模型转述",而且它只在部署后的运行时上存在,本地dev的trace只把工具调用记进日志,不成span。
成本按这次运行实测:被追踪的那次调用用了945个输入token和71个输出token,按us-east-1的deepseek.v3.2价格(每百万token 0.62和1.85美元)算,模型调用花费0.00072美元。本次运行共发生六次调用,其中四次打在本地dev服务器上。
拆除是一个make目标,跑两条命令,第二条负责删除。make down之后make status显示"Local only",确认清干净。有个坑:make down在非交互shell里会在第一行就死掉,报"This command requires an interactive terminal",任何管道或CI运行都会撞上,修法是给agentcore remove all加-y标志。另一个坑是remove all会清空agentcore.json并抹掉aws-targets.json,下次部署就没有目标,报"No resources match the given filters",重新部署前得从git恢复这两个文件。
契约就是两个JSON文件,AWS侧其余全部生成,所以部署可复现、拆除是真拆。CodeZip意味着没有Dockerfile,平台直接打包codeLocation。一个Agent在工具调用拥有自己的span之前谈不上可观测,这条断言要在你需要它之前就写好。流清洗器从第一天就该放进入口点,因为脚手架泄漏是间歇性的,只在测试里过滤迟早会烂掉。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.