# 子智能体问题修复总结 ## 已修复的问题 ### 1. 前端子智能体显示问题 ✅ - **问题**:创建子智能体后不显示,只在完成后突然显示 - **原因**:`get_overview` 方法中调用了旧的 `_call_service`(HTTP 模式),但新实现是子进程模式 - **修复**:移除 `_call_service` 调用,改为直接检查进程状态 ### 2. 暗色模式适配 ✅ - **问题**:子智能体卡片没有暗色模式样式 - **修复**:在 `static/src/styles/components/panels/_left-panel.scss` 中添加暗色模式样式 ### 3. deliverables_dir 参数问题 ✅ - **问题**:模型每次调用时都忘了提供这个参数 - **修复**:将 `deliverables_dir` 改为必需参数(在 `required` 数组中) ### 4. 后台运行时的 system 消息插入 ✅ - **状态**:已经实现 - **位置**:`server/chat_flow_task_support.py` 中的 `process_sub_agent_updates` 函数 - **调用**:在 `server/chat_flow_tool_loop.py` 的 `execute_tool_calls` 中每次工具执行后调用 ## 还需要实现的功能 ### 空闲期间的 user 消息自动发送 ⏳ **需求**: - 当主智能体完成任务进入空闲状态时 - 如果还有子智能体在后台运行 - 需要轮询等待子智能体完成 - 完成后自动发送 user 消息触发新一轮对话 **实现位置**: 需要在主对话循环结束时添加检查逻辑,可能的位置: 1. `server/chat_flow_stream_loop.py` - 流式循环结束时 2. `server/chat_flow_task_main.py` - 主任务完成时 **实现逻辑**: ```python # 在对话循环结束时 async def check_background_sub_agents(web_terminal, messages, sender): manager = getattr(web_terminal, "sub_agent_manager", None) if not manager: return False # 检查是否有运行中的子智能体 running_tasks = [ task for task in manager.tasks.values() if task.get("status") not in {"completed", "failed", "timeout", "terminated"} and task.get("run_in_background") ] if not running_tasks: return False # 设置对话状态:有子智能体运行中 # 前端显示警告:切换对话会终止子智能体 # 轮询等待完成 while running_tasks: await asyncio.sleep(5) updates = manager.poll_updates() for update in updates: # 发送 user 消息触发新一轮 user_message = build_completion_user_message(update) messages.append({ "role": "user", "content": user_message, "metadata": {"sub_agent_completion": True} }) # 触发新一轮 API 调用 sender('user_message', {'content': user_message}) return True # 表示需要继续对话 # 重新检查运行中的任务 running_tasks = [ task for task in manager.tasks.values() if task.get("status") not in {"completed", "failed", "timeout", "terminated"} and task.get("run_in_background") ] return False ``` **user 消息格式**: ```python def build_completion_user_message(update): agent_id = update.get("agent_id") summary = update.get("summary") result_summary = update.get("result_summary") deliverables_dir = update.get("deliverables_dir") return f"""子智能体{agent_id} ({summary}) 已完成任务。 {result_summary} 交付目录:{deliverables_dir}""" ``` ## 测试清单 - [x] 创建子智能体后立即在前端显示 - [x] 暗色模式下子智能体卡片样式正确 - [x] deliverables_dir 必须提供,否则报错 - [x] 后台运行时工具执行后插入 system 消息 - [ ] 空闲期间子智能体完成后自动发送 user 消息 - [ ] 切换对话时提示会终止子智能体 - [ ] 强制切换对话时终止所有子智能体 ## 下一步 1. 实现空闲期间的 user 消息自动发送 2. 添加对话状态管理(标记有子智能体运行中) 3. 前端添加警告提示(切换对话会终止子智能体) 4. 测试完整流程