用自然语言定义AI工作流:Strands Agent SOPs技术详解

本文深入介绍了由AWS开源的Strands Agent SOPs技术,这是一种使用标准化Markdown格式和自然语言定义AI智能体工作流的方法。它解决了AI智能体在可靠性与灵活性之间的核心矛盾,通过RFC 2119约束、参数化输入和SOP链式组合,实现复杂任务的自动化与一致性执行。

引入Strands Agent SOPs——AI智能体的自然语言工作流 | AWS开源博客

现代AI可以编写代码、创作交响乐并解决复杂的推理问题。那么,为什么让它们可靠地执行你想要的操作仍然如此困难?

构建能够持续执行复杂任务的可靠AI智能体仍然充满挑战。虽然现代语言模型擅长推理和问题解决,但将这种能力转化为可预测的工作流通常需要大量的状态机来编排智能体行为。代码定义的工作流对智能体行为提供了最大程度的控制,但改变系统需要编写数百行代码来适应新的行为。这代表了开发智能体时控制-灵活性谱系的一个极端。

在谱系的另一端,模型驱动的智能体完全摒弃了代码定义的行为,转而执行自己的编排。我们用智能体的自主性来取代定义工作流的数千行代码,让它自己决定解决问题的路径。模型驱动的智能体能够应对意外的输入——其非确定性的本质使其能够灵活适应任何情况。然而,这种灵活性是有代价的:难以以可靠的方式引导智能体以持续实现目标。

有没有一种方法可以兼顾两者之长呢?

于是,Agent SOPs(标准操作程序)应运而生:这是一种用于以自然语言定义AI智能体工作流的标准化Markdown格式,在灵活性和控制之间实现了强大的平衡。这些自然语言指令集将复杂过程转化为可重用、可共享的工作流,适用于不同的AI系统和团队。通过将结构化指导与使AI智能体强大的灵活性相结合,Agent SOPs使团队能够将经过验证的工作流编码成可重用模板,并在任何需要智能自动化的地方一致地应用它们。这个概念源于亚马逊内部构建者社区的创新,并因其引导智能体行为的潜力而在公司内迅速传播。

从内部创新到开源

在亚马逊,我们拥有一个由数万构建者组成的繁荣社区,他们积极尝试并在日常工作中创新使用AI。这个社区涵盖AWS服务团队、亚马逊零售运营、物流和研究团队,他们因围绕AI驱动开发工具进行快速实验和知识共享的文化而团结在一起。

当代理式AI编码助手首次在内部可用时,我们的构建者立即开始突破可能的边界。团队开始利用它们来自动化从代码审查和文档生成到事件响应和系统监控的一切事务。但随着采用规模扩大,我们遇到了多个问题:

行为不一致 可能是最令人沮丧的挑战。在开发过程中表现完美的同一个智能体,在处理真实场景时却产生了截然不同的结果。如果没有结构化指导,智能体在工具使用、任务优先级排序和输出格式方面会做出不同的决定,导致不可预测的结果,从而削弱了信心并令用户沮丧。

提示工程复杂性 创造了另一个采用障碍。为复杂工作流制作有效的提示需要领域和语言模型行为方面的深厚专业知识。团队花费数周时间完善复杂任务的提示,结果却发现他们的指令不能很好地转移到不同的模型或用例上。开发者变得不愿意更新提示,因为他们无法预测更改会如何影响输出,导致在进行任何修改之前需要执行(人工)评估,造成长时间的延迟。

当我们意识到我们需要一种达到"确定性-ish"甜点区的东西时,突破出现了:足够结构化以确保一致的结果,但又足够灵活以利用使AI智能体有价值的智能。这一洞见引导我们的社区开发了Agent SOPs,这是一种用于定义AI智能体工作流的标准化Markdown格式,在可靠性和适应性之间取得了平衡。

我们的社区迅速采纳了这个概念,因为它解决了每个团队都面临的实际问题。团队发现他们可以在几分钟内生成初始自动化,无需任何提示工程专业知识,并创建立即有用、易于理解和易于共享的工作流。这种结构化方法极大地减少了提示开发的试错过程,同时保留了使AI自动化有价值的智能。团队可以更高置信度地迭代SOP的特定行为,而不会破坏现有功能,使改进更快、更可预测。

如今,亚马逊团队在多种不同的用例中使用了数千个SOP,从代码审查和文档生成到事件响应和系统监控。一致的格式使得在团队之间共享成功方法变得容易,同时针对不同的上下文和需求进行适配。最初作为提示工程问题的一个简单解决方案,已成为在我们整个组织中普及AI专业知识的强大方式。

