agent-Specialization/.astrion/memory/sub_agent_python_rewrite.md

3.3 KiB
Raw Permalink Blame History

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_modelmodels 列表。

可用工具8 个)

  1. read_file - 读取/搜索/抽取文件
  2. write_file - 创建或覆盖文件(支持 append
  3. edit_file - 精确字符串替换,支持 replacements 数组和 replace_all
  4. run_command - 执行命令(走主进程沙箱/容器)
  5. web_search - 网络搜索
  6. extract_webpage - 网页内容提取
  7. search_workspace - 工作区搜索
  8. 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.mdCLAUDE.md 中关于子智能体的描述已更新为当前实现。