140 lines
6.0 KiB
Markdown
140 lines
6.0 KiB
Markdown
# AI Agent 系统(v2)
|
||
|
||
多用户、多终端的智能开发助手。每位登录用户都会获得一个独立 Docker 容器,所有终端、一次性命令以及文件操作都在容器内完成;宿主机仅提供挂载和备份,配合实时监控界面可以随时观察容器 CPU/内存/网络/磁盘配额的使用情况。
|
||
|
||
> ⚠️ **定位**:学习与实验用项目,主要用于探索“智能体 + 真实 Dev Workflow”。代码大量由 AI 生成,尚未达到生产级别,请谨慎部署。
|
||
|
||
---
|
||
|
||
## 近期亮点
|
||
|
||
| 能力 | 说明 |
|
||
| --- | --- |
|
||
| **单用户-单容器** | `modules/user_container_manager.py` 会在登录时启动专属容器,并在退出或空闲超时后自动销毁。CLI/Web/Toolbox 复用同一容器,资源配额(默认 0.5 vCPU / 1GB RAM / 2GB 磁盘)由 `.env` 控制。 |
|
||
| **容器内文件代理** | `modules/container_file_proxy.py` 通过 `docker exec` 调用内置 Python 脚本,对 `create/read/search/write/modify` 等操作进行沙箱化处理,宿主机不再直写用户代码。 |
|
||
| **实时监控面板** | Web “用量统计”抽屉实时展示 Token 消耗、容器 CPU/内存、网络上下行速率(0.5s 刷新)以及项目存储占用(5s 刷新)。CLI `/status` 命令也会附带容器状态。 |
|
||
| **联网能力 + 最小工具集** | 终端镜像改为 `bridge` 网络并预装 `iputils-ping`,方便验证网络连通性;遇到受限环境可以随时在 `.env` 中切换网络模式。 |
|
||
|
||
---
|
||
|
||
## 架构概览
|
||
|
||
```
|
||
┌─────────────┐ ┌────────────────┐ ┌────────────────────────┐
|
||
│ Browser │◀───▶│ Flask + Socket │◀───▶│ UserContainerManager │
|
||
│ (Vue 前端) │ Web │ Web Server │调度 │ (管理 Docker 容器) │
|
||
└─────────────┘ │ ├─ WebTerminal │ └────┬───────────────────┘
|
||
│ └─ REST APIs │ │
|
||
└────────────────┘ ▼
|
||
Container
|
||
├─ PersistentTerminal / Toolbox
|
||
└─ Container File Proxy
|
||
```
|
||
|
||
- **core/**:`MainTerminal` / `WebTerminal` 负责命令路由、上下文管理与工具调度。
|
||
- **modules/**:终端管理、FileManager、容器调度、搜索、记忆等独立能力模块。
|
||
- **utils/**:模型 API 客户端、上下文压缩、日志、终端工厂等辅助工具。
|
||
- **static/**:Vue + Socket.IO 单页应用,负责对话流/终端输出/资源监控。
|
||
- **docker/**:终端镜像 Dockerfile 及工具容器依赖清单。
|
||
|
||
更多目录说明请查阅 `tree -L 2` 或仓库内注释。
|
||
|
||
---
|
||
|
||
## 快速开始
|
||
|
||
### 1. 环境需求
|
||
|
||
- Python 3.11+
|
||
- Docker 20+(需启用 cgroup v1/v2 任一,默认通过 `bridge` 网络运行容器)
|
||
- Node/Vue 非必需,前端为静态文件
|
||
|
||
### 2. 安装依赖
|
||
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
### 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>/` 下初始化个人工作区与容器。
|
||
|
||
---
|
||
|
||
## 监控与调试
|
||
|
||
- **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. **安全**:新增模块前请优先考虑是否可以在容器中实现,避免回退宿主机;如需联网,务必评估外部依赖。
|
||
2. **日志**:尽量使用 `utils.logger.setup_logger`,便于统一收集。
|
||
3. **测试**:`users/<username>/project/test_scripts/` 提供内存压测脚本,可验证容器限制是否生效;可在 `test/` 下添加更多集成测试。
|
||
4. **文档**:第二阶段总结见 `doc/phase2_summary.md`,安全基线更新见 `doc/security_review.md`。
|
||
|
||
---
|
||
|
||
## Roadmap
|
||
|
||
- [ ] CSRF / 防爆破 / 会话绑定设备指纹
|
||
- [ ] 文件上传内容扫描与白名单策略
|
||
- [ ] 用户/会话数据迁移到数据库并加密备份
|
||
- [ ] 自动化测试与 CI(含容器镜像构建)
|
||
- [ ] Skeleton Web UI(组件化、国际化、Dark Mode)
|
||
|
||
欢迎通过 Issue/PR 贡献。
|