现在我们将Agent SOPs作为开源提供,因为我们相信这种方法可以使更广泛的AI开发社区受益。通过分享概念和实际示例,我们希望能加速可靠AI工作流在整个行业的采用。

什么是Agent SOPs?

Agent SOPs使用具有以下关键功能的标准化Markdown格式,以实现AI智能体可重复且可理解的行为:

  • 具有RFC 2119约束的结构化步骤 – 每个工作流步骤使用RFC 2119关键字,如MUST、SHOULD和MAY,以在不使用刚性脚本的情况下提供对智能体行为的精确控制,确保可靠的执行,同时保留智能体的推理能力。
  • 参数化输入 – 与其硬编码特定值,SOPs接受参数,以便为不同的项目、团队或需求定制行为。这将一次性使用的提示转化为灵活的模板,可以在广泛范围内应用,同时保持一致性。
  • 通过AI辅助轻松创作 – 团队可以在几分钟内创建新的SOPs。编码智能体可以阅读SOP格式规范,并根据自然语言描述生成新的工作流,使创作过程对任何人都可访问,无论其提示工程专业知识如何。
  • 进度跟踪和可恢复性 – Agent SOPs可以指示智能体在工作时记录其进度,从而便于了解正在发生的事情,并在出现问题时恢复。这种透明度对于调试提示和建立开发者对AI自动化的信任至关重要。

该格式简单但高度通用,适用于任何接受自然语言指令的地方。像Strands这样的智能体框架可以将SOPs嵌入为系统提示,像Kiro和Cursor这样的开发工具可以将它们用于结构化工作流,而像Claude和GPT-4这样的AI模型可以直接执行它们。虽然不同的模型在精确遵循指令的能力上可能有所不同,但标准化格式为工作流自动化提供了一致的基础。

演练:运行代码库摘要SOP

让我们通过运行codebase-summary SOP来了解Agent SOPs在实际中是如何工作的。在本例中,我们将使用Kiro CLI,但你可以在任何支持模型上下文协议(MCP)服务器的AI智能体中尝试此演练。

首先,安装strands-agents-sops Python包:

1
pip install strands-agents-sops

接下来,更新你的MCP服务器配置以包含strands-agents-sops MCP服务器:

1
2
3
4
5
6
7
8
{
  "mcpServers" : {
    "strands-agents-sops" : {
      "command" : "strands-agents-sops",
      "args" : []
    }
  }
}

这个MCP服务器使得SOPs可以作为MCP提示供你的AI助手调用。在Kiro CLI中,我们可以确认预打包的Agent SOPs现在可以通过/prompts命令获得:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[strands-agents-sop] > /prompts

Usage: You can use a prompt by typing '@<prompt name> [...args]'

Prompt                               Description                              Arguments (* = required)
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
strands-agents-sop (MCP):
- code-assist                        This sop guides the implementation of... user_input
- code-task-generator                This sop generates structured code ta... user_input
- codebase-summary                   This sop analyzes a codebase and gene... user_input
- pdd                                This sop guides you through the proce... user_input

接下来,我们调用codebase-summary SOP:

1
@codebase-summary

Kiro CLI读取SOP并要求提供必需和可选参数:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
> I'll help you run the codebase summary SOP. Let me gather the required parameters first.

Please provide the following parameters for the codebase analysis:

Required Parameters:
• **codebase_path**: Path to the codebase to analyze (default: current directory)

Optional Parameters:
• **output_dir**: Directory where documentation will be stored (default: ".sop/summary")
• **consolidate**: Whether to create a consolidated documentation file (default: false)

• **consolidate_prompt**: Description of how to structure the consolidated content
• **check_consistency**: Whether to check for inconsistencies across documents (default: true)
• **check_completeness**: Whether to identify areas lacking sufficient detail (default: true)
• **update_mode**: Whether to update existing documentation based on recent commits (default: false)

You can provide these parameters in any of these ways:
• Direct input in your response
• File path containing the configuration
• Just specify what you want to change from defaults

What parameters would you like to use for this codebase analysis?

我们以自然语言提供请求的参数。在这个例子中,我们将在strands-agents-sop python源代码上运行这个SOP:

1
2
[strands-agents-sop] > codebase_path: ~/github/agent-sop/python
consolidate: true

然后,智能体遵循SOP的结构化步骤,从建立目录结构开始。你可以看到智能体验证了代码库路径的存在,因为SOP约束指定智能体在继续之前必须验证路径存在:

1
2
3
4
5
6
7
## Step 1: Setup and Directory Structure

...

> ✅ Validated codebase path exists and is accessible
✅ Created directory .summary/
✅ Full analysis will be performed (not in update mode)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
## Step 6: Summary and Next Steps

