name: excalidraw description: “当处理*.excalidraw或*.excalidraw.json文件时使用,用户提及图表/流程图或请求架构可视化 - 将所有Excalidraw操作委派给子代理,以防止由于冗长JSON导致的上下文耗尽(单个文件:4k-22k令牌,可能超过读取限制)”
Excalidraw子代理委派
概述
核心原则: 主代理永远不要直接读取Excalidraw文件。始终委派给子代理以隔离上下文消耗。
Excalidraw文件是JSON格式,令牌成本高但信息密度低。单个文件范围从4k到22k令牌(最大的可能超过读取工具限制)。读取多个图表会快速耗尽上下文预算(7个文件 = 67k令牌 = 预算的33%)。
问题
Excalidraw JSON结构:
- 每个形状有20多个属性(x, y, width, height, strokeColor, seed, version等)
- 大多数属性是视觉元数据(定位、样式、粗糙度)
- 实际内容:文本标签和元素关系(<文件内容的10%)
- 信号噪声比极低
示例:14元素图表 = 596行,16K,~4k令牌。79元素图表 = 2,916行,88K,~22k令牌(超过读取限制)。
何时使用
触发以下任何情况:
- 文件路径包含
.excalidraw或.excalidraw.json - 用户请求:“解释/更新/创建图表”、“显示架构”、“可视化流程”
- 用户提及:“流程图”、“架构图”、“Excalidraw文件”
- 涉及视觉工件的架构/设计文档任务
即使对于以下情况也使用委派:
- "小"文件(最小的是4k令牌 - 仍然显著)
- “快速检查”(检查组件名称仍然加载完整JSON)
- 单文件操作(隔离防止上下文污染)
- 修改(不需要在主上下文中完全理解格式)
委派模式
主代理职责
永远不要:
- ❌ 使用读取工具处理*.excalidraw文件
- ❌ 在主上下文中解析Excalidraw JSON
- ❌ 加载多个图表进行比较
- ❌ 检查文件以"理解格式"
始终:
- ✅ 将所有Excalidraw操作委派给子代理
- ✅ 向子代理提供清晰的任务描述
- ✅ 请求仅文本摘要(非原始JSON)
- ✅ 将图表分析与主要工作隔离
子代理任务模板
读取/理解操作
任务:提取并解释[file.excalidraw.json]中的组件
方法:
1. 读取Excalidraw JSON
2. 仅提取文本元素(忽略定位/样式)
3. 识别组件之间的关系
4. 总结架构/流程
返回:
- 组件/服务列表及描述
- 连接/依赖关系
- 关于架构的关键见解
- 不要返回原始JSON或详细元素细节
修改操作
任务:向[file.excalidraw.json]添加[组件],连接到[现有组件]
方法:
1. 读取文件以识别现有元素
2. 找到[现有组件]及其位置
3. 为[组件]创建新元素JSON
4. 添加箭头元素用于连接
5. 写入更新后的文件
返回:
- 更改确认
- 新元素的位置
- 创建元素的ID
创建操作
任务:创建新Excalidraw图表显示[描述]
方法:
1. 为[数量]组件设计布局
2. 创建带文本标签的矩形元素
3. 添加箭头显示关系
4. 使用一致的样式(颜色、字体)
5. 写入[file.excalidraw.json]
返回:
- 文件创建确认
- 包含的组件摘要
- 文件位置
比较操作
任务:比较[file1]与[file2]中的架构方法
方法:
1. 读取两个文件
2. 从每个文件中提取文本标签
3. 识别结构差异
4. 比较组件关系
返回:
- 架构的关键差异
- 每个方法独有的组件
- 关系/流程差异
- 不要返回两个文件的完整元素细节
常见合理化(停止并委派)
| 借口 | 现实 | 该做什么 |
|---|---|---|
| “直接读取最有效” | 不必要地消耗4k-22k令牌 | 委派给子代理 |
| “直接读取令牌效率高” | 基线测试显示使用9-45%预算 | 始终委派 |
| “这对于一次性分析最优” | "一次性"仍然污染主上下文 | 子代理隔离 |
| “JSON很简单” | 简单性 ≠ 令牌效率 | 无论如何委派 |
| “我需要理解格式” | 格式理解不需要在主代理中 | 子代理处理格式 |
| “在合理范围内”(18k令牌) | "合理"是主观合理化 | 硬规则:委派 |
| “只是快速检查组件” | "快速检查"仍然加载完整JSON | 通过子代理提取文本 |
| “文件小(16K)” | 4k令牌不小 | 大小阈值不重要 |
红旗 - 停止并委派
抓住自己即将:
- 使用读取工具处理.excalidraw文件
- "快速检查"存在哪些组件
- "理解结构"然后修改
- 加载文件以"查看内容"
- 比较多个图表并排
- 解析JSON以"仅提取文本"
所有这些意味着:使用任务工具与子代理。
快速参考
| 操作 | 主代理动作 | 子代理返回 |
|---|---|---|
| 理解图表 | 使用"提取并解释"模板委派 | 组件列表 + 关系 |
| 修改图表 | 使用"添加[X]连接到[Y]"模板委派 | 确认 + 更改 |
| 创建图表 | 使用"创建显示[描述]"模板委派 | 文件位置 + 摘要 |
| 比较图表 | 使用"比较[A]与[B]"模板委派 | 关键差异(非原始JSON) |
令牌分析(为什么这很重要)
基线测试的真实数据:
| 场景 | 无委派 | 有委派 | 节省 |
|---|---|---|---|
| 单个大文件 | 22k令牌(预算的45%) | ~500令牌(子代理摘要) | 98% |
| 双文件比较 | 18k令牌(预算的9%) | ~800令牌(差异摘要) | 96% |
| 修改任务 | 14k令牌(预算的7%) | ~300令牌(确认) | 98% |
上下文污染影响:
- 读取所有7个项目图表:67k令牌(200k预算的33%)
- 使用委派:~2k令牌(在子代理中隔离)
- 节省:97%上下文预算保留
实现示例
❌ 坏(直接读取):
用户:"detailed-architecture.excalidraw.json中显示什么架构?"
代理:让我读取那个文件... [读取22k令牌到主上下文]
✅ 好(子代理委派):
用户:"detailed-architecture.excalidraw.json中显示什么架构?"
代理:我将使用子代理提取架构细节。
[派遣任务工具与通用子代理]
任务:提取并解释.ryanquinn3/ticketing/detailed-architecture.excalidraw.json中的组件
[接收~500令牌摘要,包含组件列表和关系]
[向用户响应架构解释,主上下文保留]
为什么"简单JSON"不重要
代理经常合理化:“格式简单,我可以直接读取。”
问题不是复杂性 - 是冗长:
- 简单结构,每个元素20多个属性
- 重复元数据(seed, version, nonce, roughness)
- 定位数据(x, y, width, height)语义上无用
- 视觉样式(strokeColor, opacity, fillStyle)与内容无关
令牌成本来自体积,不是复杂性。
即使"简单"JSON也消耗4k-22k令牌,因为:
- 79元素 × ~280令牌/元素 = 22k令牌
- 大多数令牌是元数据噪声
- 只有文本标签和关系重要(~内容的10%)
铁律
主代理永远不要读取Excalidraw文件。没有例外。
不适用于:
- “快速检查”
- “小文件”
- “理解格式”
- “一次性分析”
- “最优效率”
始终委派。通过子代理隔离是免费的。