Strands Agents SDK

Polar Sponsor
爱发电 赞助
.NET 9.0

使用 AWS Strands SDK 构建和运行 PythonAI 代理。适用于创建自主代理、多代理工作流、自定义工具或集成 MCP 服务器。支持 Ollama(本地)、Anthropic、OpenAI、Bedrock 等模型。可用于代理框架搭建、工具创建以及编程运行代理任务。

使用 Strands SDK(Apache-2.0,来自AWS)在Python 制造AI代理

功能概述

使用 Strands SDK(Apache-2.0,来自AWS)在Python 制造AI代理是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

核心要点

  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
  • 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。

使用与执行

实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;

结果检查与注意事项

涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

Strands Agents SDK

使用 Strands SDK(Apache-2.0 协议,来自 AWS)在 Python 中构建 AI 智能体。

已验证兼容版本:strands-agents==1.23.0、strands-agents-tools==0.2.19

前提条件

# 安装 SDK 及配套工具(推荐使用 pipx 隔离安装)
pipx install strands-agents-builder  # 包含 strands-agents + strands-agents-tools + CLI

# 或直接安装
pip install strands-agents strands-agents-tools

核心概念:Bedrock 为默认模型后端

调用 Agent() 时若未指定 model= 参数,则默认使用 Amazon Bedrock —— 具体为 us.anthropic.claude-sonnet-4-20250514-v1:0(部署于 us-west-2 区域)。该配置需要有效的 AWS 凭据。如需切换其他模型提供商,请显式传入 model= 参数。

默认模型常量:strands.models.bedrock.DEFAULT_BEDROCK_MODEL_ID

快速开始 —— 本地智能体(Ollama)

from strands import Agent
from strands.models.ollama import OllamaModel

# host 是必需的位置参数
model = OllamaModel("http://localhost:11434", model_id="qwen3:latest")
agent = Agent(model=model)
result = agent("法国的首都是什么?")
print(result)

注意: 并非所有开源模型均支持工具调用(tool-calling)。经 abliteration 处理的模型通常会在该过程中丢失函数调用能力。建议优先使用标准未修改模型(如 qwen3、llama3.x、mistral)进行测试。

快速开始 —— Bedrock(默认提供商)

from strands import Agent

# 未指定 model → 自动使用 BedrockModel(Claude Sonnet 4,us-west-2)
# 需配置 AWS 凭据(~/.aws/credentials 或环境变量)
agent = Agent()
result = agent("解释量子计算")

# 显式指定 Bedrock 模型:
from strands.models import BedrockModel
model = BedrockModel(model_id="us.anthropic.claude-sonnet-4-20250514-v1:0")
agent = Agent(model=model)

快速开始 —— Anthropic(直连 API)

from strands import Agent
from strands.models.anthropic import AnthropicModel

# max_tokens 是 Required[int] 类型 —— 必须提供
model = AnthropicModel(model_id="claude-sonnet-4-20250514", max_tokens=4096)
agent = Agent(model=model)
result = agent("解释量子计算")

需设置 ANTHROPIC_API_KEY 环境变量。

快速开始 —— OpenAI

from strands import Agent
from strands.models.openai import OpenAIModel

model = OpenAIModel(model_id="gpt-4.1")
agent = Agent(model=model)

需设置 OPENAI_API_KEY 环境变量。

创建自定义工具

使用 @tool 装饰器。类型提示将自动转为 JSON Schema;函数文档字符串(docstring)将作为工具描述:

from strands import Agent, tool

@tool
def read_file(path: str) -> str:
    """读取指定路径文件的内容。

    Args:
        path: 待读取的文件系统路径。
    """
    with open(path) as f:
        return f.read()

@tool
def write_file(path: str, content: str) -> str:
    """向文件写入内容。

    Args:
        path: 待写入的文件系统路径。
        content: 待写入的文本内容。
    """
    with open(path, 'w') as f:
        f.write(content)
    return f"已向 {path} 写入 {len(content)} 字节"

agent = Agent(model=model, tools=[read_file, write_file])
agent("读取 /tmp/test.txt 并总结其内容")

ToolContext

工具可通过 ToolContext 访问智能体状态:

from strands import tool
from strands.types.tools import ToolContext

@tool
def stateful_tool(query: str, tool_context: ToolContext) -> str:
    """一个可访问智能体状态的工具。

    Args:
        query: 输入查询。
    """
    # 访问共享的智能体状态
    count = tool_context.state.get("call_count", 0) + 1
    tool_context.state["call_count"] = count
    return f"第 {count} 次调用:{query}"

内置工具(共 46 个)

strands-agents-tools 提供预置工具集:

from strands_tools import calculator, file_read, file_write, shell, http_request
agent = Agent(model=model, tools=[calculator, file_read, shell])

