CANN/cannbot-skills CUDA转Ascend算子开发工作流
2026/7/15 9:59:09 网站建设 项目流程

cuda2ascend

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

社区版直调算子开发工作流。用户描述算子需求,Agent 团队按统一流程从需求分析走到代码上库,全程可追溯、可恢复、可定制。

借鉴了面向对象的设计思想,本仓内维护一套通用工作流基类,各生态算子仓作为子类,可以拉取使用本工作流,覆写与自身耦合的领域知识,按照仓内开发流程定制本工作流,达到一套核心流程服务所有算子仓,消除重复建设的目的。

设计思想

借鉴面向对象思想重构直调算子工作流:CANNBot 仓维护一套通用工作流作为基类,各算子仓的工作流作为子类,继承基类编排流程,仅覆写与自身耦合的领域知识和验收实现。

  • 封装:对算子仓隐藏编排的复杂实现,工作流将编排逻辑封装为知识接口。算子仓只关心"我提供什么知识",不关心"工作流怎么用"。
  • 继承:CANNBot 提供基类,算子仓继承基类,只覆写自己需要的部分。
  • 多态:工作流核心始终通过逻辑名引用可覆写 Skill(领域知识、验收标准),实际实现在 init 时由 symlink 绑定确定。

知识分层

知识分布按抽象层级从高到低分层,越靠上越通用稳定、越靠下越具体易变:

层级承载形式职责可否被子仓覆写
主 Agent根目录 AGENTS.mdPM Agent 的全局知识,规范行为边界final
工作流ops-direct-invoke-workflowskill编排流程的组织与调度final
子 Agentagents/*.md调度执行的最小单位,规范每一个子步骤的行为final
Skillskills/repo-*/skills/workflow-*/仓库领域知识、工作流定义(模板/验收标准)virtual
仓内文档仓库 doc 目录面向开发者的参考资料仓库自有

其中 Agent 与 Skill 相邻两层职责最易混淆,判定原则:会变、需被子仓 override 的领域知识归 Skill;跨仓通用、用于定义角色身份与行为边界的内容归 Agent。

参与角色

角色类型职责
用户验收/决策需求提出、各确认点审批
PM(主 Agent)调度用户交互、流程编排、问题裁定;只调度不执行
architect执行Spec 形式化、开发方案与测试方案设计
developer / -code / -test / -doc执行代码、测试、文档开发与修复
QA验收各 CP 点验收,加载对应workflow-cp*Skill 完成判定,产出验收报告与用户确认问卷

开发流程概览

完整流程从需求分析到上库分 8 个阶段,方案线与测试线在设计/开发阶段并行,CP3/CP4/CP5 构成验收状态机:

编号流程角色输入输出说明备注
阶段0:开发准备
0开发准备developer-环境信息文档检查 NPU 设备、CANN 环境、编译环境,写入.cannbot交付件可复用,支持独立触发
⛔ CP0环境确认QA环境信息文档用户问卷 jsonQA 加载workflow-cp0生成环境确认问卷,PM 发送给用户固定用户确认;失败由用户决定修复或停止
阶段1:需求分析
1.1需求分析PM对话上下文、仓库设计约束需求文档数学定义、算子原型、目标芯片、精度/性能要求;缺项发问卷补齐
CP1需求确认QA需求文档验收结论QA 加载workflow-cp1核对需求;需用户确认时生成问卷 json 交 PM 发送不通过打回 1.1
1.2Spec 生成architect需求文档Spec(spec.yaml,机器可校验)需求形式化为 L0 数学契约,作为后续方案与测试设计的统一真值源;规范见 ops-spec-gen
CP1'Spec 确认QAspec.yaml验收结论QA 加载workflow-cp1-prime核对 Spec(9-stage 校验通过);需用户确认时生成问卷 json 交 PM 发送不通过打回 1.2
阶段2:方案设计(方案线 / 测试线并行)
2.1黑盒测试设计architectspec.yaml测试方案文档golden 实现方案、L0/L1/L2 分级用例设计测试线
CP2.1测试检查QA测试方案文档验收结论QA 加载workflow-cp2-1完成黑盒测试评审不通过打回 2.1
2.2开发方案设计architectspec.yaml开发方案文档代码架构、Buffer 规划、Tiling、多核切分、Ascend C 接口验证方案线
CP2.2方案检查QA开发方案文档验收结论QA 加载workflow-cp2-2完成开发方案评审不通过打回 2.2
CP2'方案确认QA开发方案 + 测试方案验收结论QA 加载workflow-cp2-prime,CP2.1、CP2.2 均通过后合并确认不通过打回对应步骤
阶段3:代码开发(开发线 / 测试线并行)
3.1算子开发developer-code开发方案文档、修改要求算子代码按方案实现、编译验证通过;被打回时按修改要求调整开发线
3.2测试工程开发developer-test测试方案文档golden 代码 + 用例表 + 性能采集框架实现 golden、功能用例、性能采集框架测试线
3.3白盒测试补全developer-test算子代码、测试代码白盒测试用例覆盖黑盒未涉及的分支3.1/3.2 汇合后
CP3功能验收QA算子代码 + 测试代码功能验收报告QA 加载workflow-cp3执行全量功能测试(含精度比对)不通过回退 3.1
阶段4:性能验收
4.1性能采集执行developer-test算子代码(CP3 通过后)性能数据用 3.2 搭的性能采集框架跑出性能数据基于 CP3 通过后的最终代码
CP4性能验收QA算子代码 + 性能数据性能验收报告QA 加载workflow-cp4评估性能是否达标不通过回退 3.1(重走 3.3→CP3→4.1→CP4)
阶段5:代码检视
CP5代码检视QA全部变更文件检视结论QA 加载workflow-cp5完成多维度代码检视不通过回退 3.1(重走至 CP5)
阶段6:上库准备
6.1文档补全developer-doc算子代码 + 设计文档算子文档补全算子使用文档
6.2提交 PRdeveloper-doc全部代码 + 文档PR提交 PR
6.3CI 流水线CI(外部)PRCI 报告触发 CI:编译 + UT + ST非调度子 Agent
6.4codecheck 修复developerCI 报告修复后代码修复 codecheck 问题
6.5检视意见修复developerPR 检视意见修复后代码修复 PR 检视意见
CP6CI 通过确认QACI 报告 + PR 状态上库确认QA 加载workflow-cp6确认 CI 通过、检视意见闭环未通过回退 6.4/6.5 后重触发 CI
阶段7:开发总结
7.1开发报告developer-doc全部交付物开发报告整理开发过程与交付物清单,写入.cannbot
7.2经验总结developer-doc开发过程记录经验总结文档沉淀开发经验与踩坑记录,写入.cannbot

