数日即可构建Agent?Strands Agents说到做到!

近日,亚马逊云科技发布Strands Agents,这是一款开源SDK,采用模型驱动的设计方法,开发者仅需编写数行代码,即可构建并运行AI Agents。Strands Agents能够灵活适配从简单到复杂的Agent应用场景,同时支持从本地开发环境到生产环境的全流程部署。

目前,亚马逊云科技内部多个团队已在生产环境中通过Strands Agents开发AI Agents,包括Amazon Q Developer、Amazon Glue以及VPC Reachability Analyzer。现在,亚马逊云科技期待向开发者开放Strands Agents,助力您构建专属的AI Agents。

与传统框架要求开发者为Agent定义复杂工作流的模式不同,Strands Agents通过充分发挥顶尖模型的规划、思维链、工具调用能力和反思能力,大幅简化了Agent开发流程。开发者只需在代码中定义提示词和工具列表,即可快速构建Agent,完成本地测试后可直接部署至云上。

Strands Agents如同DNA双螺旋结构,将Agent的两大核心组件模型与工具深度联结。借助模型的先进推理能力规划Agent执行路径,并驱动工具完成具体任务调用。针对复杂Agent场景,开发者可在Strands Agents中深度定制Agent行为,例如:指定工具选择策略、自定义上下文管理方式、选择会话状态与记忆存储方案,乃至构建多Agents协作应用。

Strands Agents具备全环境运行能力,支持任何具备推理与工具使用能力的模型,包括Amazon Bedrock、Anthropic、Ollama、Meta等模型,并通过LiteLLM实现对其他厂商模型的兼容。

Strands Agents是一个开放社区,有多家企业已加入共建行列。其中,Anthropic为Strands Agents提供了Anthropic API调用模型的接入支持;Meta实现了通过Llama API对Llama模型的兼容支持。

欢迎访问GitHub加入亚马逊云科技,开启您的Strands Agents开发之旅!

GitHub:

https://github.com/strands-agents

Agents构建之旅

本文作者亚马逊云科技Agentic AI高级首席软件工程师Clare Liguori,主要从事Amazon Q Developer的相关工作,这是一款由生成式AI驱动的软件开发助手。Clare及其团队从2023年初开始构建AI Agents,当时正值ReAct(Reasoning and Acting)科学论文发表。这篇论文表明,大语言模型(LLM)能够在其环境中进行推理、规划并采取行动。

例如,LLM可以推理出需要调用API来完成任务,然后生成该API调用所需的输入。Clare由此意识到,LLM可以作为Agent来完成多种类型的任务,包括复杂的软件开发和运维故障排除。

当时,LLM通常并未针对“Agent”角色进行训练,其训练目标更多聚焦于自然语言对话。要让LLM成功实现推理与行动,需要借助复杂的提示指令、模型响应解析器,以及编排逻辑。彼时,让LLM稳定生成语法正确的JSON都是一项挑战。

为了完成Agent原型的开发和部署,Clare团队不得不依赖各种复杂的Agent框架库,这些库能够为Agent提供所需的基础架构和编排能力,确保其在早期模型中能可靠的完成任务。即便有这些框架支持,Clare团队仍需花费数月时间调优和调试,才能让Agent达到生产环境可用的状态。

此后,团队见证了LLM在推理与工具使用能力上的飞跃提升。由于模型已具备原生的工具使用和推理能力,构建Agent不再需要如此复杂的编排。之前用于构建Agent的部分Agent框架库,已开始阻碍充分利用新型LLM的能力。尽管LLM的性能逐渐提高,但这些改进并不意味着可以利用现有的框架更快地构建和迭代Agent,Clare团队仍需花费数月时间让一个Agent达到生产可用的状态。

为消除团队在Amazon Q Developer中的开发复杂度,Clare团队开始构建Strands Agents。与使用复杂编排逻辑构建Agent相比,依靠最新模型能力驱动Agent,显著缩短了上市时间,并提升了终端用户体验。过去,Amazon Q Developer团队从原型开发到生产部署新Agent需要数月时间,现在,借助Strands  Agents,仅需数日或数周内就能推出新Agent。

Strands Agents核心概念

Agent最简明的定义是以下三要素的组合:

  • 模型

  • 工具

  • 提示词

Agent通常可利用这三个组件自动完成任务,其任务涵盖回答问题、生成代码、规划假期行程以及优化财务投资组合等。在模型驱动的方法中,Agent通过模型来动态指导自身执行步骤,并调用工具来完成指定任务。

