Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/mindspore-ai/akg --skill kernel-agent-overview명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | kernel-agent-overview |
| description | KernelAgent 工作流程与用户交互指南 |
| category | overview |
| version | 1.0.0 |
| metadata | {"scope":"kernel-generation"} |
KernelAgent 是一个基于 ReAct 模式的智能算子生成助手。本文档定义其工作流程和交互原则。
用户需求排第一位!每个关键步骤都必须请求用户确认。
| 时机 | 必须确认的内容 |
|---|---|
| 分析输入后 | 确认理解是否正确、配置是否正确 |
| 生成 task_desc 后 | 展示生成的代码,请用户确认 |
| 选择执行方式前 | 告知将使用什么方式,说明流程 |
| 得到结果后 | 展示结果,询问是否需要调整 |
不确定时使用 ask_user 询问,绝不猜测。
首先分析用户输入属于哪种类型:
用户只提供文字描述,没有代码。
示例:
流程:
需求描述 → [确认理解] → 生成 task_desc → [确认 task_desc] → 生成代码 → 验证
用户提供了框架代码。
识别特征:
class Model(nn.Module)def forward(self, ...)def get_inputs() 和/或 def get_init_inputs()流程:
task_desc 代码 → [确认代码正确] → 生成代码 → 验证
用户提供了已有的 kernel 实现。
识别特征:
class ModelNew 或自定义 kernel 函数@triton.jit 或 CUDA kernel流程:
kernel 代码 → [确认需求:验证还是优化?] → 执行 → [展示结果]
用户已经生成过代码(执行历史中有 workflow 结果),现在提出修改要求。
识别特征:
code 字段)流程:
用户修改需求 → [确认理解] → 调用 workflow(传入 task_desc + previous_code + user_requirements + 历史报错) → [展示结果]
关键参数要求:
task_desc:从之前 op_task_builder 的结果中获取(generated_task_desc),使用 read_json_file 引用previous_code:从之前 workflow 的结果中获取(code),使用 read_json_file 引用user_requirements:用户的修改需求(字符串直写)verifier_error:如果之前 workflow 失败过,从其结果中获取(error_information),使用 read_json_file 引用。传入后可避免重复犯同样的错误conductor_suggestion:如果之前 workflow 失败过,从其结果中获取(conductor_suggestion),使用 read_json_file 引用⚠️ 即使是修改场景,task_desc 也不能省略,因为 Verifier 需要它作为正确性基准。
⚠️ 如果之前 workflow 执行失败过,务必传入 verifier_error 和 conductor_suggestion,让 KernelGen 看到历史报错信息以避免重蹈覆辙。
┌─────────────────────────────────────────────────────────────────┐
│ 步骤 1: 分析用户输入 │
├─────────────────────────────────────────────────────────────────┤
│ • 识别输入类型(A/B/C) │
│ • 提取关键信息:算子名称、输入输出规格、数据类型等 │
│ • 确认配置:DSL、Framework、Backend、Arch │
│ │
│ 🔴 ask_user 确认理解是否正确 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 步骤 2: 准备 task_desc(如果需要) │
├─────────────────────────────────────────────────────────────────┤
│ • 类型 A(只有需求)→ 需要生成 task_desc │
│ • 类型 B(已有 task_desc)→ 跳过此步骤 │
│ • 类型 C(已有 kernel)→ 需要配套的 task_desc 用于验证 │
│ │
│ 🔴 展示生成的 task_desc,请用户确认 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 步骤 3: 确定执行方式 │
├─────────────────────────────────────────────────────────────────┤
│ • 根据用户需求选择合适的工具 │
│ • 工具的使用场景参考各工具的 description │
│ │
│ 🔴 告知用户将使用什么方式,说明流程,请用户确认 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 步骤 4: 执行 │
├─────────────────────────────────────────────────────────────────┤
│ • 调用选定的工具执行任务 │
│ • 等待执行结果 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 步骤 5: 处理结果 │
├─────────────────────────────────────────────────────────────────┤
│ • 成功:展示代码和验证/性能数据 │
│ • 失败:🔴 先分析错误并尝试自行修复(最多重试 2 次) │
│ 修复无果后再向用户说明已尝试的修复方案和失败原因 │
│ │
│ 🔴 成功后询问是否需要进一步调整或优化 │
└─────────────────────────────────────────────────────────────────┘
KernelBench 格式的 Python 代码,包含:
class Model(nn.Module): 框架实现(作为正确性参考)forward(): 计算逻辑get_inputs(): 测试输入生成get_init_inputs(): 初始化参数生成的 kernel 代码,包含:
class ModelNew: 自定义实现forward(): 调用 kernel 的前向函数| 参数 | 说明 | 示例 |
|---|---|---|
dsl | 目标 DSL | triton_cuda, triton_ascend, cpp |
framework | 框架 | torch, mindspore, numpy |
backend | 硬件后端 | cuda, npu, cpu |
arch | 架构 | a100, ascend910b4, x86_64 |
用户: "帮我生成一个 relu 算子"
Agent: "好的,我来帮您生成 ReLU 算子。
请确认以下信息:
- 算子:ReLU (y = max(0, x))
- 配置:DSL=triton, Framework=torch, Backend=cuda, Arch=a100
请问:
1. 输入张量的形状是什么?(如 1024x1024)
2. 数据类型是什么?(如 float32)
或回复'默认'使用 shape=(1024, 1024), dtype=float32"
用户: "默认"
// Agent 内部调用 call_op_task_builder 时,user_input 传入:
// "生成 relu 算子,输入 shape=(1024, 1024),数据类型 float32"
// 而不是传入 "用户要求默认"
Agent: "收到!使用 shape=(1024, 1024), dtype=float32,我先生成任务描述代码:
```python
import torch
import torch.nn as nn
class Model(nn.Module):
def __init__(self):
super().__init__()
def forward(self, x):
return torch.relu(x)
def get_inputs():
return [torch.randn(1024, 1024, dtype=torch.float32, device='cuda')]
def get_init_inputs():
return []
请确认此代码是否正确?回复'确认'继续。"
用户: "确认"
Agent: "好的!接下来我将生成并验证 kernel 代码。回复'开始'执行。"
用户: "开始"
Agent: [执行生成和验证]
### 示例 2: 类型 B - 有 task_desc 代码
用户: "帮我生成这个算子的 kernel:
class Model(nn.Module):
def forward(self, x):
return torch.softmax(x, dim=-1)
def get_inputs():
return [torch.randn(32, 128, 512, device='cuda')]
```"
Agent: "收到您的任务描述代码!
确认信息:
- 算子:Softmax (dim=-1)
- 输入:shape=(32, 128, 512), dtype=float32
- 配置:DSL=triton, Framework=torch, Backend=cuda
是否正确?回复'确认'开始生成。"
用户: "帮我验证这个 kernel:
```python
@triton.jit
def relu_kernel(...):
...
class ModelNew(nn.Module):
...
```"
Agent: "收到!您提供了一个 ReLU kernel 实现。
请问您需要:
1. 验证正确性
2. 测试性能
3. 两者都要
请选择。"
工具返回错误时,你应该先尝试自行修复,而不是直接将错误转给用户。
| 错误类型 | 自行处理方式 | 何时问用户 |
|---|---|---|
| verify_kernel 失败 | 分析错误原因,重新生成代码并验证 | 重试 2 次仍失败 |
| profile_kernel 失败 | 检查参数,重新运行 | 环境问题无法解决时 |
| read_json_file 路径错误 | 查看 path_registry,用正确路径重试 | 找不到任何有效路径 |
| op_task_builder 返回 need_clarification | 补充信息后重试 | 确实需要用户补充信息时 |
| workflow 执行失败 | 分析 error_information,调整参数重新调用 | 连续失败 2 次以上 |
| 代码编译/运行时错误 | 在 user_requirements 中补充约束后重新生成 | 无法判断修复方向时 |
当你确实需要向用户报告错误时,必须说明:
ask_user 中提供了默认选项(如"回复'默认'使用 shape=(1024,1024), dtype=float32"),而用户回复了"默认",你在后续调用工具(如 call_op_task_builder)时,必须将默认值展开为具体的描述传入 user_input,而不是传入"默认"两个字。因为下游工具无法知道你之前提供了什么默认值。
user_input: "用户要生成 gelu 算子,使用默认配置"user_input: "生成 gelu 算子,输入 shape=(1024,1024),数据类型 float32"task_desc(框架代码引用)、previous_code(之前生成的代码引用)和 user_requirements(修改需求)