动态工作流(Batch 特性)

动态工作流(Batch 特性)

AuraCode 提供大规模并行变更编排系统,支持任务分解、并行执行和进度追踪。


概述

Batch 特性允许用户将大规模变更分解为可并行执行的子任务,通过多代理协同工作,显著提高大规模重构和批量操作的效率。

适用场景
  • 大规模代码重构(跨 50+ 文件)
  • 批量 API 迁移
  • 统一代码风格调整
  • 依赖升级与兼容性修复
  • 文档批量更新

基本用法

/batch <描述>
参数说明
  • 描述:自然语言描述要执行的批量变更
示例
/batch 将所有 Python 文件中的 print 语句改为 logging.info
/batch 升级 requirements.txt 中所有依赖到最新版本
/batch 使用 black 格式化所有 Python 文件

核心能力

1. 任务分解

AuraCode 自动分析用户描述,识别可并行的变更单元:

  • 文件级分解 — 每个文件作为独立任务
  • 目录级分解 — 按目录组织任务
  • 逻辑级分解 — 按变更类型分组

2. 并行执行

通过子代理系统实现真正的并行:

  • 每个子任务分配独立的子代理
  • 子代理同时工作,互不干扰
  • 实时显示每个子任务的进度

3. 进度追踪

实时显示任务执行状态:

批量任务进度:
[████████░░] 80% (4/5 完成)

✓ file1.py - 已更新 (2 处修改) ✓ file2.py - 已更新 (3 处修改) ✓ file3.py - 已更新 (1 处修改) ✓ file4.py - 已更新 (4 处修改) ⚙ file5.py - 处理中...

4. 错误恢复

部分失败时自动处理:

  • 重试机制 — 自动重试失败的任务
  • 降级策略 — 跳过无法处理的文件
  • 冲突解决 — 自动检测并解决冲突

5. 结果聚合

汇总所有子任务的执行结果:

  • 统计成功/失败数量
  • 展示变更详情
  • 提供回滚选项

执行流程

Phase 1: 任务分析

1. 解析用户描述
2. 识别目标文件和目录
3. 评估变更范围和复杂度

Phase 2: 任务分解

1. 将大任务拆分为独立子任务
2. 确定子任务间的依赖关系
3. 计算最优并行策略

Phase 3: 代理分配

1. 为每个子任务创建子代理
2. 分配独立的上下文和工具
3. 设置执行超时和重试策略

Phase 4: 并行执行

1. 所有子代理同时开始工作
2. 实时报告进度和状态
3. 处理执行中的异常

Phase 5: 结果聚合

1. 收集所有子任务的输出
2. 合并变更结果
3. 生成执行报告

Phase 6: 冲突处理

1. 检测文件冲突
2. 自动解决或提示用户
3. 提供回滚选项

使用示例

示例 1: 批量重构

场景:将所有 Python 文件中的 print 改为 logging.info
用户: /batch 将所有 Python 文件中的 print 语句改为 logging.info

执行流程: 1. 扫描项目,找到 45 个 Python 文件 2. 分解为 45 个子任务(每个文件一个) 3. 创建 10 个子代理并行工作 4. 每个子代理处理 4-5 个文件 5. 实时显示进度 6. 汇总结果:修改了 127 处 print 语句

输出
批量任务完成 ✓

总计: 45 个文件 成功: 43 个文件 失败: 2 个文件 (已跳过)

变更详情:

  • 替换 print 语句: 127 处
  • 添加 import logging: 15 个文件
  • 修复格式问题: 8 个文件

失败文件:

  • legacy/old.py (语法错误,无法解析)
  • tests/test_legacy.py (依赖缺失)

是否要查看变更详情?(y/n)

示例 2: 批量依赖升级

场景:升级所有依赖到最新版本
用户: /batch 升级 requirements.txt 中所有依赖到最新版本,并修复兼容性问题

执行流程: 1. 读取 requirements.txt (25 个依赖) 2. 查询每个依赖的最新版本 3. 分解为 3 个子任务: - 升级主要版本 (5 个) - 升级次要版本 (12 个) - 升级补丁版本 (8 个) 4. 并行执行升级 5. 运行测试验证兼容性 6. 修复发现的问题

示例 3: 批量格式化

场景:统一代码风格
用户: /batch 使用 black 格式化所有 Python 文件,并修复 lint 错误

执行流程: 1. 找到所有 Python 文件 (150 个) 2. 分解为 5 个子任务 (每个 30 个文件) 3. 并行运行 black 格式化 4. 运行 flake8 检查 lint 5. 自动修复可修复的问题 6. 报告无法自动修复的问题


高级配置

并行度控制

默认并行度为 10 个子代理,可通过配置调整:

# config.yaml
batch:
  max_parallel: 15        # 最大并行数
  timeout_per_task: 300   # 每个子任务超时时间(秒)
  retry_count: 2          # 失败重试次数

文件过滤

可以指定只处理特定类型的文件:

/batch 在所有 .py 文件中添加类型注解
/batch 在 src/ 目录下统一代码风格
/batch 排除 tests/ 目录,升级所有依赖

干运行模式

先预览变更,不实际执行:

/batch --dry-run 将所有 print 改为 logging

输出示例:

干运行模式 - 不会实际修改文件

计划变更:

  • 45 个文件将被修改
  • 预计修改 127 处
  • 预计耗时 2-3 分钟

是否继续执行?(y/n)


最佳实践

1. 明确描述

好的描述

/batch 将所有 Python 文件中的 print 语句改为 logging.info

模糊的描述

/batch 修改代码

2. 分阶段执行

对于大规模变更,建议分阶段执行:

# 第一阶段:预览
/batch --dry-run 升级所有依赖

第二阶段:执行

/batch 升级所有依赖

第三阶段:验证

/batch 运行所有测试并修复失败

3. 备份重要文件

在执行批量变更前,建议先备份:

git add .
git commit -m "Backup before batch operation"

4. 使用版本控制

批量操作后,使用 Git 审查变更:

git diff                    # 查看所有变更
git diff --stat             # 查看变更统计
git diff file.py            # 查看特定文件的变更

常见问题

Q: 批量操作会阻塞主会话吗?

A: 不会。批量操作在后台并行执行,你可以继续其他工作。

Q: 如果部分任务失败怎么办?

A: AuraCode 会自动重试失败的任务,如果仍然失败,会跳过并报告原因。

Q: 可以取消正在执行的批量任务吗?

A: 可以,使用 /batch cancel 取消所有正在执行的任务。

Q: 批量操作支持回滚吗?

A: 支持,使用 /batch rollback 回滚到操作前的状态。


相关工具

  • spawn_subagent — 创建子代理
  • join_subagent — 等待子代理完成
  • list_subagents — 列出所有子代理
  • subagent_stats — 查看子代理统计

参见