使用Strands Agents SDK定义Agent,需在代码中定义以下三个组件:

1.Model:选择一个具备推理与工具使用能力的LLM,如通过Amazon Bedrock接入的Claude 3 Haiku。

2.Tools:定义可供Agent调用的工具集,如执行代码、调用API、查询数据库等。

3.Prompt:设计任务指令模板,指导Agent如何分解目标并协调工具使用。

Agent通过与模型、工具的循环交互直至完成提示词指定的任务,这种Agent循环正是Strands Agents的核心能力。Strands Agents的循环机制充分发挥了LLM的强大能力,以及其在原生推理、规划和工具选择方面的卓越表现。在每次循环中,Strands会将提示词、Agent上下文以及Agent工具的描述信息,一并传递给LLM。此时,LLM有多种执行路径:

  • 以自然语言直接响应终端用户。

  • 规划系列执行步骤。

  • 复盘Agent历史操作。

  • 选择调用一个或多个工具。

若LLM选定某个工具时,Strands Agents会负责执行该工具,并将结果反馈给LLM。待LLM完成任务后,Strands Agents返回Agent的最终结果。

在Strands Agents的模型驱动方法中,工具是定制Agent行为的关键要素。例如,工具可实现从知识库检索相关文档、调用API、运行Python逻辑,或直接返回包含附加模型指令的静态字符串。在模型驱动方法中,工具还能帮助开发者实现复杂用例,例如使用以下Strands Agents示例预构建工具:

1.Retrieve工具:基于Amazon Bedrock知识库实现语义搜索,不仅能检索文档,还能辅助模型通过语义搜索筛选其他工具,优化规划与推理效率。例如,当Agent可选工具库规模超过6000个时,现有LLM难以直接处理如此庞大的工具选择空间。此时,Retrieve工具通过语义搜索动态筛选与当前任务最相关的工具子集,仅向模型呈现这些精选工具的描述。开发者可将海量工具描述存入知识库,让模型通过Retrieve工具动态检索相关工具子集,大幅降低工具选择的复杂度。

2.Thinking工具:引导模型进行多轮深度分析思考,赋予Agent复杂思维处理与自我反思能力。将“Thinking”建模为工具,使模型能够自主判断何时启动深度分析流程。

3.多Agents协作工具组:针对复杂任务,支持以工作流、图结构、集群等多种模式,协调多Agent协作。通过将子Agent及协作机制建模为工具,模型能够自主决策何时调用预定义的工作流、图结构或子Agent集群。针对多Agents应用,Strands Agents的Agent2Agent(A2A)协议支持也即将上线。

开始使用Strands Agents

下文将演示如何使用Strands Agents SDK构建Agent。正如计算机科学领域的经典难题,“命名”始终是该领域最具挑战性的任务之一,开源项目的命名更是如此。为了给Strands Agents项目构思命名方案,可以使用Strands构建命名Agent。

本例将借助Strands Agents,结合Amazon Bedrock中的默认模型、MCP Server,和预构建的Strands Agents工具,构建命名Agent。

以下是创建agent.py文件的完整代码内容。

