159 lines
6.9 KiB
Markdown
159 lines
6.9 KiB
Markdown
# AI Agent 系统(v5.x)
|
||
|
||
多用户、多终端的智能开发助手。每位登录用户都会获得一个独立 Docker 容器,所有终端、一次性命令以及文件操作都在容器内完成;宿主机负责挂载与备份。配合 **虚拟显示器** 与资源面板,可实时回放工具动作并观察 CPU / 内存 / 网络 / 磁盘配额。
|
||
|
||
> ⚠️ **定位**:学习与实验用项目,主要用于探索“智能体 + 真实 Dev Workflow”。代码大量由 AI 生成,尚未达到生产级别,请谨慎部署。
|
||
|
||
---
|
||
|
||
## 近期亮点(v5)
|
||
|
||
| 能力 | 说明 |
|
||
| --- | --- |
|
||
| **虚拟显示器回放** | `static/src/components/chat/monitor` 提供指针/窗口/右键菜单动画,可回放创建文件、终端执行等工具场景,并展示进度气泡。 |
|
||
| **单用户-单容器** | `modules/user_container_manager.py` 登录即拉起专属容器,退出或空闲自动销毁;CLI/Web/工具共用同一容器,配额在 `.env` 设置。 |
|
||
| **容器内文件代理** | `modules/container_file_proxy.py` 通过 `docker exec` 沙箱化 `create/read/search/write/modify`,宿主机不直接写用户代码。 |
|
||
| **实时资源与管理员面板** | 用量抽屉实时展示 Token / CPU / 内存 / 网络 / 存储;管理员可在 `/admin/monitor` 查看全局用量与上传审计。 |
|
||
| **子代理与多工具链路** | 支持子代理启动/终止,待办、记忆、阅读、终端等工具协同;前端可随时切换聊天/显示器视图。 |
|
||
|
||
---
|
||
|
||
## 架构概览
|
||
|
||
```
|
||
┌─────────────┐ ┌────────────────┐ ┌────────────────────────┐
|
||
│ Browser │◀───▶│ Flask + Socket │◀───▶│ UserContainerManager │
|
||
│ (Vue 前端) │ Web │ Web Server │调度 │ (管理 Docker 容器) │
|
||
└─────────────┘ │ ├─ WebTerminal │ └────┬───────────────────┘
|
||
│ └─ REST APIs │ │
|
||
└────────────────┘ ▼
|
||
Container
|
||
├─ PersistentTerminal / Toolbox
|
||
├─ Container File Proxy
|
||
└─ Sub Agent / Tool Runtime
|
||
```
|
||
|
||
- **core/**:`MainTerminal` / `WebTerminal` 负责命令路由、上下文管理与工具调度。
|
||
- **modules/**:终端管理、文件代理、容器调度、搜索、记忆等独立能力模块。
|
||
- **utils/**:模型 API 客户端、上下文压缩、日志、终端工厂等辅助工具。
|
||
- **static/**:Vue + Socket.IO 单页应用;`chat/monitor` 为虚拟显示器动画层。
|
||
- **docker/**:终端镜像 Dockerfile 及工具容器依赖清单。
|
||
|
||
更多目录说明请查阅 `tree -L 2` 或仓库内注释。
|
||
|
||
---
|
||
|
||
## 快速开始
|
||
|
||
### 1. 环境需求
|
||
|
||
- Python 3.11+
|
||
- Docker 20+(需启用 cgroup v1/v2 任一,默认通过 `bridge` 网络运行容器)
|
||
- Node 18+(仅在需要本地构建/开发前端时)
|
||
|
||
### 2. 安装依赖
|
||
|
||
```bash
|
||
pip install -r requirements.txt
|
||
# 前端开发/构建时可选
|
||
npm install
|
||
```
|
||
|
||
### 3. 配置
|
||
|
||
1. 复制 `.env.example` → `.env`,填入以下关键变量:
|
||
- `AGENT_API_*`:兼容 OpenAI API 的模型服务
|
||
- `WEB_SECRET_KEY`:Flask session 密钥
|
||
- `TERMINAL_SANDBOX_*`:容器镜像/资源/网络(默认 `my-agent-shell:latest` + `bridge`)
|
||
2. 若需定制终端镜像:
|
||
```bash
|
||
docker build -f docker/terminal.Dockerfile -t my-agent-shell:latest .
|
||
```
|
||
|
||
### 4. 运行
|
||
|
||
```bash
|
||
# CLI 模式
|
||
python main.py
|
||
|
||
# Web 模式(默认 8091)
|
||
python web_server.py
|
||
```
|
||
|
||
首次启动会在 `users/<username>/` 下初始化个人工作区与容器。
|
||
|
||
### 5. 构建前端(可选)
|
||
|
||
```bash
|
||
npm run build # 产物输出到 static/dist
|
||
# 开发监听(仅构建,不启动服务)
|
||
npm run dev
|
||
```
|
||
|
||
---
|
||
|
||
## 监控与调试
|
||
|
||
- **Web 用量面板**:点击右下角「用量统计」可查看 Token/CPU/内存/网络/存储实时状态。
|
||
- **CLI `/status`**:显示当前会话、上下文大小、容器资源等,日志位于 `logs/debug_stream.log`。
|
||
- **容器日志**:`logs/container_stats.log` 存储 `docker stats/inspect` 样本,可配合 `tail -f` 或外部监控系统。
|
||
|
||
---
|
||
|
||
## 常见命令
|
||
|
||
| 命令 | 说明 |
|
||
| --- | --- |
|
||
| `/help` | CLI 指令列表 |
|
||
| `/status` | 查看系统/容器资源状态 |
|
||
| `read_file` / `modify_file` | 读写项目文件(自动通过容器代理) |
|
||
| `terminal_session` / `terminal_input` | 管理多终端会话 |
|
||
| `run_command` / `run_python` | 工具容器快速执行命令/Python 代码 |
|
||
| `todo_*`, `update_memory` | 维护待办与长期记忆 |
|
||
|
||
---
|
||
|
||
## 配置速览
|
||
|
||
`config/terminal.py` 支持以下常用变量:
|
||
|
||
| 变量 | 默认值 | 说明 |
|
||
| --- | --- | --- |
|
||
| `TERMINAL_SANDBOX_IMAGE` | `my-agent-shell:latest` | 终端容器镜像 |
|
||
| `TERMINAL_SANDBOX_NETWORK` | `bridge` | 容器网络模式(`none`/`bridge`/`host` 等) |
|
||
| `TERMINAL_SANDBOX_CPUS` | `0.5` | 上限 CPU |
|
||
| `TERMINAL_SANDBOX_MEMORY` | `1g` | 上限内存 |
|
||
| `TERMINAL_SANDBOX_REQUIRE` | `0` | 若容器启动失败是否降级宿主机模式 |
|
||
| `PROJECT_MAX_STORAGE_MB` | `2048` | 每个工作区的磁盘配额 |
|
||
| `MAX_ACTIVE_USER_CONTAINERS` | `8` | 并发容器数量 |
|
||
|
||
更多配置请查阅 `.env.example`。
|
||
|
||
---
|
||
|
||
## 开发建议
|
||
|
||
1. **安全**:新增模块前请优先考虑是否可以在容器中实现,避免回退宿主机;如需联网,务必评估外部依赖。上传检测现阶段默认关闭 ClamAV(`UPLOAD_CLAMAV_ENABLED=0`),以免 1GB+ 的常驻内存占用,必要时可以在环境变量中显式打开。
|
||
2. **日志**:尽量使用 `utils.logger.setup_logger`,便于统一收集。
|
||
3. **测试**:`users/<username>/project/test_scripts/` 提供内存压测脚本,可验证容器限制是否生效;可在 `test/` 下添加更多集成测试。
|
||
4. **文档**:第二阶段总结见 `doc/phases/phase2_summary.md`,安全基线更新见 `doc/security/security_review.md`。
|
||
5. **前端组件化**:`doc/frontend/phase1_setup.md` 与 `doc/frontend/phase2_sidebar.md` 记录了脚手架与侧栏改造,可用以下命令构建体验版 UI;执行 `localStorage.setItem('useNewFrontend','1')` 或设置 `window.__USE_NEW_FRONTEND__ = true` 可加载新入口,移除该键即回退 legacy UI:
|
||
|
||
```bash
|
||
npm install
|
||
npm run dev # watch 构建 static/dist
|
||
npm run build # 生产包
|
||
```
|
||
|
||
---
|
||
|
||
## Roadmap
|
||
|
||
- [ ] CSRF / 防爆破 / 会话绑定设备指纹
|
||
- [ ] 文件上传内容扫描与白名单策略
|
||
- [ ] 用户/会话数据迁移到数据库并加密备份
|
||
- [ ] 自动化测试与 CI(含容器镜像构建)
|
||
- [ ] Skeleton Web UI(组件化、国际化、Dark Mode)
|
||
|
||
欢迎通过 Issue/PR 贡献。
|