设计约束

为保证实现一致性、在方案出现分歧时提供统一指导,本工作流约定了一组设计约束。理解这些约束能帮助参与开发的开发者把握最初的设计思路——为什么定制要靠 override 而非改编排、为什么执行方与验收方必须分离、为什么中间状态要落盘

约束由 skill 看护:这组约束不是一次性文档,而是由ops-direct-invoke-workflow-maintainskill 持续看护的维护红线。任何对工作流文件的新增/修改/删除都须先触发该 skill,改完后按其派生的可执行检视条款逐条自查——约束不通过则回退修改。开发者若要演进工作流,务必先阅读该 skill。

结构约束(SOLID)

条款说明
单一职责(S)每个 Skill 只负责一个功能域,只有一种原因引起它需要修改
开闭(O)编排对扩展开放、对修改关闭;子仓扩展步骤应 override virtual skill,而非改动编排
里氏替换(L)子仓 override 后须保持相同逻辑名、输入输出格式与调用方式,上层无感知
接口隔离(I)子仓只 override 自己需要的组件,不被迫实现全部 virtual 组件
依赖倒置(D)上层只依赖抽象逻辑名,不依赖具体实现路径 / 章节结构
基类演进兼容基类对外契约(逻辑名 / 输入输出格式 / 调用约定)一经发布只增不破坏;确需破坏性变更须提供迁移路径并通知已接入仓

层级感知

层级感知方向:主 Agent → 工作流 → 子 Agent → Skill → 仓内文档。

  • 层级间单向感知:下级模块不感知上级(子 Agent 不知自己在流程哪一步,Skill 不提及被谁调用)。
  • 层级内黑盒感知:同级模块之间互不了解对方内部逻辑。

调度约束

条款说明
职责分离任务的执行方与验收方不能是同一 Agent 实例
最小信息每个子 Agent 只获取完成当前任务所需的最小信息集
最小权限每个子 Agent 只获取完成当前任务所需的最小操作权限(当前由 hook 落地为写权限约束)
过程有界所有可能循环/重试的环节必须声明最大次数,超限暂停并报告
确定性交付每个子环节有明确交付件与可判定的通过指标
状态可观测每阶段完成后状态持久化到外部(.cannbot/state.json),不依赖会话记忆
可恢复性暂停/失败落盘到可恢复状态点,恢复时不重跑已通过阶段
修改不越权执行角色严格遵循上游设计,发现问题回退上游修改,不自行变更上游决策

风格约束

  • SKILL.md 只做路由:入口文件只做意图识别与路由分发,知识细节放 references。
  • 机制优于自然语言:能用 hook / 脚本 / 权限声明约束的行为,不写成 prompt 自然语言。
  • 引用而非硬编码:涉及仓库领域知识时引导 Agent 读原文,而非全文硬编码进 Skill。
  • 开发者知识外置:对开发者同样可见的知识优先放仓内 doc,Skill 只做引导。
  • 举例不引入外部概念:举例只用仓内已有知识或通用概念,不引入需额外背景才懂的概念。

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询