소스 정보
- 저장소
- HorizonRobotics/OE-Skills
- 최근 소스 활동
- 2026년 6월 26일 09:03
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 13
- 포크
- 3
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/HorizonRobotics/OE-Skills --skill j6-plugin-graph-diff명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
SOC 직업 분류 기준
| name | j6-plugin-graph-diff |
| description | 对比两份 FX Graph 计算图文件,精确定位计算图结构和算子参数差异,并根据 diff 报告在原始模型代码中找到对应的差异位置。 |
| tools | [{"name":"j6_plugin_graph_diff.py","type":"script","description":"计算图差异对比脚本,解析两个 FX Graph 文件并生成结构化 diff 报告","path":"j6-plugin-graph-diff/j6_plugin_graph_diff.py","required":true}] |
本 Skill 的计算图差异对比必须通过调用外挂脚本 j6_plugin_graph_diff.py 完成,严禁 Agent 自己编写 Python 代码实现 diff 逻辑。
python j6-plugin-graph-diff/j6_plugin_graph_diff.py --file1 ... --file2 ...原因:外挂脚本包含完整的 FX Graph 解析逻辑(节点解析、差异分类、相似度计算等),Agent 自行实现容易遗漏格式兼容性、分类精度等问题。
在调用脚本前,Agent 必须确认两个输入文件路径存在且可读,避免脚本执行失败。
外挂脚本位于:j6-plugin-graph-diff/j6_plugin_graph_diff.py
调用时使用相对路径:
python j6-plugin-graph-diff/j6_plugin_graph_diff.py --file1 <path1> --file2 <path2> -o <output_path>
对比两份 FX Graph 计算图文件(例如评测与导出、训练与推理、不同版本之间的计算图),实现:
本 Skill 采用外挂脚本 + Agent 分析的分工模式:
| 组件 | 职责 | 输入 | 输出 |
|---|---|---|---|
外挂脚本 j6_plugin_graph_diff.py | 计算图差异对比 | 两个 FX Graph 文件 | diff 报告(文本格式) |
| Agent Skill | 源码定位与分析 | diff 报告 + 模型源码 | 源码位置、修复建议 |
重要:Agent 不得自行实现外挂脚本的职责。差异对比必须调用外挂脚本,Agent 只负责解读脚本输出并进行源码定位。
外挂脚本只负责计算图层面的差异对比,不涉及源码分析:
Agent 负责根据 diff 报告进行源码定位和问题分析:
本 Skill 适用于以下场景:
torch.relu → torch.leaky_relu)args=(x, 1) → args=(x, 0.5))| 信息 | 说明 | 示例 |
|---|---|---|
| fx_graph 文件 1 | 第一个计算图文件路径 | graph_before.txt |
| fx_graph 文件 2 | 第二个计算图文件路径 | graph_after.txt |
| 信息 | 说明 | 示例 |
|---|---|---|
| 原始模型代码 | PyTorch 模型定义文件 | model.py |
| 模型类名 | 便于精确定位 | class ResNet |
硬约束:本步骤不可跳过,不可由 Agent 自行替代。必须通过 Bash 工具调用外挂脚本。
# 使用外挂脚本对比两个 FX Graph 文件
python j6-plugin-graph-diff/j6_plugin_graph_diff.py --file1 fx_graph_1.txt --file2 fx_graph_2.txt -o diff_report.txt
Agent 职责:
脚本输出:
Agent 职责:
opcode: 操作类型(call_module, call_function, call_method 等)target: 目标模块/函数名args: 输入参数name: 节点名称关键信息提取:
# 从 diff 报告中提取差异节点
diff_nodes = extract_diff_nodes(diff_report)
for node in diff_nodes:
print(f"节点名: {node.name}")
print(f"操作类型: {node.node_type}")
print(f"目标: {node.target}")
print(f"差异分类: {node.category}")
Agent 职责:
target 和 name 在源码中搜索:
self.xxx = ...)self.xxx(...))定位策略:
call_module 类型节点:
__init__ 中搜索模块定义:self.{name} = ...backbone.layer1.conv):
self.backboneself.layer1forward 中搜索调用:self.{name}(...)call_function 类型节点:
forward 中搜索函数调用:F.{target}(...) 或 torch.{target}(...)call_method 类型节点:
forward 中搜索方法调用:tensor.{target}(...)get_attr 类型节点:
__init__ 或类属性中搜索定义Agent 职责:
================================================================================
FX Graph 计算图对比报告
================================================================================
文件 1: fx_graph_pred.txt (评测)
文件 2: fx_graph_export.txt (导出)
图1总节点数: 1250
图2总节点数: 1248
整体相似度: 98.5%
================================================================================
📍 第一个差异点位置:
文件1 行号: 342
文件2 行号: 340
差异类型: operator_change
📝 差异内容:
文件1: call_function target=torch.relu args=(x41,)
文件2: call_function target=torch.leaky_relu args=(x41,)
📊 差异分类统计
================================================================================
OPERATOR_CHANGE (3 处):
...
PARAMETER_CHANGE (5 处):
...
================================================================================
🔗 源码反向定位 (Agent 分析)
================================================================================
差异点 #1: torch.relu → torch.leaky_relu
差异类型: operator_change
源码位置: model.py:156 (forward 函数)
代码上下文:
154 | def forward(self, x):
155 | x = self.conv(x)
156 | x = F.relu(x) # ← 差异点:评测与导出不一致
157 | return x
修复建议:
- 检查导出配置中是否有算子替换规则
- 确认评测和导出是否使用了不同的模型配置
差异点 #2: Conv2d 参数不一致
差异类型: parameter_change
源码位置: model.py:89 (__init__ 函数)
代码上下文:
87 | def __init__(self):
88 | super().__init__()
89 | self.conv = nn.Conv2d(3, 64, 3, padding=1) # ← padding 参数差异
90 | ...
修复建议:
- 检查导出时的参数配置
- 确认是否为预期的参数调整
差异模式:
torch.relu → torch.leaky_relutorch.add → torch.cat判断标准:
差异模式:
args=(x, 1) → args=(x, 0.5)padding=0 → padding=1kernel_size=3 → kernel_size=5判断标准:
差异模式:
判断标准:
差异模式:
判断标准:
# 用户输入
"对比评测和导出的计算图,看看是否一致"
# Agent 执行流程
1. 【调用脚本】python j6-plugin-graph-diff/j6_plugin_graph_diff.py --file1 fx_graph_pred.txt --file2 fx_graph_export.txt -o diff_report.txt
2. 【分析报告】解析 diff 报告,识别差异类型
3. 【源码定位】对于关键差异节点,在模型源码中定位
4. 【判断预期】根据"评测与导出对比"场景,判断差异是否合理:
- ✅ 无差异:评测和导出一致
- ❌ 算子替换(如 relu → leaky_relu):需排查
- ⚠️ 参数差异:检查配置是否一致
5. 【生成报告】输出综合分析结果
# 用户输入
"对比训练模式和推理模式的计算图差异"
# Agent 执行流程
1. 【调用脚本】生成 diff 报告
2. 【分析报告】重点识别:
- 是否有意外的算子替换(operator_change)
- 是否有参数值异常(parameter_change)
- Dropout、BatchNorm 等训练/推理差异是否正常
3. 【源码定位】在模型源码中找到问题位置
4. 【提供建议】针对异常差异给出修复建议
# 用户输入
"对比两个模型的计算图结构差异"
# Agent 执行流程
1. 【调用脚本】python j6-plugin-graph-diff/j6_plugin_graph_diff.py --file1 model_a_graph.txt --file2 model_b_graph.txt -o diff_report.txt
2. 【分析报告】关注 structure_change 类型的差异
3. 【源码定位】定位到两个模型源码中的对应位置
4. 【生成报告】说明结构差异的具体含义
self.stem_conv → 搜索 self.stem_conv = ...backbone.layer1.conv → 逐层搜索 self.backbone → self.layer1 → self.convtarget=torch.relu → 搜索 F.relu 或 torch.reluj6_plugin_graph_diff.pyj6-plugin-graph-diff/j6_plugin_graph_diff.py(相对于项目根目录)difflib, re, pathlib, dataclasses硬约束:Agent 不得自行实现脚本的差异对比逻辑,必须通过
python j6-plugin-graph-diff/j6_plugin_graph_diff.py调用。
# 基本用法(输出到文件)
python j6-plugin-graph-diff/j6_plugin_graph_diff.py --file1 graph1.txt --file2 graph2.txt -o report.txt