代码概要 — 索引模式(大型 PR 检视)
【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills
派发
派发子 Agent 执行代码概要生成。subagent_type按优先级:"ascendc-code-summarizer"→"general"。
Agent({ subagent_type: "ascendc-code-summarizer 或 general", description: "代码概要:" + 文件组名, prompt: "代码概要生成(大型PR — 索引模式) 【输入】 - 文件组名:{group_name} - 本组文件列表:{group_file_list} - diff 文件路径:{diff_file_path} - 完整源码路径:{repo_path} - 概要输出路径:{code_summary_output_path} - 芯片架构参数:{arch_params}(若为首个文件组则为空字符串,自行提取;否则直接复用) 【执行要求】 1. 严格按本文件「子 Agent 执行指南」中定义的 5 步流程执行 2. 概要写入输出路径 3. 返回结构化结果 【执行指南位置】 Read 本文件的「子 Agent 执行指南」章节获取完整指令。 " })子 Agent 执行指南
以下内容仅子 Agent 读取,主 Agent 不执行。
核心原则
- 索引优先— 只生成导航所需的关键信息,不做深度变量溯源
- 范围约束— 只分析本组文件列表中的文件,不越界
- 快速完成— grep 为主,避免逐文件深度阅读
关键知识
Tiling/Kernel 分层
| 侧别 | 文件位置 | 代码特征 | 职责 |
|---|---|---|---|
| Kernel 侧 | op_kernel/*.cpp/.h | __aicore__、AscendC::、pipe.InitBuffer | AI Core 上执行计算 |
| Tiling 侧 | op_host/*.cpp/.h | gert::TilingContext、TilingData | 参数校验、资源计算、多核切分 |
变量来源类型(仅标注类型,不深追)
| 来源 | 特征 | 标注 |
|---|---|---|
| Tiling 传递 | tilingData.GetXXX() | [TilingData] |
| 硬件配置 | GetCoreNumAic()等平台 API | [硬件配置] |
| 常量定义 | constexpr/const | [常量] |
| 外部输入 | 函数参数、用户传入 | [外部输入] |
执行流程(5 步)
Step 1: 读取变更 — Read 本组文件在 diff 中的变更部分 Step 2: 确认侧别 — 按路径判定,与 file-split 结果交叉验证 Step 3: 生成索引 — 函数清单 + API 调用索引 + 常量清单 Step 4: 提取架构参数 — 从 platformInfo_ 提取核数/对齐常量(仅首个文件组) Step 5: 输出概要 — 按精简模板填充,写入输出路径Step 1: 读取变更
- Read diff 文件,仅关注本组文件列表中的变更 hunks
- 不需要读完整源码(diff 已包含变更行的上下文)
- 提取:变更函数名、新增/修改的 API 调用、变更的常量定义
Step 2: 确认侧别
按关键知识中的侧别特征表判定,与 file-split 的侧别标签交叉验证。若不一致,以代码特征为准并标注差异。
Step 3: 生成索引
对每个本组文件,grep 提取:
Step 3.1 — 函数清单: Grep 函数定义(^[\\w<>]+ [\\w:]+::\\w+\\([^)]*\\)等模式),填入: | 函数 | 签名 | 行范围 | 所属文件 | 角色 | 变更? |
Step 3.2 — API 调用索引: Grep AscendC API 调用模式(DataCopy、ReduceMax、EnQue、DeQue、SetGlobalBuffer等),填入: | API | 行号 | 所属文件 | 上下文 | 变更? |
Step 3.3 — 常量清单: Grepconstexpr/const/#define,填入: | 常量 | 值 | 位置(文件:行) | 用途 | 变更? |
Step 4: 提取架构参数(仅首个文件组)
若{arch_params}为空:
- Grep
platformInfo_中提取的核数、对齐常量等 - 若无法从本地确定数值,使用
/npu-archskill 查询 否则直接复用传入的{arch_params}。
Step 5: 输出概要
按输出模板填充,写入输出路径。
输出模板(索引模式,精简版)
# 代码概要 — {operator_name}({Kernel/Tiling/混合}侧) ## 变更文件概览 | # | 文件 | 侧别 | 变更类型 | 变更行数 | |---|------|------|---------|---------| | 1 | {path} | {Tiling/Kernel} | {新增/修改/删除} | ±{N} | ## 函数清单 | 函数 | 签名 | 行范围 | 所属文件 | 角色 | 变更? | |------|------|--------|---------|------|-------| ## API 调用索引 | API | 行号 | 所属文件 | 上下文 | 变更? | |-----|------|---------|--------|-------| ## 常量清单 | 常量 | 值 | 位置(文件:行) | 用途 | 变更? | |------|-----|-------------|------|-------| ## 文件组间依赖 | 依赖的共享头文件 | 引用位置 | 用途 | |---------------|---------|------| ## 变量来源标注 | 关键变量 | 来源类型 | 所属文件 | |---------|---------|---------| ## 芯片架构参数(仅首个文件组输出) | 参数 | 值 | 来源 | |------|-----|------|与标准 summary 的差异速查
| 跳过的分析 | 原因 |
|---|---|
| 变量声明→初始化→校验链追踪 | 检视子 Agent 按需 grep |
| TilingData 每个字段的 Host 侧赋值公式 | 检视子 Agent 按需 grep |
| 流水线模式 / Buffer 管理 / 多核切分 | 性能条例检视时自行分析 |
| 跨文件防御摘要 | 按文件组隔离后不需要跨文件追踪 |
返回格式
侧别: {Kernel侧 / Tiling侧 / 混合} 算子名: {operator_name} 核心 API: {API 列表} 概要路径: {输出路径} 架构参数: {arch_params 字符串,供其他文件组复用}约束
- 概要必须写入输出路径
- 禁止对本组文件列表之外的文件做分析
- 禁止做深度变量溯源(声明→初始化→校验链)
- 函数/API/常量清单通过 grep 即可,无需逐文件深度阅读
【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考