ascendc-operator-code-review
Ascend C 代码检视技能
核心原则
- 合规优先 - 所有检视动作映射至编码规范具体条款,100%覆盖无遗漏
- 可审计可复用 - 检视动作全程日志记录
- 简洁高效 - 检视报告结构化,清晰明了
调用接口
必需参数
调用此技能时,必须明确提供以下参数:
参数1:代码片段
- 待检视的代码内容
- 可以是函数、代码块、文件内容等
参数2:检视规则描述
- 明确指定要检视的问题类型
- 例如:
检查整数溢出、检查内存泄漏、检查空指针解引用等 - 或指定具体的规范文件路径
参数3:规范文件路径(可选)
- 指定具体的编码规范文件路径
- 如果未指定,将根据检视规则描述查找对应的规范文件
参数校验
如果缺少任何一个必需参数,应:
- 明确通知用户缺少哪些参数
- 放弃执行检视
- 提示用户提供完整参数
规范文件引用
当用户指定检视规则描述时,按以下规则匹配规范文件:
数值运算、溢出、除零→ references/01_numeric_operations.md内存、指针、越界→ references/02_memory_pointer_safety.md资源、泄漏→ references/03_resource_management.md输入、验证→ references/04_input_validation.md并发、线程→ references/05_concurrency_safety.md算子接口、Runtime、Tiling、动态Shape→ references/06_operator_interface.md接口兼容性、ABI→ references/07_interface_compatibility.md- 用户直接指定路径 → 使用指定路径
检视流程(假设检验驱动)
阶段一:准备
- 校验必需参数是否完整
- 根据检视规则描述或指定路径读取编码规范文件
- 确认待检视的代码片段
阶段二:假设检验(核心)
步骤1:代码段识别
将目标代码划分为独立的代码段(函数、语句块、逻辑单元)
步骤2:假设建立
对每个代码段建立假设:
- 原假设 H0:该代码段是安全的
- 备择假设 H1:该代码段存在风险
- 自信值初始化:0%
步骤3:证据收集与评估
按维度系统性寻找证据:
| 证据类型 | 分析动作 | 分值规则 |
|---|---|---|
| 红线规范违反 | 对照红线规范条款识别严重违规点 | 有效证据 +40% |
| 一般规范违反 | 对照一般规范条款识别违规点 | 有效证据 +20% |
| 上下文防御缺失 | 检查作用域内是否有防御代码 | 无防御 +30% |
| 函数调用链风险 | LSP/Grep 分析调用函数内部逻辑 | 发现风险 +25% |
| 数据流追踪风险 | 分析变量来源、运算过程 | 发现风险 +25% |
- 提供数值运算类型证据时,需提供明确的风险运算案例(如溢出,越界,回绕,等)
分析要求:
- 使用LSP获取代码中的符号定义,使用Grep查找依赖关系
- 风险代码必须要检查是否在当前文件作用域内的其他位置进行防御
- 遇到函数调用,必须查看函数内部逻辑并综合判断
- 遇到存在风险的结构体或成员变量,必须查看定义和运算过程
步骤4:证据有效性校验
排除误报:
- 已在作用域其他位置进行有效防御 → 排除
- 上下文可证明不可能触发风险 → 排除
步骤5:决策判断
计算自信值并决策:
- 自信值 = Σ 有效证据分值
- 决策规则:当自信值超过60%时,判定代码段存在风险,进入报告生成;否则继续检查下一代码段
阶段三:报告生成
- 按代码检视报告模板格式生成报告
- 每个问题详情前展示假设检验过程(证据链和自信值计算过程)
注意事项
- 请先完整阅读对应的编码规范文件,并根据这些规范进行代码review,其他的一概不统计
- 检视过程中,存疑代码块存在函数调用行为,必须动用LSP工具,或者搜索工具,实现深层次分析
- 不确定的编码规范问题,在输出报告中以存疑的形式进行列举,供用户自主判断
- 检视报告中列举的问题代码不宜过长,描述清晰问题代码即可
- 返回检视结果时,必须仔细检查结果中风险代码行的行数是否正确
- 返回检视结果时,所有风险代码块都应该被引用,不能只展示一个行数
输出规范
检视报告必需包含
- 检视类别
- 风险点列表(含行号、代码片段)
- 证据链(展示假设检验过程)
- 建议修复方案
输出格式
详见:agents/ascendc-ops-reviewer/style/code_review_summary_style.txt
More from ascend/agent-skills
ascendc-operator-dev
AscendC算子端到端开发编排器。当用户需要开发新算子、实现自定义算子、或完成从需求到测试的完整流程时使用。关键词:算子开发、operator development、端到端、完整流程、工作流编排、新建算子。
57ascendc-operator-design
完成AscendC算子设计 - 帮助用户完成算子的架构设计、接口定义和性能规划。当用户提到算子设计、算子开发、tiling策略、内存规划、AscendC kernel设计、两级tiling、核间切分、核内切分时,使用此skill。
56ascendc-operator-doc-gen
为AscendC算子生成PyTorch风格的接口文档(README.md)。触发场景:编译调试通过后需要生成接口文档,或用户提到"生成算子文档"、"创建README"、"文档化算子"、"帮我写文档"(算子上下文)、"算子文档"时使用。
56ascendc-operator-precision-eval
AscendC算子精度评估。对已编译安装的算子生成全面的精度测试用例集(≥30例),运行并生成精度验证报告。关键词:精度测试、precision evaluation、精度报告、accuracy、误差分析。执行完成后 MUST 在当前对话中展示总览、失败摘要与关键发现,不得仅附报告路径。
55ascendc-operator-testcase-gen
完成AscendC算子验证用例生成 - 帮助用户完成testcase设计。当用户提到用例设计、泛化用例生成、算子标杆、UT用例、精度用例、性能用例时,使用此skill。
55ascendc-operator-project-init
初始化 AscendC 算子工程并创建可编译的算子骨架。触发场景:(1) 用户要求创建新算子;(2) 关键词:ascendc算子、新建算子、算子目录、算子初始化;(3) 需要基于 ascend-kernel 模板快速落地。本 skill 不只建目录,还输出“可继续开发”的标准文件与检查清单。
55