AI Agent,尤其是基于大模型的 Agent,正成为技术领域的热点。然而,一个令人不安的现实是,我们构建的许多“智能”Agent,在生产环境中,往往只是披着智能外衣的 任务执行者 (Task Runners)。它们可能在演示中表现出色,但在实际应用中却显得力不从心。本文将深入探讨这一问题,并介绍 AWS 推出的 Strands Agents SDK,它提供了一种全新的 模型驱动 (Model-Driven) 方法,旨在让 Agent 真正变得智能,而不仅仅是执行预设的任务。
AI Agent 开发的痛点:过于复杂的 Workflow
当前主流的 AI Agent 开发框架,例如 LangChain 和 AutoGen,在一定程度上解决了 Agent 的编排和协作问题。但是,它们也引入了新的复杂性。很多框架都依赖于复杂的 Workflow 和状态机,使得 Agent 将大量时间花费在导航流程上,而不是解决实际问题。例如,LangGraph 允许开发者精细地控制 Agent 的行为,但同时也要求开发者具备深厚的图论知识,才能理解和调试复杂的流程。这种过度工程 (Overengineering) 的方法,虽然提供了看似强大的控制能力,却牺牲了开发效率和可维护性。此外,一些框架侧重于模拟多 Agent 之间的对话,虽然在演示中效果很好,但在处理实际任务时却难以胜任。
Strands Agents:模型驱动的革命性方法
AWS Strands Agents SDK 采用了一种截然不同的 模型驱动 (Model-Driven) 方法。它放弃了复杂的 Workflow 和状态机,转而信任大模型本身的推理能力。Strands 的核心理念可以用一个简单的架构概括:两个线程协同工作,一个是 模型 (Model),负责推理和决策;另一个是 工具 (Tools),负责执行动作。这种简洁的设计,极大地简化了 Agent 的开发过程。
from strands import Agent
# 创建 Agent 实例
agent = Agent()
# 发送请求,分析客户反馈
response = agent("Help me analyze our customer feedback")
上述代码展示了使用 Strands 创建 Agent 并执行任务的简洁性。开发者只需要实例化一个 Agent 对象,并向其发送自然语言指令,Agent 就会自动选择合适的工具,完成任务。这种 模型驱动 (Model-Driven) 的方法,将 Agent 的核心智能放在了大模型本身,而不是复杂的流程编排上。
AWS 内部使用 Strands Agents 构建了 Q CLI 工具,并在短短三周内完成了开发。这充分证明了 Strands 的高效性和实用性。相比之下,很多团队可能需要花费更长的时间,仅仅是为了确定命名规范。
三大能力:区分真正智能 Agent 与任务执行者
通过实验和研究,我们总结出区分真正智能 Agent 和 任务执行者 (Task Runners) 的三个关键能力:
-
自学习指令 (Self-Improving Instructions):智能 Agent 不仅仅是执行预设的指令,而是能够根据经验不断改进自身的方法。Strands 允许 Agent 动态更新自己的 System Prompt,从而将学习到的知识融入到自身的行为模式中。
from strands import Agent, tool import os from datetime import datetime @tool def adaptive_prompt_manager(action: str, learning: str = "", context: str = "experience") -> str: """Agent dynamically updates its own system prompt.""" current_prompt = os.getenv("SYSTEM_PROMPT", "") if action == "update": # Integrate learned knowledge into prompt timestamp = datetime.now().strftime("%Y-%m-%d") learning_entry = f"\n\n[LEARNED-{timestamp}] {context.upper()}: {learning}" updated_prompt = current_prompt + learning_entry os.environ["SYSTEM_PROMPT"] = updated_prompt return f"System prompt updated with {context} learning" elif action == "view": return f"Current system prompt:\n{current_prompt}" # Self-evolving agent evolving_agent = Agent( tools=[adaptive_prompt_manager], system_prompt="""You continuously adapt based on experience. Use adaptive_prompt_manager to store successful patterns and lessons.""" )
在上述代码中,
adaptive_prompt_manager
工具允许 Agent 根据经验更新SYSTEM_PROMPT
,从而实现自学习。例如,当 Agent 成功解决一个问题后,它可以将解决方案记录到SYSTEM_PROMPT
中,以便将来更好地处理类似的问题。 -
动态子 Agent 创建 (Dynamic Sub-Agent Creation):智能 Agent 能够识别自身能力的不足,并主动创建专业的子 Agent 来完成特定的任务。Strands 允许 Agent 根据任务的需要,动态地创建具有特定角色和工具的子 Agent。
from strands import Agent, tool @tool def spawn_specialist_agent(task: str, specialization: str, model_type: str = "balanced") -> str: """Creates specialized sub-agents and delegates tasks."""
# Model selection strategy model_configs = { "fast": "us.amazon.nova-pro-v1:0", "balanced": "us.anthropic.claude-sonnet-4-20250514-v1:0", "smart": "us.anthropic.claude-opus-4-20250514-v1:0" } # Specialization-based configurations specialist_configs = { "security": { "prompt": "You are a cybersecurity expert. Focus on vulnerabilities and compliance.", "tools": "security_scanner,vulnerability_checker,audit_tool" }, "devops": { "prompt": "You are a DevOps engineer. Focus on infrastructure and automation.", "tools": "shell,kubernetes_api,monitoring_api" }, "analysis": { "prompt": "You are a data analyst. Focus on insights and visualization.", "tools": "python_repl,calculator,visualization_tool" } } config = specialist_configs.get(specialization, specialist_configs["analysis"]) selected_model = model_configs.get(model_type, model_configs["balanced"]) # Create sub-agent via workflow dispatch (GitHub Actions pattern) result = create_subagent( repository="your-org/agent-workflows", workflow_id="specialist-agent.yml", task=task, model=selected_model, tools=config["tools"], system_prompt=config["prompt"] ) return f"{specialization} specialist created: {result}"
# Master orchestrator
orchestrator = Agent(
tools=[spawn_specialist_agent, adaptive_prompt_manager],
system_prompt="You coordinate complex tasks by creating specialized sub-agents."
)
在上述代码中,
spawn_specialist_agent
工具允许 Agent 根据任务类型创建不同的子 Agent。例如,当需要进行安全审计时,Agent 可以创建一个具有安全专家角色的子 Agent,并赋予其安全扫描器、漏洞检查器等专业工具。 -
知识积累与应用 (Knowledge That Grows):智能 Agent 应该能够积累和应用知识,形成机构记忆。Strands 允许 Agent 将知识存储到企业知识库中,并在需要时检索和应用这些知识。
from strands import Agent, tool import os from datetime import datetime @tool def enterprise_knowledge_system(action: str, content: str = "", query: str = "", importance: int = 5) -> str: """Production-ready knowledge management."""
knowledge_base_id = os.getenv("STRANDS_KNOWLEDGE_BASE_ID") timestamp = datetime.now().isoformat() if action == "store": # Structured knowledge entry formatted_content = f""" [TIMESTAMP] {timestamp} [IMPORTANCE] {importance}/10 [CONTENT] {content} [CONTEXT] {os.getenv("CURRENT_CONTEXT", "general")} """ # Store in Bedrock Knowledge Base result = agent.tool.store_in_kb( content=formatted_content, title=f"Knowledge-{timestamp}", knowledge_base_id=knowledge_base_id ) return f"Knowledge stored (importance: {importance})" elif action == "retrieve": # Intelligent knowledge retrieval memories = agent.tool.retrieve( text=query, knowledgeBaseId=knowledge_base_id, numberOfResults=5 ) return f"Retrieved knowledge: {memories}" elif action == "learn_pattern": # Pattern recognition and storage pattern_content = f"SUCCESS PATTERN: {content}" return enterprise_knowledge_system("store", pattern_content, importance=9)
# Knowledge-enabled autonomous agent
autonomous_agent = Agent(
tools=[
enterprise_knowledge_system,
adaptive_prompt_manager,
spawn_specialist_agent
],
system_prompt="""You are an autonomous agent with:
- Adaptive learning (update your own behavior)
- Task delegation (create specialists when needed)
- Institutional memory (store and retrieve knowledge)
Always learn from experience and improve your capabilities."""
)
在上述代码中,
enterprise_knowledge_system
工具允许 Agent 存储、检索和学习知识。Agent 可以将成功的解决方案、重要的经验教训等存储到知识库中,并在需要时检索这些知识,从而避免重复劳动,提高效率。这不仅仅是简单的 RAG (Retrieval-Augmented Generation) 或者向量存储,而是真正实现了知识的合成和应用。
Strands 的优势:速度、工具、观测性、灵活性
Strands Agents SDK 具有以下显著优势:
- 开发速度 (Development Speed):团队可以在几天内完成以前需要数月才能完成的项目。Q CLI 的案例并非个例,很多团队都报告了使用 Strands 后开发效率的大幅提升。
- 工具生态 (Tool Ecosystem):Strands 支持 MCP 协议,这意味着它可以利用数千个预构建的工具。此外,Strands 还内置了 20 多个常用的工具,例如文件操作、Shell 命令、HTTP 请求等,避免了重复造轮子。
- 内置观测性 (Built-in Observability):Strands 提供了开箱即用的 OpenTelemetry 支持。只需要设置几个环境变量,就可以获得完整的分布式追踪、指标和日志。开发者可以清晰地了解 Agent 的思考过程、使用的工具、每个步骤花费的时间。无需额外的库和复杂的设置。
- 模型灵活性 (Model Flexibility):可以轻松地在 Bedrock、OpenAI、Anthropic 等不同的大模型之间切换,而无需修改架构。
- 真正的开源 (True Open Source):Strands 采用 Apache 2.0 协议,完全开源。
- 经过实战检验 (Battle-Tested):Strands 已经被用于 Amazon Q Developer、AWS Glue 等关键服务,证明了其可靠性和稳定性。
特别值得一提的是,Strands 内置了观测性功能。对于大多数框架来说,观测性是需要后期添加的,例如 LangChain 需要安装单独的包,而 AutoGen 的多 Agent 对话追踪则非常困难。Strands 从一开始就考虑到了生产环境的需求,提供了开箱即用的观测性功能,让开发者可以更好地理解和调试 Agent。
Agent 的进化:你站在哪一边?
我们并不是建议你立即放弃当前使用的框架。但是,如果你仍然像 2022 年那样手动编写 Workflow,那么你构建的只是昨天的 Agent。真正的问题不是你的 Agent 能否执行任务,而是它们在执行任务的过程中是否变得更智能。如果你的 Agent 无法进化,那么它们只是披着智能外衣的 API 包装器。
Strands Agents SDK 提供了一种全新的、 模型驱动 (Model-Driven) 的方法,让 Agent 真正变得智能。通过自学习指令、动态子 Agent 创建和知识积累与应用,Strands 帮助开发者构建能够不断进化、适应变化的智能 Agent。
从理论到实践:构建真正智能的系统
在接下来的文章中,我们将使用 Strands 构建一个真正的、可以用于生产环境的系统,并展示如何实际应用自学习指令、动态子 Agent 创建和知识积累与应用这三个核心原则。我们将向你展示这种不断进化的智能在实践中如何工作,你可以亲自测试它。
参考资料:
PS: 如果你的 Agent 框架的配置比代码还多,我们需要好好聊聊。欢迎私信交流。
PPS: 感谢 Strands 团队让 Agent 开发变得简单而有趣。我从未对一个框架感到如此兴奋。
总而言之,AWS Strands 通过其简洁的设计理念和强大的功能特性,为AI Agent 开发带来了新的思路。它强调信任大模型的推理能力,并提供了一套完整的工具和机制,帮助开发者构建真正智能、能够不断进化的 Agent。 如果你正在寻找一种更高效、更灵活的 Agent 开发方案,那么 Strands Agents SDK 值得你深入研究。