3.3 KiB
3.3 KiB
| name | description |
|---|---|
| sub_agent_python_rewrite | 当需要了解子智能体当前实现、修改子智能体代码、或排查子智能体相关问题时,应该索引本记忆 |
子智能体现状(Python 主进程内协程)
核心变更
子智能体已经从 Node.js 子进程(easyagent/src/batch/index.js)彻底改为 Python 主进程内协程。
代码位置
所有子智能体专用代码集中在 modules/sub_agent/ 包内:
modules/sub_agent/
├── __init__.py # 导出 SubAgentManager
├── manager.py # 任务调度、创建、终止、状态查询
├── task.py # LLM 循环、模型调用、工具执行驱动
├── toolkit.py # 8 个工具定义、工具结果格式化、模型配置解析
├── prompts.py # 用户消息和系统提示词构建
├── tools.py # search_workspace、read_mediafile 本地实现
├── state.py # 状态加载、保存、刷新、超时、僵尸清理 Mixin
├── stats.py # 统计摘要与结果消息组装 Mixin
└── creation.py # 创建参数校验、任务 ID 生成、交付目录解析 Mixin
执行机制
- 子智能体作为
asyncio.Task在独立的后台事件循环线程中运行(避免与 Flask-SocketIO threading 模式冲突)。 - 所有实际工具调用都通过
WebTerminal.handle_tool_call()执行,因此自然复用主进程的宿主机沙箱 / Docker 容器链路。 - 子智能体自身不再被整体沙箱限制网络(因为它需要调用模型 API),网络调用走
utils.api_client.DeepSeekClient。 - 权限固定为
unrestricted,但工具执行本身受主进程沙箱/容器/审批链路约束。
模型配置
- 子智能体模型独立配置,不跟主模型合并。
- 配置文件:
~/.astrion/astrion/config/sub_agent_models.json(由SUB_AGENT_MODELS_CONFIG_FILE指定)。 - 默认读取该文件中的
default_model和models列表。
可用工具(8 个)
read_file- 读取/搜索/抽取文件write_file- 创建或覆盖文件(支持 append)edit_file- 精确字符串替换,支持replacements数组和replace_allrun_command- 执行命令(走主进程沙箱/容器)web_search- 网络搜索extract_webpage- 网页内容提取search_workspace- 工作区搜索read_mediafile- 读取图片/视频文件(base64 返回)
easyagent/ 目录状态
easyagent/是旧的 Node.js 子智能体实现,目前暂时保留但已不再使用。- 主项目 Python 代码没有任何地方引用
easyagent/。 - 是否删除待后续决策。
入口点
- 主项目创建子智能体:
modules.sub_agent.manager.SubAgentManager.create_sub_agent() core/main_terminal.py中通过SubAgentManager.set_terminal(self)注入 WebTerminal 引用。
回归测试
- 测试脚本:
test/test_sub_agent_regression.py - 覆盖:write_file、edit_file(多处替换 + replace_all)、search_workspace、read_mediafile、terminate
已删除/清理的内容
config/sub_agent.py中已删除SUB_AGENT_HOST_NETWORK_PERMISSION临时配置。easyagent/src/batch/index.js已删除(旧子进程入口)。AGENTS.md和CLAUDE.md中关于子智能体的描述已更新为当前实现。