如果文章对你有帮助,请点个"关注"
核心概念
process 工具是 Simple AI 系统中的后台任务管理器 ,它实现了前台-后台分离的并行处理架构。
🔍 核心设计思想
项目经理-工人模型
| 角色 | 类比 | 职责 |
|---|---|---|
| 用户 | 客户/老板 | 提出需求,接收结果 |
| 前台 AI | 项目经理 | 接受任务,分配工作,汇报进度 |
| 子agent | 工人 | 默默干活,不直接与客户沟通 |
| process 工具 | 项目管理工具 | 查看工人状态、进度、问题 |
工作机制详解
1. 创建子agent
javascript
// 前台 AI 创建后台任务
run_command("python monitor_stocks.py", yieldMs=0)
→ 创建子agent,返回 sessionId="stock_monitor_123"
→ 子agent开始在后台独立运行
2. 管理权归属
规则:创建者即管理者
- 谁创建子agent,谁就负责管理
- 创建者可以看到工作状态和进度
- 创建者负责向用户汇报
3. 工作流程示例
javascript
// 完整工作流程
1. 用户:"帮我监控股票价格变化"
2. 前台AI:"好的,我开个子agent帮你监控"
3. 前台AI执行:run_command("python monitor_stocks.py", yieldMs=0)
→ 创建子agent,返回 sessionId="stock_monitor_123"
4. 前台AI继续和用户聊天(不阻塞)
5. 前台AI可以随时:process(action="log", sessionId="stock_monitor_123")
6. 子agent发现异常 → 前台AI向用户汇报:"股票有异动!"
7. 任务完成 → 前台AI汇报:"监控任务已完成"
技术实现原理
会话存储结构
javascript
// 会话管理器
this.processSessions = {
"ping_456": {
sessionId: "ping_456",
command: "ping 8.8.8.8 -t",
createdBy: "阿财", // 创建者标识
owner: "阿财", // 管理者标识
createdTime: "2026-03-30T23:10:00Z",
child: <child_process对象>, // 实际的进程对象
stdout: "", // 标准输出缓存
stderr: "", // 标准错误缓存
exited: false, // 是否已退出
exitCode: null // 退出代码
}
}
spawn vs execAsync 的选择
| 场景 | 使用 | 原因 |
|---|---|---|
| 后台任务 | spawn |
立即返回,流式输出,可控制生命周期 |
| 同步任务 | execAsync |
等待完成,一次性输出,shell特性支持 |
管理权限规则
所有权原则
- 创建者所有:谁创建谁管理
- 职责明确:创建者负责监控、汇报、清理
- 用户最终控制:用户可以通过创建者控制一切
- 隔离性:不同AI的任务彼此独立
汇报机制
- 定期主动汇报:创建者定期向用户汇报进度
- 重要事件汇报:完成任务、遇到问题、发现结果
- 用户查询:用户可以随时询问任务状态
- 日志追溯:所有操作有记录可查
实际应用场景
场景1:下载大文件
javascript
// 用户:帮我下载这个100GB的大文件
// 前台AI:好的,我开个子agent帮你下载
1. 前台AI:run_command("wget https://bigfile.iso", yieldMs=0)
→ 创建下载任务,sessionId="download_789"
2. 前台AI和用户继续聊其他话题
(下载在后台进行,不阻塞聊天)
3. 每5分钟前台AI检查一次进度
process(action="log", sessionId="download_789")
4. 下载到50%时汇报:"下载已完成50%,预计还需1小时"
5. 下载完成时汇报:"文件下载完成,保存在xxx目录"
6. 用户问:"下载怎么样了?"
前台AI:process(action="log", sessionId="download_789") → 展示进度
场景2:监控日志
javascript
// 监控服务器日志,发现错误立即报警
run_command("tail -f /var/log/app.log | grep ERROR", yieldMs=0)
→ 后台监控,发现ERROR时前台AI立即汇报
场景3:数据处理
javascript
// 处理大量数据,需要长时间运行
run_command("python process_big_data.py", yieldMs=0)
→ 后台处理,前台继续响应其他请求
→ 处理完成后汇报结果
特殊情况处理
1. AI 重启或崩溃
javascript
// 如果前台AI崩溃重启
前台AI重启 → this.processSessions 清空
→ 子agent可能还在运行(变成孤儿进程)
→ 需要手动清理
2. 用户直接干预
javascript
// 用户说:"给我看看那个后台任务"
前台AI展示:process(action="log", sessionId="ping_456")
// 用户说:"终止它"
前台AI执行:process(action="kill", sessionId="ping_456")
→ 管理者依然是前台AI,但根据用户指令执行
3. 跨会话管理
javascript
// 通常不允许跨用户/跨AI管理
用户1的AI创建任务 → sessionId="task_123"
用户2的AI想管理 → 需要权限检查
// 设计上保持隔离性更安全
与其它工具的关系
process 与 sessions 的区别
| 工具 | 管理对象 | 生命周期 | 可见性 |
|---|---|---|---|
| process | 后台进程/子agent | 短/中/长期 | 隐藏(后台) |
| sessions | AI对话会话 | 长期 | 可见(前台) |
process 与 run_command 的关系
run_command:创建任务的入口process:管理已创建的任务- 两者配合实现完整的任务生命周期管理
设计优势
1. 并行处理
- 前台响应即时请求
- 后台处理耗时任务
- 用户无需等待
2. 资源隔离
- 后台任务不影响前台响应速度
- 内存、CPU资源分离
- 错误隔离(后台崩溃不影响前台)
3. 用户体验
- 即时响应:用户不会看到"正在处理中..."
- 进度透明:随时了解后台任务状态
- 控制灵活:可随时启动、暂停、终止
4. 系统稳定性
- 短任务用 execAsync(稳定)
- 长任务用 spawn(资源友好)
- 双模式保证兼容性和性能
最佳实践
创建后台任务的时机
适合后台:
- 下载大文件
- 数据处理(>30秒)
- 实时监控
- 编译构建
不适合后台:
- 简单命令(dir, ls)
- 快速查询
- 即时计算
汇报频率建议
- 高频任务:每1-5分钟汇报一次进度
- 中频任务:每10-30分钟汇报一次
- 低频任务:只在完成或出错时汇报
- 重要任务:实时汇报关键事件
资源管理
- 内存监控:后台任务不应占用过多内存
- 超时设置:长时间任务应有超时机制
- 自动清理:完成任务后自动清理会话
- 错误处理:后台任务崩溃应有恢复机制
扩展方向
1. 增强会话管理
- 会话分组(按项目、按类型)
- 会话优先级
- 资源限制(CPU/内存配额)
2. 增强监控能力
- 实时性能监控
- 进度条可视化
- 预测完成时间
3. 增强协作能力
- 多AI协作管理同一任务
- 任务交接机制
- 审计日志
4. 增强安全性
- 任务权限控制
- 数据隔离
- 执行沙箱
总结
process 工具的核心价值在于实现了 "聊天不等待,工作继续干" 的并行处理模式。通过创建子agent,AI能够:
- 同时处理多个任务:前台聊天 + 后台工作
- 保持响应性:用户永远得到即时响应
- 管理复杂流程:长时间、多步骤的任务
- 提供透明进度:用户随时了解工作状态
这种设计让AI从"一问一答的聊天机器人"升级为"多任务并行的智能助手",大大提升了实用性和效率。
如果文章对你有帮助,请点个"关注"