agent-Specialization/CLAUDE.md

229 lines
6.9 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.

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
多用户 AI Agent 系统,为每个登录用户提供独立的 Docker 容器环境。支持终端交互、文件操作、对话管理和实时监控。主要用于学习和实验"智能体 + 真实 Dev Workflow",代码大量由 AI 生成。
## Core Architecture
### Entry Points
- **CLI模式**: `python main.py` - 启动命令行交互式 Agent
- **Web模式**: `python web_server.py` - 启动 Flask + Socket.IO Web 服务器 (默认端口 8091)
### Key Components
**core/**
- `MainTerminal` - CLI 主终端,处理用户输入和 AI 对话循环
- `WebTerminal` - Web 终端,继承 MainTerminal增加实时推送和对话持久化
- `tool_config.py` - 定义所有工具的配置和分类
**modules/**
- `user_container_manager.py` - 单用户-单容器管理,负责容器生命周期
- `container_file_proxy.py` - 容器内文件代理,通过 `docker exec` 沙箱化文件操作
- `terminal_manager.py` - 管理多个持久化终端会话
- `file_manager.py` - 文件 CRUD包含搜索、替换和 append/modify streaming 功能
- `conversation_manager.py` - 对话历史持久化
- `context_manager.py` - 上下文构建、token统计、对话管理
- `memory_manager.py` - 长期记忆管理
- `todo_manager.py` - 待办事项管理
- `sub_agent_manager.py` - 子智能体任务调度
- `user_manager.py` - 用户认证和工作区管理
- `upload_security.py` - 上传文件隔离扫描
**utils/**
- `api_client.py` - 与 OpenAI-compatible API 交互,支持 thinking mode首次思考后续快速
- `terminal_factory.py` - 终端类型工厂
**static/**
- Vue + Socket.IO 前端,包含对话流、终端输出、资源监控面板
**docker/**
- `terminal.Dockerfile` - 终端容器镜像构建配置
## Development Commands
### Build & Run
```bash
# 安装依赖(需要在项目根目录创建 requirements.txt
pip install flask flask-socketio flask-cors openai python-dotenv tiktoken lxml
# 构建终端镜像
docker build -f docker/terminal.Dockerfile -t my-agent-shell:latest .
# CLI 模式
python main.py
# Web 模式
python web_server.py
# 或指定端口和思考模式
python web_server.py --port 8091 --thinking-mode
```
### Testing & Debugging
```bash
# 查看容器状态
docker ps -a | grep agent-term
# 查看调试日志
tail -f logs/debug_stream.log
# 查看容器统计
tail -f logs/container_stats.log
```
## Configuration
主要配置文件:`.env`(复制 `.env.example`
**必填变量**:
- `AGENT_API_BASE_URL` - OpenAI-compatible API 端点
- `AGENT_API_KEY` - API 密钥
- `AGENT_MODEL_ID` - 模型 ID (例如 deepseek-chat)
- `WEB_SECRET_KEY` - Flask session 密钥
**容器配置** (`config/terminal.py`):
- `TERMINAL_SANDBOX_MODE` - docker/host
- `TERMINAL_SANDBOX_IMAGE` - 容器镜像 (默认 python:3.11-slim)
- `TERMINAL_SANDBOX_NETWORK` - 网络模式 (bridge/none/host)
- `TERMINAL_SANDBOX_CPUS` - CPU 限制
- `TERMINAL_SANDBOX_MEMORY` - 内存限制
**资源限制**:
- `PROJECT_MAX_STORAGE_MB` - 单用户磁盘配额 (默认 2048MB)
- `MAX_ACTIVE_USER_CONTAINERS` - 并发容器数量 (默认 8)
## Important Implementation Details
### File Operations with Streaming
**append_to_file****modify_file** 使用特殊的流式输出格式:
```
<<<APPEND:path/to/file>>>
文件内容...
<<<END_APPEND>>>
<<<MODIFY:path/to/file>>>
[replace:1]
<<OLD>>原文内容<<END>>
<<NEW>>新内容<<END>>
[/replace]
<<<END_MODIFY>>>
```
处理逻辑在 `web_server.py``handle_task_with_sender` 中,通过检测标记并在流式输出中即时执行。
### Container Architecture
每个用户登录时:
1. `UserContainerManager` 创建专属容器
2. 容器挂载 `users/<username>/project/``/workspace`
3. 所有文件操作通过 `ContainerFileProxy` 在容器内执行
4. 终端会话通过 `docker exec` 运行
5. 空闲超时或登出后自动销毁容器
### Context Management
`ContextManager` 负责:
- 动态构建上下文(系统提示 + 工具 + 对话历史 + 聚焦文件 + 记忆)
- Token 统计和限制检查
- 对话历史保存和加载
- 自动保存机制(每次 API 调用后增量保存)
### Thinking Mode
支持"思考模式"(需配置 `AGENT_THINKING_MODEL_ID`
- 首次调用使用 reasoning 模型(如 deepseek-reasoner
- 后续调用使用快速模型
- 可通过 `THINKING_FAST_INTERVAL` 控制切换频率
- 失败时自动回退到思考模式
### Web Socket Events
主要事件:
- `send_message` - 发送用户消息
- `thinking_start/chunk/end` - 思考过程
- `text_start/chunk/end` - 文本响应
- `tool_preparing/start/update_action` - 工具执行状态
- `conversation_list_update` - 对话列表更新
- `terminal_output` - 终端输出
## Common Patterns
### Adding New Tools
1.`MainTerminal` 添加 `handle_<tool_name>` 方法
2.`core/tool_config.py``define_tools()` 中注册工具
3. 如果需要在流式输出中处理,在 `web_server.py` 添加特殊逻辑
### Working with Containers
使用 `ContainerHandle`:
```python
# 文件操作
result = container_handle.execute_file_op("read", path="/workspace/file.txt")
# 执行命令
result = container_handle.run_command("ls -la /workspace")
# 终端会话
result = container_handle.start_terminal(session_name="main", working_dir="/workspace")
```
### Managing Conversations
```python
# 创建新对话
terminal.create_new_conversation(thinking_mode=True)
# 加载对话
terminal.load_conversation(conversation_id)
# 搜索对话
terminal.search_conversations(query="bug fix")
# 删除对话
terminal.delete_conversation(conversation_id)
```
## Security Considerations
- 所有用户操作在独立容器中执行,与宿主机隔离
- 文件操作路径验证在 `FileManager._validate_path`
- 上传文件经过 `UploadQuarantineManager` 隔离和扫描
- CSRF 保护在 Web 端启用
- 登录失败次数限制和临时锁定
## Known Limitations
- 代码大量由 AI 生成,未达到生产级别
- 容器资源配额依赖 Docker cgroups
- 前端处于改造中,部分功能可能不稳定
- Token 统计基于 tiktoken可能与实际 API 有偏差
## Directory Structure
```
agents/
├── core/ # 核心终端和工具配置
├── modules/ # 独立功能模块
├── utils/ # 辅助工具
├── config/ # 配置文件
├── static/ # Web 前端
├── docker/ # 容器镜像
├── prompts/ # 系统提示词
├── users/ # 用户工作区
├── data/ # 全局数据
└── logs/ # 日志文件
```
## Development Tips
- 修改系统提示词:编辑 `prompts/main_system.txt`
- 调整工具限制:修改 `config/limits.py`
- 容器镜像定制:编辑 `docker/terminal.Dockerfile` 并重新构建
- 前端开发:`npm install && npm run dev` (在 `static/` 目录)
- 查看详细执行流程:监控 `logs/debug_stream.log`