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

74 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: sub_agent_python_rewrite
description: 当需要了解子智能体当前实现、修改子智能体代码、或排查子智能体相关问题时,应该索引本记忆
---
# 子智能体现状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 个)
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.md``CLAUDE.md` 中关于子智能体的描述已更新为当前实现。