完整列表:calculator、file_read、file_write、shell、http_request、editor、image_reader、python_repl、current_time、think、stop、sleep、environment、retrieve、search_video、chat_video、speak、generate_image、generate_image_stability、diagram、journal、memory、agent_core_memory、elasticsearch_memory、mongodb_memory、mem0_memory、rss、cron、batch、workflow、use_agent、use_llm、use_aws、use_computer、load_tool、handoff_to_user、slack、swarm、graph、a2a_client、mcp_client、exa、tavily、bright_data、nova_reels。

热重载支持:Agent(load_tools_from_directory=True) 将监听 ./tools/ 目录下的变更。

MCP 集成

连接任意 Model Context Protocol(MCP)服务端。MCPClient 实现了 ToolProvider 接口,可直接加入 tools 列表中:

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

# MCPClient 接收一个返回 transport 的 callable
mcp = MCPClient(lambda: stdio_client(StdioServerParameters(
    command="uvx",
    args=["some-mcp-server@latest"]
)))

# 使用上下文管理器模式 —— MCPClient 是 ToolProvider
with mcp:
    agent = Agent(model=model, tools=[mcp])
    agent("使用 MCP 工具执行某项任务")

SSE 传输方式:

from mcp.client.sse import sse_client
mcp = MCPClient(lambda: sse_client("http://localhost:8080/sse"))

多智能体模式

智能体作为工具

嵌套智能体 —— 内层智能体自动成为外层智能体的可用工具:

researcher = Agent(model=model, system_prompt="你是一名研究助理。")
writer = Agent(model=model, system_prompt="你是一名撰稿人。")

orchestrator = Agent(
    model=model,
    tools=[researcher, writer],
    system_prompt="你负责协调研究与写作任务。"
)
orchestrator("调研量子计算并撰写一篇博客文章")

Swarm 模式

具备共享上下文与自主交接协调能力的自组织智能体团队:

from strands.multiagent.swarm import Swarm

# 智能体需配置 name 和 description,用于交接路由识别
researcher = Agent(
    model=model,
    name="researcher",
    description="查找并总结信息"
)
writer = Agent(
    model=model,
    name="writer",
    description="生成高质量内容"
)

swarm = Swarm(
    nodes=[researcher, writer],
    entry_point=researcher,    # 可选,默认为首个智能体
    max_handoffs=20,           # 默认值
    max_iterations=20,         # 默认值
    execution_timeout=900.0,   # 默认 15 分钟
    node_timeout=300.0         # 默认每个节点 5 分钟
)
result = swarm("调研 AI 智能体,然后移交至撰稿人生成博客文章")

Swarm 自动注入 handoff_to_agent 工具。智能体通过调用该工具并传入目标智能体名称完成交接。支持中断/恢复、会话持久化及重复交接检测。

图模式(DAG)

通过 GraphBuilder 实现基于确定性依赖关系的执行流程:

from strands.multiagent.graph import GraphBuilder

builder = GraphBuilder()
research_node = builder.add_node(researcher, node_id="research")
writing_node = builder.add_node(writer, node_id="writing")
builder.add_edge("research", "writing")
builder.set_entry_point("research")

# 可选:条件边
# builder.add_edge("research", "writing",
#     condition=lambda state: "complete" in str(state.completed_nodes))

graph = builder.build()
result = graph("撰写一篇关于 AI 智能体的博客文章")

支持循环(反馈回路),可通过 builder.reset_on_revisit(True) 启用;支持执行超时与嵌套图(Graph 可作为另一 Graph 中的一个节点)。

A2A 协议(Agent-to-Agent)

将 Strands 智能体暴露为符合 A2A 协议的服务端,实现跨智能体通信:

from strands.multiagent.a2a import A2AServer

server = A2AServer(
    agent=my_agent,
    host="127.0.0.1",
    port=9000,
    version="0.0.1"
)
server.start()  # 启动 uvicorn

可使用 strands-agents-tools 中的 a2a_client 工具连接 A2A 智能体。A2A 实现了 Google 提出的 Agent-to-Agent 协议,用于标准化跨进程/跨网络的智能体通信。

会话持久化

在多次智能体运行间持久化对话历史:

from strands.session.file_session_manager import FileSessionManager

session = FileSessionManager(session_file_path="./sessions/my_session.json")
agent = Agent(model=model, session_manager=session)

# 同样支持:
from strands.session.s3_session_manager import S3SessionManager
session = S3SessionManager(bucket_name="my-bucket", session_id="session-1")

Swarm 与 Graph 均支持会话管理器,以持久化多智能体状态。

双向流式传输(实验性)

支持实时语音/文本交互与持续音频流:

from strands.experimental.bidi.agent import BidiAgent
from strands.experimental.bidi.models.nova_sonic import NovaSonicModel

# 支持:NovaSonicModel、GeminiLiveModel、OpenAIRealtimeModel
model = NovaSonicModel(region="us-east-1")
agent = BidiAgent(model=model, tools=[my_tool])

支持中断检测、并发工具执行与连续双向音频交互。该功能处于实验阶段,API 可能变动。

系统提示词(System Prompts)

