AWS 开源 Strands Agents SDK,简化 AI 代理开发流程

发布于:2025-07-01 ⋅ 阅读:(17) ⋅ 点赞:(0)

   最近,亚马逊网络服务(AWS)宣布推出 Strands Agents(https://github.com/strands-agents/sdk-python),这一开源软件开发工具包(SDK)采用模型驱动的方法,助力开发者仅用数行代码即可构建并运行人工智能(AI)代理。Strands Agents 能够涵盖从简单到复杂的各类代理使用场景,无论是本地开发还是生产环境部署都能胜任。目前,AWS 的多个团队已在生产环境中借助 Strands 构建 AI 代理,包括亚马逊 Q 开发者助手、AWS Glue 数据集成服务以及 VPC 可达性分析器等。如今,AWS 激动地将 Strands Agents 推向大众,助力开发者打造专属的 AI 代理。

相较于要求开发者为代理定义复杂工作流的框架,Strands Agents 通过拥抱尖端模型的规划、联想思考、调用工具和反思能力,极大地简化了代理开发流程。借助 Strands,开发者只需在代码中定义一个提示词和一组工具即可构建代理,随后在本地进行测试并将其部署到云端。正如 DNA 的双螺旋结构一般,Strands 将代理的两大核心组件——模型与工具——紧密相连。Strands 借助模型的强大推理能力来规划代理的下一步行动并执行相应工具。对于更为复杂的代理使用场景,开发者可以在 Strands 中自定义代理的行为。例如,可以指定工具的选择方式、自定义上下文管理方式、选择会话状态和内存的存储位置,以及构建多代理应用程序。Strands 可在任何环境中运行,支持具备推理和工具使用能力的各类模型,包括亚马逊 Bedrock、Anthropic、Ollama、Meta 以及其他通过 LiteLLM 提供服务的供应商的模型。

Strands Agents 是一个开放的社区,众多公司纷纷加入并贡献自己的力量,包括埃森哲(Accenture)、Anthropic、Langfuse、mem0.ai、Meta、普华永道(PwC)、Ragas.io 和 Tavily。例如,Anthropic 已在 Strands 中贡献了通过 Anthropic API 使用模型的支持,而 Meta 则通过 Llama API 为 Llama 模型提供了支持。

AWS 构建代理的历程

AWS 的一名开发者主要负责亚马逊 Q 开发者助手的工作,这是一个由生成式 AI 驱动的软件开发助手。他和团队在 2023 年初开始构建 AI 代理,这大约是在原始 ReAct(推理与行动)科学论文发表之时。该论文表明大型语言模型(LLMs)能够推理、规划并在其环境中采取行动。例如,LLMs 可以推理出需要调用应用编程接口(API)来完成任务,然后生成该 API 调用所需的输入。他们随后意识到大型语言模型可以作为代理来完成多种类型的任务,包括复杂的软件开发和运维故障排除。

当时,大型语言模型通常并未被训练成代理的行为模式,它们大多主要被训练用于自然语言对话。要想成功地利用大型语言模型进行推理和行动,需要复杂的提示词指令来指导如何使用工具、模型响应的解析器以及编排逻辑。仅仅是让大型语言模型可靠地生成语法正确的 JSON 格式响应在当时都是一项挑战!为了 prototype(原型设计)和部署代理,他和团队依赖各种复杂的代理框架库,这些库处理了代理所需的基本架构和编排,以便与早期模型配合可靠地完成任务。即便有了这些框架,让一个代理做好生产环境的准备仍需数月的调试和优化。

从那以后,他们在大型语言模型的能力上见证了戏剧性的提升,这些模型如今已具备强大的推理和使用工具完成任务的能力。他们意识到不再需要如此复杂的编排来构建代理,因为模型现在已具备原生的工具使用和推理能力。实际上,他们之前用于构建代理的某些代理框架库开始阻碍他们充分利用新一代 LLMs 的能力。尽管 LLMs 的性能有了显著提升,但这些改进并不意味着他们能利用现有框架更快地构建和迭代代理。让一个代理做好生产环境的准备仍然需要数月时间。

于是,他们开始构建 Strands Agents,旨在为 Q 开发者团队去除这种复杂性。他们发现,依赖最新模型的能力来驱动代理,与使用复杂编排逻辑构建代理相比,大幅缩短了上市时间并提升了最终用户体验。过去,Q 开发者团队从原型设计到生产环境部署一个新代理需要数月时间,如今借助 Strands,他们能够在数天至数周内推出新的代理。

Strands Agents 的核心概念

对代理最简单的定义是模型、工具和提示词的组合。代理利用这三大组件自主完成任务,例如回答问题、生成代码、规划假期或优化财务组合等。在模型驱动的方法中,代理利用模型动态指导自身步骤并使用工具以完成指定任务。
 

Image



通过 Strands Agents SDK 定义代理时,需在代码中定义以下三大组件:

  1. 1. 模型 :Strands 提供灵活的模型支持。可以使用亚马逊 Bedrock 中支持工具使用和流处理的任何模型、通过 Anthropic API 使用 Anthropic 的 Claude 模型家族的模型、通过 Llama API 使用 Llama 模型家族的模型、用于本地开发的 Ollama,以及通过 LiteLLM 使用的众多其他模型供应商,例如 OpenAI。此外,还可以在 Strands 中自定义模型供应商。

  2. 2. 工具 :可以从数千个已发布的模型上下文协议(MCP)服务器中选择工具供代理使用。Strands 还提供了 20 多个预构建示例工具,包括用于操作文件、发起 API 请求和与 AWS API 交互的工具等。只需使用 Strands 的 @tool 装饰器,即可轻松地将任何 Python 函数用作工具。

  3. 3. 提示词 :提供一个自然语言提示词,为代理定义任务,例如回答最终用户的问题。还可以提供一个系统提示词,为代理提供通用指令和期望行为。

代理会与模型和工具进行交互,直至完成提示词所提供的任务,这一过程通过代理循环实现,它是 Strands 能力的核心所在。Strands 的代理循环充分利用了大型语言模型的强大功能以及它们在推理、规划和工具选择方面的原生能力。在每次循环中,Strands 会带着提示词、代理上下文以及代理工具的描述调用大型语言模型。大型语言模型可以选择用自然语言回应代理的最终用户、规划一系列步骤、反思代理之前的步骤和 / 或选择使用一个或多个工具。当大型语言模型选择工具时,Strands 负责执行该工具并将结果反馈给大型语言模型。当大型语言模型完成任务后,Strands 返回代理的最终结果。
 

Image



在 Strands 的模型驱动方法中,工具是定制代理行为的关键。例如,工具可以从知识库中检索相关文档、调用 API、运行 Python 逻辑,或仅仅返回包含额外模型指令的静态字符串。工具还有助于在模型驱动的方法中实现复杂使用场景,比如以下 Strands Agents 示例预构建工具:

  • • 检索工具(Retrieve tool) :该工具利用亚马逊 Bedrock 知识库实现语义搜索。除了检索文档外,检索工具还可以通过语义搜索检索其他工具,从而帮助模型进行规划和推理。例如,AWS 的一个内部代理有超过 6000 个工具可供选择!如今的模型尚无法准确地从如此众多的工具中进行选择。与其向模型描述所有 6000 个工具,代理可利用语义搜索找到与当前任务最相关的工具,并仅向模型描述这些工具。可以通过将众多工具描述存储在知识库中,并让模型使用检索工具来检索当前任务相关的工具子集,从而实现这一模式。

  • • 思考工具(Thinking tool) :该工具通过多个周期促使模型进行深入的分析思考,使复杂的思考处理和自我反思成为代理的一部分。在模型驱动方法中,将思考建模为工具,使模型能够推理任务是否需要深入分析以及何时需要。

  • • 多代理工具(Multi-agent tools) :如工作流、图和群集工具等。对于复杂任务,Strands 可以在多种多代理协作模式下协调多个代理。通过将子代理和多代理协作建模为工具,模型驱动方法使模型能够推理任务是否需要定义好的工作流、图或子代理群集。Strands 对多代理应用的 Agent2Agent(A2A)协议支持即将推出。

入门 Strands Agents

让我们通过一个示例来了解如何使用 Strands Agents SDK 构建代理。长期以来,命名一直被认为是计算机科学中最困难的问题之一,为开源项目命名也不例外!为了帮助我们为 Strands Agents 项目构思潜在名称,开发人员使用 Strands 构建了一个命名人工智能助手。在本示例中,你将使用 Strands 构建一个命名代理,使用亚马逊 Bedrock 中的默认模型、MCP 服务器和预构建的 Strands 工具。

创建一个名为 agent.py 的文件,代码如下:

from strands import Agent
from strands.tools.mcp import MCPClient
from strands_tools import http_request
from mcp import stdio_client, StdioServerParameters

# Define a naming-focused system prompt
NAMING_SYSTEM_PROMPT = """
You are an assistant that helps to name open source projects.

When providing open source project name suggestions, always provide
one or more available domain names and one or more available GitHub
organization names that could be used for the project.

Before providing your suggestions, use your tools to validate
that the domain names are not already registered and that the GitHub
organization names are not already used.
"""

# Load an MCP server that can determine if a domain name is available
domain_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 available
github_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.")

你需要一个 GitHub 个人访问令牌来运行代理。设置环境变量 GITHUB_TOKEN,其值为你的 GitHub 令牌。还需要在 us-west-2 地区获得 Anthropic Claude 3.7 Sonnet 的 Bedrock 模型访问权限,并在当地配置好 AWS 凭证。

然后运行你的代理:

pip install strands-agents strands-agents-tools
python -u agent.py

你应该会看到类似于以下片段的代理输出:

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 

如今,你可以轻松地在喜爱的人工智能辅助开发工具中使用 Strands Agents SDK 开始构建新的代理。为了帮助你快速上手,我们发布了一个 Strands MCP 服务器,可用于任何支持 MCP 的开发工具,例如 Q Developer CLI 或 Cline。对于 Q Developer CLI,可以使用以下示例将 Strands MCP 服务器添加到 CLI 的 MCP 配置中。你可以在 GitHub (https://github.com/strands-agents/mcp-server/)上查看更多的配置示例。

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

在生产环境中部署 Strands Agents

在生产环境中运行代理是 Strands 设计的核心原则之一。Strands Agents 项目包含一个部署工具包,其中有一系列参考实现,可帮助你将代理投入生产。Strands 足够灵活,能够支持生产环境中的多种架构。你可以使用 Strands 构建对话代理,以及由事件触发、按计划运行或持续运行的代理。你可以将使用 Strands Agents SDK 构建的代理部署为单体架构,即将代理循环和工具执行都运行在同一个环境中,或者将其部署为一组微服务。下面将介绍在 AWS 内部使用 Strands Agents 的四种代理架构。

下图展示了一种代理架构,Strands 完全在用户的本地环境中通过客户端应用程序运行。GitHub 上的示例命令行工具遵循这种架构,用于构建基于命令行的人工智能助手。

Image

下一图展示了一种将代理及其工具部署在生产环境中的 API 后端的架构。他们在 GitHub 上提供了参考实现,展示如何将使用 Strands Agents SDK 构建的代理部署在 AWS 的 API 后端,使用的服务包括 AWS Lambda、AWS Fargate 或亚马逊弹性计算云(Amazon EC2)。

Image

你可以通过将 Strands 代理循环和工具执行在不同环境中运行来分离关注点。下图展示了一种代理架构,其中代理通过 API 调用其工具,而工具则在与代理环境相隔离的后端环境中运行。例如,你可以将代理工具运行在 Lambda 函数中,而将代理本身运行在 Fargate 容器中。

Image

你还可以使用 Strands 实现一种控制权回归模式,由客户端负责运行工具。该图展示了一种代理架构,使用 Strands Agents SDK 构建的代理可以使用混合工具,这些工具一部分托管在后端环境中,另一部分通过调用代理的客户端应用程序在本地运行。

Image

无论采用何种架构,对代理的可观测性至关重要,这有助于了解代理在生产环境中的表现。Strands 提供了用于收集生产代理轨迹和指标的工具。Strands 使用 OpenTelemetry(OTEL)将遥测数据发送到任何兼容 OTEL 的后端,用于可视化、故障排除和评估。Strands 对分布式追踪的支持使你能够追踪架构中不同组件的请求,从而全面了解代理会话的情况。

总结

Strands Agents SDK 提供了一个既结构化又灵活的框架,用于构建 AI 代理。它强调模型、工具以及提示词之间的清晰分离。其基于模型驱动的循环机制,以及与现存大型语言模型(LLM)生态系统的集成,使其成为开发者在实现自主代理时的技术合理之选。开发者可以借此在减少样板代码的同时,获得强大的定制化能力。


网站公告

今日签到

点亮在社区的每一天
去签到