资讯动态

Serverless Framework 部署 LangGraph Code Interpreter Agent:基于 Bedrock AgentCore 托管代码解释器的 Python 实战

发布时间:2026/9/10 11:00:57 来源:尧图企业网站定制
Serverless Framework 部署 LangGraph Code Interpreter Agent基于 Bedrock AgentCore 托管代码解释器的 Python 实战【免费下载链接】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本文以仓库内的完整可运行示例 langgraph-code-interpreter 为核心讲解如何用 Serverless Framework v4 在 AWS Bedrock AgentCore 上部署一个具备真实代码执行能力的 LangGraph AgentAgent 通过langchain-aws的create_code_interpreter_toolkit()接入 AWS 托管默认代码解释器SANDBOX 模式可运行 Python 代码、操作文件、安装依赖并能按thread_id隔离会话状态。读完本文你能够理解该示例的完整配置与代码结构、掌握部署/验证/清理的完整流程并了解 Serverless Framework 底层如何把ai配置编译为 CloudFormation 资源。示例定位与能力概览这个示例解决的是一个典型痛点LLM 无法执行真实计算与代码。当提示词要求算出第 50 个斐波那契数这类必须实际运行代码才能回答的问题时仅靠模型心智计算不可靠。该示例通过把代码解释器Code Interpreter以工具Tool形式挂载到 LangGraph ReAct Agent 上让 Agent 在执行任务时自主决定写代码并运行从而具备数据计算、文件操作与结果验证能力。示例主要特点源自 READMEDefault Code Interpreter直接使用 AWS 托管的默认代码解释器SANDBOX 模式无需自建解释器资源LangGraph Integration通过langchain-aws的create_code_interpreter_toolkit()一行获取整套工具Full Tool Suite一次获得代码执行、文件读写、包安装等完整工具链Session Isolation每个thread_id独立维护会话状态互不干扰。说明示例属于仓库中 Bedrock AgentCore 插件packages/serverless/lib/plugins/aws/bedrock-agentcore/下的 Python 示例族同族还包括 BASIC/DOCKER/BROWSER/MEMORY/GATEWAY 等多类变体本示例聚焦默认托管代码解释器这一最小闭环。前置条件拥有已开通 Bedrock 模型访问权限的 AWS 账号本机安装 Docker示例以容器方式部署运行时代码Serverless Framework v4 及以上Python 3.12pyproject.toml 中requires-python 3.12。项目结构langgraph-code-interpreter/ ├── serverless.yml # Serverless Framework 配置定义 agent 运行时 ├── agent.py # LangGraph Agent 与代码解释器工具逻辑 ├── Dockerfile # 容器定义Python 3.12 slim ├── pyproject.toml # Python 依赖声明 ├── test-invoke.py # 验证脚本斐波那契校验 └── README.md # 示例说明部署流程1. 执行部署serverless deploy在示例目录下运行时Serverless Framework 读取serverless.yml编译出 Agent Runtime 所需的 CloudFormation 资源含容器镜像构建与上传、IAM 角色等并输出部署信息。2. 记录运行时端点 URL部署完成后输出中会给出 runtime 端点 URLARN 内嵌在 URL 路径中类似ai: agents: codeAgent: https://bedrock-agentcore.us-east-1.amazonaws.com/runtimes/arn:aws:bedrock-agentcore:us-east-1:123456789012:runtime/.../invocations其中的 ARN 是后续测试脚本调用所必需的RUNTIME_ARN。配置剖析极简 serverless.yml 背后是什么本示例的 serverless.yml 非常精简service: langgraph-code-interpreter provider: name: aws ai: agents: # Runtime agent with code execution capabilities # Uses AWS-managed default code interpreter (SANDBOX mode) codeAgent: {}关键点在于codeAgent: {}是空对象。从源码结构看这意味着 Agent不声明任何自定义代码解释器因此在运行时使用的是 AWS 托管的默认代码解释器SANDBOX 模式agent.py通过create_code_interpreter_toolkit()直接接入即可无需额外 IAM 授权自定义解释器资源。对比同目录的 langgraph-code-interpreter-custom 示例可以看到差异自定义解释器需要在ai.codeInterpreters下显式声明并配置network.mode: PUBLIC还要在 agent 的environment与role.statements中注入解释器 ID 与权限。本示例即零自定义、全托管的最简形态。网络模式背景SANDBOX / PUBLIC / VPC结合示例族中的对比说明与插件编译器实现代码解释器存在三种网络模式模式网络访问适用场景SANDBOX默认无最高安全性、本地计算本示例PUBLIC公网调用外部 API、下载数据VPC私有 VPC访问内部资源该行为与插件实现一致在 compilers/codeInterpreter.js 中buildCodeInterpreterNetworkConfiguration()会将network.mode归一化为大写并默认取SANDBOX同时据此生成NetworkModeVPC 模式下再附带Subnets与SecurityGroups若配置了自定义解释器最终会编译为AWS::BedrockAgentCore::CodeInterpreterCustom类型资源。需要外网能力的读者可直接对照 langgraph-code-interpreter-custom 示例迁移。Agent 代码逐段解读agent.py 是 Agent 的全部运行时逻辑其骨架如下from bedrock_agentcore.runtime import BedrockAgentCoreApp from langchain.chat_models import init_chat_model from langchain_aws.tools import create_code_interpreter_toolkit from langgraph.prebuilt import create_react_agent # Initialize the AgentCore app app BedrockAgentCoreApp() # Configuration AWS_REGION os.environ.get(AWS_REGION, us-east-1) MODEL_ID os.environ.get(MODEL_ID, us.anthropic.claude-sonnet-4-20250514-v1:0)三处易被忽略的细节值得展开BedrockAgentCoreApp运行时入口app.entrypoint装饰的invoke是每次请求的入口它从payload取prompt从context取session_id缺省为default。容器内通过app.run(portport, host0.0.0.0)启动 HTTP 服务端口默认取环境变量PORT默认 8080。模型与区域配置均可覆盖MODEL_ID默认使用us.anthropic.claude-sonnet-4-20250514-v1:0AWS_REGION默认us-east-1示例注释指出 AWS_REGION 由 AgentCore 自动注入本地调试时才需手动指定。模型通过 Bedrock Converse 协议调用init_chat_model(MODEL_ID, model_providerbedrock_converse)是 langchain 统一模型初始化入口这里显式指定了 AWS Bedrock 的 Converse 提供方。创建代码解释器工具包并构建 Agent# Create code interpreter toolkit (uses AWS-managed default) toolkit, code_tools await create_code_interpreter_toolkit(regionAWS_REGION) # Initialize chat model llm init_chat_model(MODEL_ID, model_providerbedrock_converse) # Create the LangGraph agent with code interpreter tools agent create_react_agent(modelllm, toolscode_tools) # Create config with thread_id for session isolation config {configurable: {thread_id: session_id}} # Run the agent result await agent.ainvoke( {messages: [{role: user, content: prompt}]}, configconfig, )核心调用链为create_code_interpreter_toolkit(region...)返回二元组(toolkit, code_tools)code_tools即挂载给 Agent 的工具列表不传入自定义identifier即走 AWS 托管默认解释器对应 SANDBOX。运行日志会打印Created toolkit with N tools与各工具名便于排查。create_react_agent是 LangGraph 预构建的 ReAct Agent负责思考 → 调用工具 → 观察结果循环。thread_id放在configurable中供 LangGraph 做会话/记忆隔离agent.ainvoke一次完成整个执行过程。响应提取与资源清理# Extract the final response final_message result[messages][-1].content # Clean up the toolkit await toolkit.cleanup() return { result: final_message, tools_used: [t.name for t in code_tools], interpreter_type: default, }关键实践是在返回前必须await toolkit.cleanup()释放解释器会话资源返回体中附带tools_used与interpreter_type: default字段后者会被测试脚本用于确认走的是默认解释器路径。整个invoke外层用try/except包裹异常时返回{error: str(e)}避免运行时崩溃。可用工具一览按 README 与agent.py中code_tools的命名create_code_interpreter_toolkit()提供以下工具Tool描述execute_code运行 Python/JS/TS 代码execute_command运行 shell 命令read_files读取文件内容write_files创建/更新文件list_files列出目录内容delete_files删除文件upload_file上传文件附描述install_packages安装 Python 包这些工具共同支撑起数据分析、数学计算、批量文件加工、可视化等典型 Agent 任务由于解释器运行在 AWS 托管沙箱中包安装与文件操作都被限制在隔离环境内。Dockerfile 与依赖版本Dockerfile 采用分层构建思路FROM python:3.12-slim WORKDIR /app COPY pyproject.toml . RUN pip install --no-cache-dir . COPY agent.py . ENV PYTHONUNBUFFERED1 CMD [python, agent.py]先拷依赖清单、后拷业务代码pyproject.toml层先于agent.py可在依赖未变化时最大化利用镜像层缓存pip install --no-cache-dir .以项目方式安装构建系统依赖 setuptools见 pyproject 的[build-system]PYTHONUNBUFFERED1确保容器日志实时输出便于 AgentCore 采集运行时日志。pyproject.toml 声明的关键依赖以当前仓库中版本约束为准包版本约束作用bedrock-agentcore1.3.0AgentCore 运行时 SDKBedrockAgentCoreApplangchain1.2.10模型统一初始化init_chat_modellangchain-aws1.2.5create_code_interpreter_toolkitlanggraph1.0.8ReAct Agent 图执行引擎本地验证确认真实执行了代码test-invoke.py 是一个独立于 Agent 的验收测试其验证哲学是选一个无法靠心算完成的题目——第 50 个斐波那契数12586269025。export RUNTIME_ARNarn:aws:bedrock-agentcore:us-east-1:123456789012:runtime/... python test-invoke.py脚本核心行为配置长超时客户端代码执行可能耗时较长boto3 客户端显式配置read_timeout300、connect_timeout30、retries{max_attempts: 1}避免默认短超时导致误判。每次调用独立会话session_id str(uuid.uuid4())对应会话隔离特性验证。调用invoke_agent_runtime向RUNTIME_ARN对应的运行时发送{prompt: ...}并读取流式response。答案校验同时检查纯数字12586269025与千分位格式12,586,269,025是否出现在回复中若未命中则退而检查回复中是否出现def、fib、for、print(等代码执行痕迹输出VALIDATION PASSED或VALIDATION INCONCLUSIVE并返回相应退出码。该脚本可作为模板改造替换EXPECTED_ANSWER与提示词即可复用于其他需要真实计算/取数的验收场景。典型提示词示例# Data analysis数据分析 Create a dataset of 100 random sales records and calculate average by product # Calculations数学计算 Calculate the 50th Fibonacci number # File operations文件操作 Create a Python script that reads a CSV and generates a summary report # Visualization可视化 Generate a bar chart showing monthly sales trends这四类提示词分别命中工具集中的代码执行、文件读写与包安装能力——例如生成条形图会触发install_packages安装绘图库→execute_code绘图→ 输出文件直观体现工具编排闭环。资源清理验证完毕后删除部署创建的全部资源运行时、容器镜像、IAM 角色等serverless remove关联示例需要外网能力时怎么办langgraph-code-interpreter-custom在默认示例之上声明ai.codeInterpreters并配置network.mode: PUBLIC让沙箱内代码可访问外部 API 与互联网资源其 Agent 通过CodeInterpreter.start(identifierCUSTOM_INTERPRETER_ID)绑定自定义解释器并在serverless.yml中借助!GetAtt PublicInterpreterCodeInterpreter.CodeInterpreterId注入解释器 ID、借助role.statements授予bedrock-agentcore:StartCodeInterpreterSession / InvokeCodeInterpreter / StopCodeInterpreterSession权限。若你的 Agent 需要联网取数如抓取公共 API请参照该示例在本文最小闭环上增量演进。小结一个可复用的最小 Agent 模板本示例的价值在于它浓缩出一个零基础设施心智负担的代码执行 Agent最小模板极简serverless.yml声明运行时 → 容器化 Python 代码定义 Agent →create_code_interpreter_toolkit一行接入托管解释器 →thread_id隔离会话 → 斐波那契题目验收真实执行能力 →serverless remove一键清理。需要联网、接入自定义解释器或增加网关/记忆等能力时仓库中 python 示例目录 的其余变体browser、memory、gateway、multi-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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价