agent = Agent(
    model=model,
    system_prompt="你是 Hex,一位敏锐而机智的 AI 助手。",
    tools=[read_file, write_file]
)

Strands 同样支持 list[SystemContentBlock] 类型的结构化系统提示词,并支持缓存控制。

可观测性(Observability)

原生集成 OpenTelemetry 追踪:

agent = Agent(
    model=model,
    trace_attributes={"project": "my-agent", "environment": "dev"}
)

每次工具调用、模型推理、智能体交接及生命周期事件均可被追踪与观测。

Bedrock 特有功能

  • 防护栏(Guardrails):在 BedrockModel 配置中指定 guardrail_id 与 guardrail_version —— 支持内容过滤、PII 识别、输入/输出脱敏
  • 缓存点(Cache points):对系统提示词与工具定义启用缓存,优化成本
  • 流式响应(Streaming):默认启用,可通过 streaming=False 关闭
  • 区域(Region):默认为 us-west-2,可通过 region_name 参数或 AWS_REGION 环境变量覆盖
  • 跨区域推理(Cross-region inference):以 us. 开头的模型 ID 将使用跨区域推理配置文件

搭建新智能体脚手架

python3 {baseDir}/scripts/create-agent.py my-agent --provider ollama --model qwen3:latest
python3 {baseDir}/scripts/create-agent.py my-agent --provider anthropic
python3 {baseDir}/scripts/create-agent.py my-agent --provider bedrock
python3 {baseDir}/scripts/create-agent.py my-agent --provider openai --model gpt-4.1

生成一个开箱即用的智能体目录,包含工具、配置与入口文件。

运行智能体

python3 {baseDir}/scripts/run-agent.py path/to/agent.py "你的提示词"
python3 {baseDir}/scripts/run-agent.py path/to/agent.py --interactive

模型提供商参考(共 11 种)

提供商 类名 初始化方式 备注
Bedrock BedrockModel BedrockModel(model_id=...) 默认提供商,启动时立即导入
Ollama OllamaModel OllamaModel("http://host:11434", model_id=...) host 为位置参数
Anthropic AnthropicModel AnthropicModel(model_id=..., max_tokens=4096) max_tokens 必填
OpenAI OpenAIModel OpenAIModel(model_id=...) OPENAI_API_KEY
Gemini GeminiModel GeminiModel(model_id=...) api_key 通过 client_args 传入
Mistral MistralModel MistralModel(model_id=...) Mistral API 密钥
LiteLLM LiteLLMModel LiteLLMModel(model_id=...) 元提供商(支持 Cohere、Groq 等)
LlamaAPI LlamaAPIModel LlamaAPIModel(model_id=...) Meta Llama API
llama.cpp LlamaCppModel LlamaCppModel(...) 本地服务器,兼容 OpenAI API
SageMaker SageMakerAIModel SageMakerAIModel(...) 自定义 AWS 终端节点
Writer WriterModel WriterModel(model_id=...) Writer 平台

所有非 Bedrock 提供商均为 惰性加载(lazy-loaded) —— 仅在首次引用时导入对应依赖。

导入模式:from strands.models. import (或使用 from strands.models import 触发惰性加载)。

使用提示

  • Agent() 若未传入 model=,则需配置 AWS 凭据(因默认使用 Bedrock)
  • AnthropicModel 必须传入 max_tokens,否则将引发运行时错误
  • OllamaModel 的 host 为位置参数:OllamaModel("http://...", model_id="...")
  • 经 abliteration 处理的 Ollama 模型通常不支持工具调用 —— 面向工具调用场景的智能体应优先选用标准未修改模型
  • Swarm 智能体必须设置 name= 与 description=,以便正确执行交接路由
  • Agent(load_tools_from_directory=True) 将监听 ./tools/ 目录,实现工具文件热重载
  • 可通过 agent.tool.my_tool() 直接调用工具,绕过 LLM 路由
  • MCPClient 是 ToolProvider 实例 —— 可直接传入 tools=[mcp],无需在配合 Agent 使用时手动调用 list_tools_sync()
  • 会话管理器同时适用于 Agent、Swarm 与 Graph
  • 请锁定 strands-agents 版本 —— 该 SDK 尚处早期阶段,各版本间 API 可能发生变化

相关专题

更多
DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

0

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

0

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

0

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

XORM框架零基础入门教程
XORM框架零基础入门教程

本专题梳理XORM框架的入门路径,从框架定位、依赖安装、连接数据库到跑通第一个增删改查示例,讲清Engine初始化、日志开启与项目目录规划,并对比GORM等同类ORM的差异,帮助Go开发者建立整体认知。

2026.11.04

0

15

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

2026.11.03

0

18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
文心快码功能介绍
文心快码功能介绍

共0课时 | 0人学习

文心快码Agent使用手册
文心快码Agent使用手册

共0课时 | 0人学习

文心快码产品文档
文心快码产品文档

共0课时 | 0人学习