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) 的三个关键能力:

  1. 自学习指令 (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 中,以便将来更好地处理类似的问题。

  2. 动态子 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,并赋予其安全扫描器、漏洞检查器等专业工具。

  3. 知识积累与应用 (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 值得你深入研究。