from strands import Agentfrom strands.tools.mcp import MCPClientfrom strands_tools import http_requestfrom mcp import stdio_client, StdioServerParameters
# Define a naming-focused system promptNAMING_SYSTEM_PROMPT = """You are an assistant that helps to name open source projects.
When providing open source project name suggestions, always provideone or more available domain names and one or more available GitHuborganization names that could be used for the project.
Before providing your suggestions, use your tools to validatethat the domain names are not already registered and that the GitHuborganization names are not already used."""
# Load an MCP server that can determine if a domain name is availabledomain_name_tools = MCPClient(lambda: stdio_client(    StdioServerParameters(command="uvx", args=["fastdomaincheck-mcp-server"])))
# Use a pre-built Strands Agents tool that can make requests to GitHub# to determine if a GitHub organization name is availablegithub_tools = [http_request]
with domain_name_tools:    # Define the naming agent with tools and a system prompt    tools = domain_name_tools.list_tools_sync() + github_tools    naming_agent = Agent(        system_prompt=NAMING_SYSTEM_PROMPT,        tools=tools    )
    # Run the naming agent with the end user's prompt    naming_agent("I need to name an open source project for building AI agents.")

左右滑动查看完整示意

运行该Agent需要GitHub个人访问token。请用GitHub token的值设置环境变量GITHUB_TOKEN。您还需要在us-west-2中Anthropic Claude 3.7 Sonnet设置Amazon Bedrock模型访问权限,并在本地配置亚马逊云科技凭证。

运行Agent:

pip install strands-agents strands-agents-toolspython -u agent.pyYou should see output from the agent similar to this snippet:Based on my checks, here are some name suggestions for your open source AI agent building project:## Project Name Suggestions:1. **Strands Agents** - Available domain: strandsagents.com - Available GitHub organization: strands-agents

左右滑动查看完整示意

用户可以在常用的生成式AI辅助开发工具中,通过Strands Agents SDK轻松开启构建新Agent。亚马逊云科技还推出了Strands MCP Server帮助开发者快速入门。该服务器可与任何支持MCP开发工具集成,例如Amazon Q Developer CLI或Cline。以Amazon Q Developer CLI为例,可通过以下示例将Strands MCP Server添加到CLI的MCP配置中,更多配置示例可在GitHub查看。

{  "mcpServers": {    "strands": {      "command": "uvx",      "args": ["strands-agents-mcp-server"]    }  }}

左右滑动查看完整示意

GitHub:

https://github.com/strands-agents/mcp-server/

Strands Agents生产环境部署

在生产环境中运行Agent程序是Strands设计的核心理念。Strands Agents项目包含部署工具包,其中提供了一系列参考实现,以帮助用户将Agent程序投入生产环境。

Strands具有足够的灵活性,能够支持生产环境中的多种架构。您可以使用 Strands来构建会话Agent,也可以构建由事件触发、按计划运行或持续运行的Agent。

用户可以将使用Strands Agents SDK构建的Agent程序,作为单体应用进行部署,此时Agent循环和工具执行都在同一环境中运行;也可以将其部署为一组微服务。

下文将介绍在亚马逊云科技内部使用Strands Agents时采用的四种Agent架构。

下图展示了一种Agent架构,其中Strands通过客户端应用程序,完全在用户本地环境中运行。GitHub上的示例命令行工具遵循该架构,来开发用于构建Agent的基于命令行界面的AI助手。

下图呈现了将Agent及其工具,部署在生产环境中某个API后端的生产架构。GitHub提供了参考实现,展示如何借助以下亚马逊云科技服务,将基于Strands Agents SDK构建的Agent部署在亚马逊云科技上的某个API后端:

  • Amazon Lambda

  • Amazon Fargate

  • Amazon EC2

通过在不同环境中分别运行Strands Agents循环和工具执行,可实现关注点分离。下图展示了使用Strands Agents的Agent架构:Agent通过API调用工具,而工具在独立于Agent环境的隔离后端环境中运行。例如,可在Lambda函数中运行Agent工具,同时在Amazon Fargate容器中运行Agent本体。

您还可以使用Strands实现控制权返回模式,在该模式下,由客户端负责运行工具。下图展示了Agent架构,其中使用Strands Agents SDK构建的Agent,可以混合使用托管在后台环境中的工具,以及通过调用该Agent的客户端应用程序在本地运行的工具。

无论采用何种具体的架构,对Agent程序的可观测性,对于了解Agent程序在生产环境中的运行表现都至关重要。

Strands Agents提供了用于从生产环境中的Agent程序,收集Agent轨迹和指标的工具。Strands Agents使用OpenTelemetry(OTEL)将遥测数据发送到任何与OTEL兼容的后端,以便进行可视化展示、故障排查和效果评估。Strands Agents对分布式追踪的支持,使用户能够跟踪架构中不同组件间的请求,从而全面了解Agent会话的情况。

加入Strands Agents社区

Strands Agents是一个基于Apache License 2.0许可协议的开源项目。亚马逊云科技很高兴能与您在开放环境中共同构建Strands Agents,诚邀大家为项目贡献力量,包括为其他供应商的模型和工具增加支持、合作开发新功能或扩充文档内容。

如果您发现bug、有优化建议或希望参与代码贡献,请访问亚马逊云科技的GitHub仓库,与社区共同推动项目发展。

敬请参阅Strands Agents SDK官方文档,了解Strands Agents更多信息,立即开始体验Strands构建您的首个AI Agents。

Strands Agents SDK官方文档:

https://strandsagents.com/0.1.x/

本篇作者

Clare Liguori

亚马逊云科技Agentic AI高级首席软件工程师。作为Amazon Q Developer团队成员,她致力于通过生成式AI和AI Agents,革新应用程序构建方式,并推动开发者借助这些技术更高效地开展工作。

星标不迷路,开发更极速!

关注后记得星标「亚马逊云开发者」

听说,点完下面4个按钮

就不会碰到bug了!

点击阅读原文查看博客!获得更详细内容!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值