尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Serverless Framework + Bedrock AgentCore:用 LangGraph Gateway 示例把 Lambda 函数封装成 Agent 工具

发布时间:2026/9/9 21:29:18

资讯中心
01
ARTICLE

Serverless Framework + Bedrock AgentCore:用 LangGraph Gateway 示例把 Lambda 函数封装成 Agent 工具

Serverless Framework + Bedrock AgentCore:用 LangGraph Gateway 示例把 Lambda 函数封装成 Agent 工具
Serverless Framework Bedrock AgentCore用 LangGraph Gateway 示例把 Lambda 函数封装成 Agent 工具【免费下载链接】serverless⚡ Serverless Framework – Effortlessly build apps that auto-scale, incur zero costs when idle, and require minimal maintenance using AWS Lambda and other managed cloud services.项目地址: https://gitcode.com/GitHub_Trending/se/serverless本篇文章基于se/serverless仓库中bedrock-agentcore插件的 Python 示例langgraph-gateway完整讲解如何将普通 Lambda 函数声明为ai.tools工具、由框架自动创建 AgentCore Gateway并通过 MCP 协议让 LangGraph Agent 在运行时发现和调用这些工具。读完本文你将掌握一套可直接复制的自定义 Lambda 工具 Claude 智能体编排落地范式以及配套的部署、联调与清理流程。示例要解决的核心问题langgraph-gateway是一个基于 LangGraph 的智能体示例它的核心演示目标只有一个通过 AgentCore Gateway 把自定义 Lambda 函数暴露为 Agent 可调用的工具。具体来说这个示例展示的能力包括Gateway Tools网关工具将 Lambda 函数暴露给智能体当作工具使用Auto-Created Gateway自动创建网关只要定义了工具框架会默认自动创建一个 Gateway无需手写网关配置MCP ProtocolMCP 协议工具发现与调用统一走 Model Context ProtocolBedrockAgentCoreApp与 AgentCore Runtime 集成所采用的入口模式LangGraph通过工具节点ToolNode编排整个智能体执行流程。场景设定非常贴近真实业务示例内置了一个计算器LambdacalculatorClaude 收到类似 What is 25 multiplied by 4? 的问题时会自主决定调用计算工具而不是自己心算从而演示了LLM 决策 → 网关转发 → Lambda 执行 → 结果回填的完整闭环。整体架构与执行链路README 给出了清晰的调用链示意结合示例源码可以归纳为下图所示的分层关系User Request → AgentCore Runtime → agent_invocation() ↓ LangGraph ↓ Claude Sonnet 4.5 ↓ [needs calculation?] ↓ Gateway (MCP) → Calculator Lambda ↓ Response一次完整请求的旅程是用户输入经invoke_agent_runtime到达 AgentCore RuntimeRuntime 调用智能体容器中的agent_invocation()入口见 agent.pyLangGraph 的聊天节点让 Claude Sonnet 4.5 决定直接回答还是借助工具当模型判定需要计算时LangGraph 的 ToolNode 通过 MCP 客户端把参数发往GatewayGateway 再把请求路由到 Calculator Lambda 执行结果逐级返回给用户。其中 Agent 与 Gateway 之间的通信走 MCP over HTTP并借助mcp-proxy-for-aws完成 AWS SigV4 认证详见下文源码分析。部署前置条件在动手部署前需要确认以下条件齐备一个已开通Bedrock 模型访问权限的 AWS 账户本示例使用 Claude Sonnet 4.5在 Bedrock 控制台开启美国区域推理配置文件us.anthropic.claude-sonnet-4-5-20250929-v1:0的访问权限本机已安装DockerAgent 以容器镜像方式构建并推送至 ECRServerless Framework v4已配置好 AWS 凭证。快速开始从部署到联调1. 一键部署在示例目录下执行serverless deploy根据 README 与框架的插件实现部署过程会依次完成构建 Docker 镜像并推送到 Amazon ECR部署 Calculator Lambda 函数根据ai.tools声明创建 AgentCore Gateway 并把 calculator 挂载为网关工具部署 AgentCore Runtime输出可供调用的 Runtime ARN / URL。关于自动创建网关这一步可以从 compilation/orchestrator.js 的编译流程中找到依据当aiConfig.gateways未显式声明时插件会走default gateway mode——把所有共享工具集中编译到同一个默认 Gateway 上随后在编译ai.agents下的 runtime agent 时若该 agent 没有显式指定gateway且存在默认网关就会自动把默认网关注入给该 agent。这正是示例配置里chatbot: {}空对象也能正常工作、README 中Default gateway auto-created注释的来源。2. 发起测试调用方式一直接使用 boto3对应仓库 test-invoke.pyimport boto3 import json import uuid client boto3.client(bedrock-agentcore, region_nameus-east-1) response client.invoke_agent_runtime( agentRuntimeArnYOUR_RUNTIME_ARN, # 从 deploy 输出获取也可用 serverless info 查询 runtimeSessionIdstr(uuid.uuid4()), payloadjson.dumps({prompt: What is 25 multiplied by 4?}).encode() ) result json.loads(response[response].read()) print(result)方式二直接运行示例自带测试脚本仓库内的 test-invoke.py 封装了流式响应的处理逻辑把工具返回的agentRuntimeArn设为环境变量后即可运行RUNTIME_ARNarn:aws:bedrock-agentcore:... python3 test-invoke.py该脚本内置三个递进的测试用例很适合用来验证工具调用与普通对话两条路径Test 1What is 25 multiplied by 4?——触发 Gateway 上的 calculator 工具Test 2Calculate the square root of 144 plus 10——验证复杂表达式sqrt函数经工具正确求值Test 3Hello! What tools do you have available?——纯对话不依赖任何工具用于对照验证无工具路径。注意脚本会为每次调用生成独立的runtimeSessionIduuid.uuid4()以便保持会话隔离。另外示例 README 中的payload统一携带prompt键这与 agent.py 入口处payload.get(prompt, ...)的取值逻辑一一对应。3. 本地开发模式如需在本地快速迭代 Agent 代码框架提供了 dev 模式serverless dev配置与源码剖析一个计算器工具如何跑起来基础设施配置serverless.yml完整的 serverless.yml 仅由三部分构成函数声明、工具声明和 Agent 声明。service: langgraph-gateway provider: name: aws region: us-east-1 functions: calculatorFunction: handler: handlers/calculator.handler runtime: python3.13 ai: # 定义将通过 Gateway 提供给 Agent 的工具 tools: calculator: function: calculatorFunction toolSchema: - name: calculate description: Evaluate a mathematical expression. Supports basic arithmetic (, -, *, /, **) and functions like sqrt, sin, cos, etc. inputSchema: type: object properties: expression: type: string description: Mathematical expression to evaluate (e.g., 2 2 * 3, sqrt(16)) required: - expression # LangGraph agent with gateway tools # 未显式声明网关时框架会自动创建包含全部工具的默认网关 agents: chatbot: {}逐项拆解其含义Lambda Function函数calculatorFunction是普通的 Python 3.13 Lambdahandler 指向handlers/calculator.handlerTool Definition工具定义ai.tools.calculator把上述函数映射为一个网关工具toolSchema用 JSON Schema 描述工具名称、用途和入参结构。入参描述写得越具体LLM 越容易正确生成参数Agent智能体ai.agents.chatbot是一个极简 Agent它不需要手写任何配置——Gateway URL 会由框架自动注入见下文环境变量说明。Agent 侧源码工具发现与工具调用agent.py 完整示范了 Agent 侧三个关键环节。第一步从环境变量拿到网关地址框架部署 Runtime 容器时会注入BEDROCK_AGENTCORE_GATEWAY_URL这正是 orchestrator 编译逻辑中默认网关注入在运行时的落地体现GATEWAY_URL os.environ.get(BEDROCK_AGENTCORE_GATEWAY_URL) AWS_REGION os.environ.get(AWS_REGION, us-east-1)README 中给出的会话级 MCP 工具发现代码正是它的简化版GATEWAY_URL os.environ.get(BEDROCK_AGENTCORE_GATEWAY_URL) async with sse_client(GATEWAY_URL) as streams: async with ClientSession(*streams) as session: await session.initialize() tools await session.list_tools()第二步带 SigV4 认证的 MCP 会话真实示例没有使用sse_client而是通过mcp-proxy-for-aws建立带 AWS IAM SigV4 认证的流式 HTTP MCP 客户端并把发现的工具转成 LangChain 工具mcp_client aws_iam_streamablehttp_client( endpointGATEWAY_URL, aws_regionAWS_REGION, aws_servicebedrock-agentcore ) async with mcp_client as (read, write, session_id_callback): async with ClientSession(read, write) as session: await session.initialize() tools await load_mcp_tools(session) llm_with_tools llm.bind_tools(tools)这里aws_servicebedrock-agentcore声明了签名所用服务名框架创建的网关会校验该签名保证只有具备相应 IAM 权限的容器才能调用。第三步工具进入 LangGraph 图并被执行当 LLM 决定使用工具时LangGraph 的ToolNode会在图内通过 MCP 客户端发起调用result await session.call_tool(calculate, {expression: 25 * 4})示例在图构建层面把整条回路串起来chatbot节点用绑定了工具的 LLM 做决策随后tools_condition判断是否需要进入ToolNode执行完再回到chatbotgraph_builder.add_node(chatbot, async_chatbot) if tools: graph_builder.add_node(tools, ToolNode(toolstools)) graph_builder.add_conditional_edges(chatbot, tools_condition) graph_builder.add_edge(tools, chatbot) graph_builder.add_edge(START, chatbot)值得留意的是 agent 设计中的一个容错细节若容器未收到BEDROCK_AGENTCORE_GATEWAY_URL例如本地以裸进程方式调试run_agent_with_gateway会打印提示并退回无工具模式仅保留chatbot节点的纯对话图——这意味着该示例即使脱离网关也能正常回答普通问题只是无法执行计算。此外示例注释说明每次调用都会创建全新的 MCP 会话以避免会话状态残留导致工具异常。入口约定BedrockAgentCoreApp文件底部通过装饰器声明了 Runtime 的调用入口app BedrockAgentCoreApp() app.entrypoint async def agent_invocation(payload, context): user_message payload.get(prompt, Hello! How can I help you?) final_message await run_agent_with_gateway(user_message) return {result: final_message} if __name__ __main__: app.run()这里的关键约定是Runtime 会把用户输入作为含prompt键的payload传入函数返回结构中的result键将作为最终回答返回给调用方test-invoke.py的invoke_agent_runtime(payload...)正是与该约定配对。底层依赖来自 pyproject.toml 中的bedrock-agentcore1.3.0。工具侧源码Calculator Lambda 的安全实现作为被网关暴露的工具handlers/calculator.py 本身是个值得借鉴的最小工具样例它没有用eval()而是用 Python AST 解析实现安全的数学表达式求值运算符白名单OPERATORS显式映射 - * / ** %与一元正负号函数白名单FUNCTIONS只放行sqrt / sin / cos / tan / log / log10 / abs / floor / ceil / round / pow常量白名单CONSTANTS仅开放pi与e递归遍历 AST 节点_evaluate_node对不支持的语法直接抛出ValueError天然规避代码注入。同时它对两种入参形态做了兼容既支持普通 Lambda 直接调用event中直接取expression也支持Gateway 转发格式参数被包在event.body字段里可能是字符串需要二次json.loads。返回统一为{statusCode, body}结构body 内含result与expression。容器化Dockerfile 与依赖Dockerfile 展示了 Agent 镜像的最小形态基于python:3.12-slim先拷贝pyproject.toml并pip install .安装依赖再拷贝agent.py最后以python agent.py作为容器启动命令。pyproject.toml 中集中列出了打通整条链路所需的依赖及其最低版本要求依赖最低版本作用bedrock-agentcore1.3.0AgentCore Runtime 应用框架与入口装饰器langgraph1.0.8状态图、ToolNode、条件边等编排能力langchain/langchain-core1.2.10 / 1.2.13Chat 模型封装与消息类型langchain-aws1.2.5Bedrock Converse 模型提供方langchain-mcp-adapters0.1.0将 MCP 工具转换为 LangChain 工具mcp1.0.0MCP 客户端会话与协议mcp-proxy-for-aws1.1.5对 MCP 端点附加 AWS SigV4 认证注意serverless.yml中函数 runtime 为python3.13而基础镜像使用python:3.12-slim——两者互不冲突前者描述的是 Lambda 函数运行时后者是 Agent 容器自身的基础镜像。文件清单速览文件用途serverless.yml基础设施配置函数、工具、Agentagent.pyLangGraph Agent含网关工具发现逻辑handlers/calculator.pyCalculator Lambda 工具实现DockerfileAgent 容器定义pyproject.tomlPython 依赖声明test-invoke.pyboto3 联调测试脚本含三种用例扩展更多工具工具不是写死在代码里的而是在serverless.yml中声明式注册的因此增加新工具只需两步多声明一个函数 在ai.tools下多挂一个toolSchema。README 给出的计算器 天气查询双工具配置即为此模式functions: calculatorFunction: handler: handlers/calculator.handler runtime: python3.13 weatherFunction: handler: handlers/weather.handler runtime: python3.13 ai: tools: calculator: function: calculatorFunction toolSchema: [...] weather: function: weatherFunction toolSchema: - name: get_weather description: Get current weather for a city inputSchema: type: object properties: city: type: string required: - city agents: chatbot: {}从 orchestrator.js 的实现可以推断default gateway 模式会收集ai.tools下的全部共享工具统一编译挂载所以无需修改 Agent 端代码——新部署后 Agent 在启动时通过 MCPlist_tools就能自动发现get_weather。只要注意新 Lambda 的 handler 遵循同样的入参含 Gatewaybody包裹与出参格式约定即可。清理资源示例服务会创建容器镜像、Lambda、网关与 Runtime 等多项 AWS 资源验证完毕后建议及时清理以免持续产生费用serverless remove下一步进阶方向若希望在此基础上继续深化仓库中提供了两个同主题的 Python 示例可作为直接延续LangGraph Multi-Gateway多网关在ai.gateways下显式声明多个网关并配置不同授权对应 orchestrator 中的多网关编译路径LangGraph Memory会话记忆在示例中为对话补充持久化能力。若需对比 JavaScript/TypeScript 技术栈的等价实现还可参考同目录下的examples/javascript/langgraph-gateway。【免费下载链接】serverless⚡ Serverless Framework – Effortlessly build apps that auto-scale, incur zero costs when idle, and require minimal maintenance using AWS Lambda and other managed cloud services.项目地址: https://gitcode.com/GitHub_Trending/se/serverless创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。