74 lines
3.3 KiB
Markdown
74 lines
3.3 KiB
Markdown
---
|
||
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` 中关于子智能体的描述已更新为当前实现。
|