152 lines
4.3 KiB
Markdown
152 lines
4.3 KiB
Markdown
|
|
# 实时文件保存功能
|
|||
|
|
|
|||
|
|
## 功能说明
|
|||
|
|
|
|||
|
|
现在,AutoGen SDLC 系统支持**实时文件保存**功能。在 Agent 协作过程中,每个 Agent 生成的内容会立即保存到文件系统中,而不需要等待整个工作流完成。
|
|||
|
|
|
|||
|
|
## 工作原理
|
|||
|
|
|
|||
|
|
### 修改前
|
|||
|
|
```
|
|||
|
|
对话开始 → PM Agent 发言 → QA Agent 发言 → Dev Agent 发言 → ... → 对话结束
|
|||
|
|
↓
|
|||
|
|
遍历所有消息
|
|||
|
|
↓
|
|||
|
|
批量保存文件
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 修改后
|
|||
|
|
```
|
|||
|
|
对话开始 → PM Agent 发言 → 立即保存 SRS.md
|
|||
|
|
↓
|
|||
|
|
QA Agent 发言 → 立即保存 test_sample.py
|
|||
|
|
↓
|
|||
|
|
Dev Agent 发言 → 立即保存 src_sample.py (或其他文件)
|
|||
|
|
↓
|
|||
|
|
...
|
|||
|
|
↓
|
|||
|
|
对话结束 (所有文件已实时保存完成)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 技术实现
|
|||
|
|
|
|||
|
|
1. **回调机制**: 使用 AutoGen 的 `register_reply` 方法注册回调函数
|
|||
|
|
2. **实时检测**: 每次 Agent 发言后立即检测内容并保存文件
|
|||
|
|
3. **文件识别**: 根据 Agent 名称和内容类型自动判断文件类型
|
|||
|
|
- PM_Agent → SRS.md (需求文档)
|
|||
|
|
- QA_Agent → test_sample.py (测试用例)
|
|||
|
|
- Dev_Agent → src_sample.py 或指定文件名的代码文件
|
|||
|
|
|
|||
|
|
## 使用方法
|
|||
|
|
|
|||
|
|
### 方法 1: 运行示例
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 设置 API Key
|
|||
|
|
$env:DASHSCOPE_API_KEY="your_api_key"
|
|||
|
|
|
|||
|
|
# 运行实时文件保存示例
|
|||
|
|
python usage_examples.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
示例会自动演示实时文件保存功能。
|
|||
|
|
|
|||
|
|
### 方法 2: 直接使用 API
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from autogen_sdls_system import AutoGenSDLCSystem
|
|||
|
|
|
|||
|
|
system = AutoGenSDLCSystem(
|
|||
|
|
api_key="your_api_key",
|
|||
|
|
workspace_dir="workspace" # 指定工作目录
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
result = system.run_workflow(
|
|||
|
|
"我需要一个电池健康状态预测 API",
|
|||
|
|
max_round=15
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 查看实时保存的文件
|
|||
|
|
print("生成的文件:", result["saved_files"])
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 文件命名规则
|
|||
|
|
|
|||
|
|
### PM Agent
|
|||
|
|
- **文件名**: `SRS.md`
|
|||
|
|
- **触发条件**: 内容包含"需求"、"SRS"或"软件需求规格说明书"
|
|||
|
|
- **内容格式**: Markdown 格式的 Software Requirements Specification
|
|||
|
|
|
|||
|
|
### QA Agent
|
|||
|
|
- **文件名**: `test_sample.py`
|
|||
|
|
- **触发条件**: 内容包含"test"、"测试"或"def test_"
|
|||
|
|
- **内容格式**: Python 测试代码(Pytest 风格)
|
|||
|
|
|
|||
|
|
### Dev Agent
|
|||
|
|
- **带文件名的代码块**:
|
|||
|
|
```python
|
|||
|
|
# File: my_module.py
|
|||
|
|
def my_function():
|
|||
|
|
pass
|
|||
|
|
```
|
|||
|
|
会保存为 `my_module.py`
|
|||
|
|
|
|||
|
|
- **不带文件名的代码块**: 保存为 `src_sample.py`
|
|||
|
|
- **触发条件**: 内容包含"def "、"class "或"import "
|
|||
|
|
|
|||
|
|
## 实时性保证
|
|||
|
|
|
|||
|
|
每个文件在以下时机立即保存:
|
|||
|
|
1. Agent 生成回复内容
|
|||
|
|
2. 回调函数被触发
|
|||
|
|
3. 解析内容并提取代码/文档
|
|||
|
|
4. 写入文件系统
|
|||
|
|
5. 输出日志:`💾 [实时保存] <文件路径>`
|
|||
|
|
|
|||
|
|
整个过程在毫秒级完成,用户可以在控制台中实时看到文件保存的提示。
|
|||
|
|
|
|||
|
|
## 优势
|
|||
|
|
|
|||
|
|
✅ **即时可见**: 无需等待整个流程完成,立即可见生成的文件
|
|||
|
|
✅ **过程追踪**: 可以观察每个 Agent 的贡献和输出顺序
|
|||
|
|
✅ **错误恢复**: 如果中途中断,已生成的文件不会丢失
|
|||
|
|
✅ **调试方便**: 可以实时检查每个阶段的输出质量
|
|||
|
|
✅ **人机协同**: 人工可以在流程进行中审查已生成的文件
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
⚠️ **文件覆盖**: 如果同一个 Agent 多次生成同类型文件,后生成的会覆盖先生成的
|
|||
|
|
⚠️ **工作目录**: 确保工作目录有写权限
|
|||
|
|
⚠️ **API 响应**: 某些模型响应可能包含多个代码块,只会保存第一个匹配的
|
|||
|
|
|
|||
|
|
## 示例输出
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
🚀 开始对话...
|
|||
|
|
|
|||
|
|
PM_Agent 正在分析需求...
|
|||
|
|
💾 [实时保存] workspace\SRS.md
|
|||
|
|
|
|||
|
|
QA_Agent 正在设计测试...
|
|||
|
|
💾 [实时保存] workspace\test_sample.py
|
|||
|
|
|
|||
|
|
Dev_Agent 正在编写代码...
|
|||
|
|
💾 [实时保存] workspace\src_sample.py
|
|||
|
|
|
|||
|
|
User_Proxy 正在执行测试...
|
|||
|
|
|
|||
|
|
Orchestrator 正在汇总结果...
|
|||
|
|
|
|||
|
|
✅ 工作流完成!
|
|||
|
|
📁 已保存 3 个文件:
|
|||
|
|
✓ workspace\SRS.md
|
|||
|
|
✓ workspace\test_sample.py
|
|||
|
|
✓ workspace\src_sample.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 相关文件
|
|||
|
|
|
|||
|
|
- `autogen_sdls_system.py`: 核心实现文件
|
|||
|
|
- `usage_examples.py`: 使用示例(包含示例 6)
|
|||
|
|
- `utils/callback_handler.py`: 回调处理器
|