## Summary

 Documentation generation complete!

### What Was Accomplished

 **Analyzed** Python package with 4 core modules and 5 SOP files
 **Generated** comprehensive documentation ecosystem in .summary/ directory:
   index.md: Knowledge base index with AI assistant instructions
   codebase_info.md: Project overview and structure
   architecture.md: System design and patterns
   components.md: Module responsibilities and functionality
   interfaces.md: APIs, CLI, and integration points
   data_models.md: SOP format and data structures
   workflows.md: Build process and operational procedures
   dependencies.md: External requirements and usage
   review_notes.md: Quality assessment and recommendations

 **Identified** system as modular CLI tool with MCP server capabilities

### Key Findings

 **Architecture**: Clean modular design with dynamic SOP loading
 **Integration**: Multiple interfaces (Python imports, MCP protocol, CLI, Anthropic skills)
 **Content Management**: File-based SOP storage with build-time synchronization
 **Dependencies**: Minimal external requirements (only MCP library)
 **Extensibility**: Easy to add new SOPs without code changes

<summary continues...>

通过使用这个SOP,通过调用一个简单的提示,我们的智能体能够在无需额外人工交互的情况下生成全面的代码库文档。SOP的约束确保了结构的一致性和完整性,而智能体的智能使内容适应特定的代码库特征。

SOP链式组合:构建完整的开发工作流

SOP链式组合使智能体能够通过将专注的SOPs连接成智能序列来执行复杂的多阶段工作流。初始的SOP仓库包含一个完整的开发工作流链,展示了SOPs如何协同工作,让你从理解现有代码库到实现新功能:

  1. codebase-summary 分析代码库并生成全面的文档,帮助人类和AI智能体理解系统架构、组件和工作流。该SOP通常作为基础,为后续自动化提供上下文。
  2. pdd 实现"提示驱动开发"方法论(Kiro规范驱动开发的内部前身),引导用户从粗略的想法开始,经过系统研究、需求澄清、解决方案设计和实施计划。在理解代码库后使用此SOP来处理复杂的功能规划。
  3. code-task-generator 将高级需求分解为可操作的开发任务,展示了SOPs如何处理需要理解上下文并对范围和优先级做出明智决策的创造性和分析性工作。将此作为独立工具使用,或与pdd SOP的输出结合使用。
  4. code-assist 实现一个测试驱动开发工作流,通过结构化的探索、计划、编码和提交阶段指导智能体进行功能实现。该SOP展示了如何平衡自动化执行与人工监督。

SOP链式组合通过工件交接进行工作:codebase-summary创建pdd在设计功能时引用的文档文件,pdd产生code-task-generator用于创建任务列表的规范,而code-assist则完全了解先前建立的架构和要求来实现这些任务。每个SOP将其发现浓缩为专注的输出,这些输出成为下一个步骤的简化输入。

这种链式方法实现了远超单个智能体处理能力的工作流。与其让一个智能体处理整个开发周期——导致其失去焦点并偏离预期行为——你可以将复杂问题分解为可管理的部分。在开发Agent SOPs时,这种模块化方法允许你独立构建和测试每个组件,然后将它们链接到复杂的工作流中。顺序结构消除了冗余工作(无需重复的代码库分析或信息收集),同时保持了使智能体有价值的智能适应,最终实现了采用整体方法难以达到的自动化规模。

Agent SOP集成

Agent SOPs不绑定于特定的代理式产品,可在多种环境中工作:

Strands智能体

Agent SOPs可以作为你的Strands智能体的系统提示使用。只需安装PyPI包,然后将SOP作为智能体的系统提示导入。以下是一个code-assist CLI智能体的示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from strands import Agent
from strands_tools import editor, shell
from strands_agents_sops import code_assist

agent = Agent(
  system_prompt=code_assist,
  tools=[editor, shell]
)

agent("Start code-assist sop")

while(True):
  agent(input("\nInput: "))

执行此Python脚本后,你可能会看到类似以下的输出:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
I'll help you implement a code task using the test-driven development workflow. Let me gather the required parameters to get started.

Please provide the following information:

**Required:**
- **task_description**: What would you like to implement? (You can provide a detailed specification, requirements, acceptance criteria, or even a rough idea that we'll refine together. You can also provide a file path or URL if the description is in a document)

**Optional:**
- **additional_context**: Any supplementary information that would help with understanding the implementation context (can also be a file path or URL)
- **documentation_dir**: Directory for planning documents (default: ".sop/planning")
- **repo_root**: Root directory of the repository (default: current working directory)
- **task_name**: A short, descriptive name for the task (I'll generate one if not provided)
- **mode**: Interaction mode:
  - "interactive" (default): I'll collaborate with you and ask for confirmation at each step
  - "auto": I'll execute autonomously after setup with no further interaction required

Please provide these details so we can begin the implementation process.

基于前面codebase-summary的例子,你可以创建一个Strands智能体,自动保持你的文档最新:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from strands import Agent
from strands_tools import editor, shell, git
from strands_agents_sops import codebase_summary

doc_agent = Agent(
 system_prompt=codebase_summary,
 tools=[editor, shell, git]
)

# Run in update mode to refresh docs based on recent commits
doc_agent("Run codebase-summary with update_mode: true")

这实现了持续文档维护,无需人工干预,随着新更改的进行自动更新你的代码库摘要。

Claude技能

Agent SOPs与Claude的技能系统完全兼容,允许你教授Claude可以在对话和项目中重用的专用工作流。

每个Agent SOP都可以自动转换为Anthropic的技能格式:

1
2
3
4
5
# Generate Skills format from SOPs
strands-agents-sops skills

# Or specify custom output directory
strands-agents-sops skills --output-dir my-skills

这将创建单独的技能目录:

1
2
3
4
5
6
7
8
9
skills/
├── code-assist/
│   └── SKILL.md
├── codebase-summary/
│   └── SKILL.md
├── code-task-generator/
│   └── SKILL.md
└── pdd/
    └── SKILL.md

然后,你可以按照Anthropic的文档开始将这些SOPs作为技能使用。

其他产品集成

Agent SOPs适用于各种AI开发环境。虽然不同的LLM在遵循指令的能力上可能有所不同,但标准化格式在平台上提供了一致的结果。以下是团队使用Agent SOPs的其他方式:

  • Kiro IDE引导文件和钩子 – SOPs可以集成到Kiro IDE的工作流系统中,为特定的开发任务提供结构化指导。
  • Claude Code和Cursor中的自定义命令 – SOPs非常适合作为自定义命令,用于调用常见开发工作流的特定SOPs。
  • Python模块 – 编程访问支持集成到自定义应用程序和更大的自动化系统中。

创作Agent SOPs

Agent SOPs最强大的方面之一是通过对话式创作轻松创建它们。我们提供了一个Agent SOP格式规则,引导AI模型捕获你的自然工作流描述并将其转换为标准化格式。让我们通过为一个简单的会议记录处理SOP创作来演示。

根据你使用的AI应用程序,你可以将Agent SOP格式安装为引导文件或规则。然而,出于本演练的目的,我们让Kiro CLI直接读取Agent SOP规则:

1
2
3
4
[strands-agents-sop] > Run `strands-agents-sops rule`
...
> The command executed successfully and displayed the Agent SOP format specification.
...

现在Kiro CLI理解了Agent SOP格式,我们只需用自然语言向我们的AI助手描述我们想要什么:

1
[strands-agents-sop] > I want to create an Agent SOP that takes meeting notes and generates action items, decisions made, and follow-up tasks with assigned owners and deadlines.

AI助手在访问了SOP格式规范后,在几秒钟内生成了第一稿Agent SOP。它创建了适当的参数,将工作流结构化为逻辑步骤,并添加了RFC 2119约束以使SOP可靠且可重复。

由于它是用自然语言编写的,Agent SOP易于阅读。我们可以在单独的会话中尝试运行它,然后回来与我们的智能体聊天,迭代改进SOP。例如,我们可以改进这个SOP以使用特定的文件夹结构,在会议记录文件夹和后续任务文件夹中记录行动项,并将做出的决定添加到项目特定的决策日志中。

同样的方法适用于任何你想要自动化的工作流。只需用自然语言描述过程,然后让AI辅助处理SOP创作的技术细节。请注意,如果你希望你的SOP使用特定的MCP工具,你需要在创作SOP时加载这些MCP服务器。

结论

Agent SOPs解决了限制AI自动化采用的基本矛盾:可靠性与灵活性之间的张力。通过将结构化指导与智能推理相结合,它们使团队能够快速捕获专业知识,并在不同的AI系统和上下文中一致地应用。使Agent SOPs在亚马逊获得成功的半确定性甜点区,现在可供各地的客户用来构建更可靠、更强大的AI系统。

准备好开始了吗?

  • 访问Agent SOPs GitHub仓库获取完整文档和示例
  • 安装包:pip install strands-agents-sops
  • 启动MCP服务器:strands-agents-sops
  • 在你的下一个项目上尝试codebase-summary SOP
  • 将SOPs链接起来以实现复杂的开发工作流

我们很高兴看到客户如何使用Agent SOPs解决他们独特的自动化挑战,以及更广泛的社区将涌现出哪些创新工作流。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计