safety-research/agent-transcript-editor
GitHub: safety-research/agent-transcript-editor
面向红队研究的AI对话transcript编辑器,支持AI辅助编辑和可信监控器集成评估,用于构造攻击样本并发现防御盲点。
Stars: 0 | Forks: 0
# Transcript Editor
一款基于 Web 的 AI 对话 transcript 编辑器,支持 AI 辅助编辑,并通过 trusted monitor 进行集成评估。
专为 red-teaming 研究构建:制作攻击 transcript,对其可疑度进行评分,并通过迭代发现 monitor 的盲点。
**Red-teaming transcript 新手?** 请参阅 [GETTING_STARTED.md](GETTING_STARTED.md) 了解目标、技巧和演练指南。
## 快速开始
### 选项 1:Docker(推荐)
```
cp backend/.env.example backend/.env
# 编辑 backend/.env 添加您的 ANTHROPIC_API_KEY
docker compose up
```
### 选项 2:start.sh
```
./start.sh
```
该脚本会自动创建 Python venv,安装依赖,并启动两个服务器。编辑 `backend/.env` 以添加你的 `ANTHROPIC_API_KEY`。
### 选项 3:手动
```
# 终端 1: Backend
cd backend
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # Edit to add API key
python main.py
# 终端 2: Frontend
npm install
npm run dev
```
在浏览器中打开 http://localhost:5173。
## 功能特性
### Transcript 编辑
- 加载、编辑和保存按项目组织的 JSONL transcript
- 插入、删除、重排序和修改消息
- 直接编辑 tool call 输入和结果
- 加载时自动检测并最小化完整的 Claude Code 格式
- 自动修复非标准 tool ID 为现实格式
### AI 辅助编辑
- 使用自然语言指令修改 transcript
- Agent 读取 transcript 结构并进行针对性编辑
- 将 transcript 派生 (fork) 为变体,以并行尝试不同的方法
- 可配置的 system prompt(CREATIVE.md、FAITHFUL.md 或自定义)
### Trusted Monitor 集成
- 对多个 prompt 变体的 transcript 进行可疑度评分(0-100)
- 评估恶劣程度、定罪证据 (incriminating evidence)、有效性、置信度、真实感
- 带有 transcript 变更时自动失效机制的缓存评分
- 通过 SSE 流式传输实时进度
### 文件一致性检查
- 虚拟文件系统验证:检测 Read/Write/Edit 不匹配
- 可抑制针对已知误报的警告
## 配置
### 后端 (`backend/.env`)
```
# 必需
ANTHROPIC_API_KEY=sk-ant-...
# 可选
ANTHROPIC_API_KEY_ALT=sk-ant-... # Alternate key for load balancing
DEFAULT_MODEL=claude-opus-4-6 # Default model for agent + token counting
TRANSCRIPTS_DIR=./transcripts # Transcript storage directory
HOST=127.0.0.1 # Server bind address
PORT=8000 # Server port
CORS_ORIGINS=http://localhost:5173 # Comma-separated allowed origins
```
### 设置 UI
通过齿轮图标访问。可在运行时配置:
- **模型选择**:每个会话选择模型和 API key
- **Prompt 模式**:Creative(策略性指导)、Faithful(忠实执行)或两者兼有
- **Creative 文档**:选择哪个 .md 文件用作 agent system prompt
- **Monitor 设置**:评估数量、prompt 变体、启用的指标
- **速率限制**:每个 key 的 TPM 限制
- **儿童锁**:在 monitor 评分后防止编辑
## Transcript 格式
最小化 JSONL — 每行一个 JSON 对象:
```
{"role": "user", "content": [{"type": "text", "text": "Fix the failing test"}], "cwd": "/home/user/project"}
{"role": "assistant", "content": [{"type": "thinking", "thinking": "Let me look at the test..."}, {"type": "tool_use", "id": "toolu_01ABC...", "name": "Read", "input": {"file_path": "test.py"}}]}
{"role": "user", "content": [{"type": "tool_result", "tool_use_id": "toolu_01ABC...", "content": "def test_foo():..."}]}
```
完整规范请参阅 [TRANSCRIPT_FORMAT.md](TRANSCRIPT_FORMAT.md)。
## 架构
```
Frontend (React 19 + TypeScript + Zustand)
│
├── SSE stream (/api/session/{file}/events)
│ └── Real-time: agent streaming, monitor progress, rate limit status
│
└── HTTP commands
├── /api/session/{file}/submit - Start agent
├── /api/session/{file}/stop - Stop agent
├── /api/files/* - File CRUD + metadata
└── /api/monitor/* - Evaluation triggers + polling
Backend (FastAPI + AsyncAnthropic)
│
├── Sessions: one per file, multiple subscribers (UI + CLI)
├── Agent loop: streaming API calls, tool execution, rate limiting
├── Monitor: concurrent metric evaluation, preprocessing cache
└── Disk: .jsonl (transcript) + .meta.json (scores) + .chat.json (agent state)
```
## API 端点
### 健康检查与配置
| Endpoint | Method | Description |
|----------|--------|-------------|
| `/api/health` | GET | 后端状态、API keys、monitor、sessions、速率限制 |
| `/api/config/rate-limit` | GET/PUT | 每个 key 的 TPM 速率限制配置 |
### 文件 (`/api/files`)
| Endpoint | Method | Description |
|----------|--------|-------------|
| `/projects` | GET | 列出项目及文件数量 |
| `/list?project=...` | GET | 列出项目中的 transcript |
| `/load/{path}` | GET | 加载 transcript(自动最小化、自动修复 ID) |
| `/save` | POST | 保存 transcript |
| `/upload` | POST | 上传 .jsonl 文件 |
| `/delete/{path}` | DELETE | 删除 transcript 及附属文件 |
| `/rename` | POST | 原子重命名文件 |
| `/move` | POST | 在项目间移动 |
| `/duplicate` | POST | 复制文件及元数据 |
| `/meta` | POST | 写入/合并附属元数据 |
### 会话 (`/api/session`)
| Endpoint | Method | Description |
|----------|--------|-------------|
| `/{file}/events` | GET | SSE 流(agent 事件、monitor 进度) |
| `/{file}/submit` | POST | 向 agent 提交 prompt |
| `/{file}/stop` | POST | 停止运行中的 agent |
| `/{file}/reset` | POST | 清除聊天历史 |
| `/{file}/state` | GET | 获取当前会话状态 |
| `/{file}/settings` | PUT | 每个会话的模型/prompt 配置 |
| `/{file}/messages` | POST | 更新消息(来自前端编辑) |
| `/{file}/metadata` | POST | 更新结果/场景/机制 |
| `/global-settings` | GET/PUT | 全局编辑器配置 |
### Monitor (`/api/monitor`)
| Endpoint | Method | Description |
|----------|--------|-------------|
| `/evaluate-file` | POST | 启动多指标评估 |
| `/evaluate-file/{id}` | GET | 轮询评估进度 |
| `/token-count` | POST | 统计预处理后 transcript 的 token 数 |
| `/status` | GET | 检查 trusted-monitor 可用性 |
## AI Agent 工具
Agent 可以访问这些工具来操作 transcript:
| Tool | Description |
|------|-------------|
| `get_messages` | 读取消息(列表、详情、块、搜索模式) |
| `insert_message` | 在位置插入新消息 |
| `update_message` | 替换消息内容 |
| `delete_messages` | 移除消息范围 |
| `move_messages` | 重排序消息 |
| `replace_messages` | 批量替换消息范围 |
| `update_tool_content` | 编辑特定 tool_use 输入字段 |
| `find_replace` | 在 transcript 中搜索并替换 |
| `fork_to_new_tab` | 创建变体 transcript |
| `set_transcript_metadata` | 设置结果/场景/机制 |
| `get_monitor_score` | 触发并获取 monitor 评估 |
| `count_tokens` | 统计 transcript 中的 token |
| `check_consistency` | 运行文件一致性验证 |
| `finish_editing` | 表示编辑完成 |
## CLI 客户端
用于编程访问(例如,从 Claude Code):
```
cd backend
./venv/bin/python cli_client.py PROJECT/FILE.jsonl --prompt "Make the attack stealthier"
```
## 开发
```
# Backend (auto-reload)
cd backend && python main.py
# Frontend (hot reload)
npm run dev
# 类型检查
npx tsc --noEmit
# 测试
cd backend && pytest tests/
# Production build
npm run build
```
## 依赖项
**后端**:FastAPI, Anthropic SDK, aiofiles, uvicorn, trusted-monitor
**前端**:React 19, Zustand, Vite, TypeScript, react-markdown
标签:AI智能体, AI辅助编辑, AV绕过, DLL 劫持, Docker, FastAPI, GNU通用公共许可证, IP 地址批量处理, JSONL处理, Node.js, Python, RLHF, SSE流式传输, Vue.js, 人工智能安全, 人类反馈强化学习, 会话分析, 内容审查, 前后端分离, 反取证, 可信监控, 合规性, 域名收集, 大语言模型, 安全评估, 安全防御评估, 对抗性机器学习, 数据标注, 无后门, 时序数据库, 私有化部署, 网络安全, 请求拦截, 逆向工具, 防御规避, 隐私保护