CANNBot+JiuwenClaw,让小艺辅助Ascend C开发
前言
openJiuwen作为开源Agent平台,致力于提供灵活、强大且易用的AI Agent开发与运行能力。
小艺开放平台依托HarmonyOS生态,为开发者打造全链路智能体开发解决方案。
CANNBot 是面向CANN开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的Skills模块,目前已实现 Ascend C / PyPTO / Tilelang / triton 算子开发全流程覆盖,未来将拓展至 CANN 更多技术领域。
如果你是以下之一,我觉得你非常需要本文,毕竟无缝接入华为设备,动动嘴指挥小艺帮你写算子,查api还是很舒服的。
● CANN 社区开发者
● 昇腾 NPU 平台 AI 应用开发者
● Ascend C / PyPTO 算子开发者
按照本文的步骤,你能实现类似下面的效果。

一、CANNBot Skills包含的主要内容
1.1 逻辑架构视图
1.1.1 Ascend C 算子开发
╔═══════════════════════════════════════════════════════════════════════════════╗
║ SKILLS(知识能力层) ║
╠═══════════════════════════════════════════════════════════════════════════════╣
║ ║
║ ┌─ 知识库类 ──────────────────────────────────────────────────────────────┐ ║
║ │ npu-arch NPU 架构知识与芯片映射 │ ║
║ │ tiling-design Tiling 设计方法论 │ ║
║ │ api-best-practices API 使用最佳实践 │ ║
║ │ ops-precision-standard 算子精度标准 │ ║
║ └─────────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─ 工程模板类 ────────────────────────────────────────────────────────────┐ ║
║ │ registry-invoke-to-direct-invoke 注册算子直调改造模板 │ ║
║ │ direct-invoke-template Kernel直调工程模板 │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─ 调试与测试类 ──────────────────────────────────────────────────────────┐ ║
║ │ precision-debug 精度调试与症状速查 │ ║
║ │ runtime-debug 运行时错误码解析 │ ║
║ │ crash-debug 卡死/崩溃调试、Coredump 分析 │ ║
║ │ env-check NPU 设备查询与环境验证 │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─ 测试开发类 ────────────────────────────────────────────────────────────┐ ║
║ │ st-design ST 测试用例设计 │ ║
║ │ ut-develop UT 开发与覆盖率增强 │ ║
║ │ code-review 代码检视规则 │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─ 工具辅助类 ────────────────────────────────────────────────────────────┐ ║
║ │ ops-profiling 算子性能采集分析 │ ║
║ │ task-focus 长任务聚焦防迷失 │ ║
║ └─────────────────────────────────────────────────────────────────────────┘ ║
║ ║
╚═══════════════════════════════════════════════════════════════════════════════╝
1.1.2 PyPTO 算子开
╔═══════════════════════════════════════════════════════════════════════════════╗
║ SKILLS(知识能力层) ║
╠═══════════════════════════════════════════════════════════════════════════════╣
║ ║
║ ┌─ 需求与设计 ────────────────────────────────────────────────────────────┐ ║
║ │ intent-understand 需求意图理解与规格生成 │ ║
║ │ api-explore API 可行性探索与分析 │ ║
║ │ op-design 算子方案设计生成 │ ║
║ └─────────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─ 实现与验证 ────────────────────────────────────────────────────────────┐ ║
║ │ golden-generate Golden 参考实现生成 │ ║
║ │ op-develop 算子代码实现与调试 | ║
║ │ precision-debug 精度问题诊断 │ ║
║ │ precision-compare 精度对比分析 │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─ 性能调优 ──────────────────────────────────────────────────────────────┐ ║
║ │ op-perf-tune 算子性能分析与调优 │ ║
║ └─────────────────────────────────────────────────────────────────────────┘ ║
║ ║
╚═══════════════════════════════════════════════════════════
1.1.3 TileLang 算子开发
╔═══════════════════════════════════════════════════════════════════════════════╗
║ SKILLS(知识能力层) ║
╠═══════════════════════════════════════════════════════════════════════════════╣
║ ║
║ ┌─ 环境与准备 ───────────────────────────────────────────────────────────┐ ║
║ │ env-check 环境检查与配置验证 │ ║
║ │ submodule-pull 三方库与子模块拉取 │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─ 需求与设计 ───────────────────────────────────────────────────────────┐ ║
║ │ op-design 算子设计文档生成 │ ║
║ │ programming-model-guide 模式选型与配置 │ ║
║ │ api-best-practices API 使用最佳实践 │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─ 实现与验证 ───────────────────────────────────────────────────────────┐ ║
║ │ op-develop 算子代码实现与测试 │ ║
║ │ op-test-design 测试设计与覆盖率分析 │ ║
║ │ review 代码格式检查与修复 │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─ 性能调优 ─────────────────────────────────────────────────────────────┐ ║
║ │ perf-optimization 性能调优与劣化模式检查 │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
║ ║
╚════════════════════════════════════════════════════════════
1.2 Skills 技能库
1.2.1 Ascend C 算子开发
| Skill | 功能 | 使用样例 |
| ascendc-api-best-practices | API 使用最佳实践、参数限制 | — |
| npu-arch | NPU 架构知识、芯片型号映射 | — |
| ascendc-docs-search | API 文档索引 + 在线搜索 | — |
| ascendc-env-check | NPU 设备查询、CANN 环境验证 | — |
| ascendc-tiling-design | Tiling 和 Kernel 设计方法论,按算子类别分类 | — |
| ascendc-precision-debug | 精度调试,症状-原因速查、常见陷阱 | — |
| ascendc-runtime-debug | 运行时错误调试,错误码解析(161xxx/361xxx/561xxx) | — |
| ascendc-crash-debug | 卡死/崩溃调试,Kernel 挂起、Coredump 分析 | — |
| ascendc-ut-develop | UT 单元测试用例开发与覆盖率增强 | — |
| ascendc-st-design | aclnn 接口测试用例设计、L0 / L1 测试用例生成 | — |
| ascendc-code-review | 代码检视方法论、5 大类别规范 | — |
| ascendc-task-focus | 任务聚焦,解决长任务“迷失在中间”的问题 | — |
| ascendc-whitebox-design | 白盒测试用例设计与生成 | — |
| ascendc-registry-invoke-template | 完整自定义算子工程模板,提供标准工程结构、代码模板、UT/ST 样例和多芯片架构参考 | — |
| ascendc-registry-invoke-to-direct-invoke | 注册调用算子转 <<<>>> kernel 直调 | 查看 |
| ascendc-direct-invoke-to-registry-invoke | <<<>>> kernel 直调转注册调用算子 | 查看 |
| ascendc-direct-invoke-template | Kernel 直调工程模板,提供验证过的样例工程和修改指南 | — |
| ops-profiling | NPU 性能采集与分析,CSV 指标解读、瓶颈定位、优化建议 | — |
| ops-precision-standard | 算子精度标准,按 dtype 分类提供 atol/rtol 精度比对标准 | — |
| ascendc-docs-gen | 算子文档写作参考,支持需求分析、详细设计等多个标准模版 | — |
| ops-simulator | NPU 仿真器技能。提供 CANN Simulator 的使用指导,包括精度仿真、性能仿真、流水线分析。 | — |
| cuda2ascend-simt | CUDA 算子迁移到 Ascend C SIMT,支持 standalone sample / torch_npu / pybind 三类交付形态,根据原始工程形态自动选择。仅支持 Ascend 950 PR平台。当前不支持:native JIT(nvrtc、运行时编译、扩展 JIT 加载)、torch 复数 dtype、device 侧 double(FP64)、CUDA 生态库(cuBLAS / cuDNN / cuFFT / cuSPARSE / Thrust / CUB / NCCL 等)、协作组、Ascend C SIMD API、矢量编程 API | 查看 |
| ascendc-blaze-best-practice | Matmul/Cube/GEMM/BMM 单算子直调生成(Blaze/tensor_api 路径),覆盖模板选型、改造、Tiling 及排错 | — |
| ascendc-performance-best-practices | 按算子族组织的性能优化经验与参考代码总结 | — |
| ascendc-regbase-best-practice | DAV_3510 RegBase 算子 API 约束、实现结构、常见陷阱及真实参考算子 | — |
| cann-env-setup | 昇腾 NPU CANN 安装与环境配置指导 | — |
| aiss-tiling-solver | AISS-TilingSolver 工具自动求解最优 Tiling 参数,覆盖安装、输入构造、运行求解、结果解读 | — |
1.2.2 PyPTO 算子开发
| Skill | 功能 |
| pypto-op-design | 算子方案设计生成 |
| pypto-op-develop | 算子代码实现与测试 |
| pypto-golden-generate | Golden 参考实现生成 |
| pypto-intent-understand | 需求意图理解与规格生成 |
| pypto-api-explore | API 可行性探索与分析 |
| pypto-precision-debug | 精度问题代码层排查 |
| pypto-precision-compare | 精度中间结果对比分析 |
| pypto-op-perf-tune | 算子性能分析与自动调优 |
1.2.3 TileLang 算子开发
| Skill | 功能 |
| tilelang-env-check | TileLang-Ascend 环境检查与配置验证 |
| tilelang-submodule-pull | 自动拉取 tilelang 仓库及其三方子模块代码 |
| tilelang-op-design | 算子设计文档生成 |
| tilelang-op-develop | 基于设计文档生成算子实现代码与测试 |
| tilelang-op-test-design | 算子测试设计与测试覆盖率分析 |
| tilelang-api-best-practices | TileLang Ascend API 使用最佳实践 |
| tilelang-programming-model-guide | Developer/Expert 模式选择与 pass_configs 配置指南 |
| tilelang-perf-optimization | 性能调优与性能劣化模式检查 |
| tilelang-review | 代码格式检查与自动修复 |
1.2.4 Triton 算子开发
| Skill | 功能 |
| triton-task-extractor | 从用户输入中提取算子,构建任务文件 |
| triton-op-designer | 设计高质量算法,指导代码生成 |
| triton-op-coding | 根据设计生成 Triton 内核代码 |
| triton-op-verifier | 验证算子精度和性能测试 |
| triton-latency-optimizer | 逐步优化 Triton 代码性能 |
1.2.5 NPU 模型推理优化
| Skill | 功能 |
| model-infer-migrator | 框架适配与部署基线建立 |
| model-infer-parallel-analysis | 并行策略分析(TP/EP/DP) |
| model-infer-parallel-impl | 并行切分实施 |
| model-infer-kvcache | KVCache 优化 + FA 替换 |
| model-infer-fusion | torch_npu 融合算子分析与替换 |
| model-infer-quantization | compressed-tensors 量化适配改造 |
| model-infer-graph-mode | torch.compile 图模式适配 |
| model-infer-precision-debug | NPU 推理精度诊断 |
| model-infer-runtime-debug | NPU 运行时错误诊断 |
| model-infer-multi-stream | 多流并行优化 |
| model-infer-prefetch | 权重预取适配 |
| model-infer-superkernel | SuperKernel 适配 |
二、jiuwenclaw安装
注:openclaw也可以,步骤差不多。但是jiuwenclaw的界面相对来说简洁很多。
2.1 docker
- 这里我已经全部打包好了,直接在终端中执行下面的命令即可。 未安装cann-toolkit的版本,可以安装AscendC算子文档查询等skills。
docker run --name jiuwenclaw -it -d --net=host \ -v /tmp:/tmp \ -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \ swr.cn-north-4.myhuaweicloud.com/toolsmanhehe/jiuwen:0.1.8-py311-ubuntu22.04
安装了cann-9.0.0-beta.2的版本,支持调用CANNBot Skills通过CPU和NPU进行自动算子开发和测试。注意,需要手动补充nnal和硬件对应的ops包才能在NPU上进行模型适配等工作。
docker run --name jiuwenclaw -it -d --net=host \ -v /tmp:/tmp \ -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \ swr.cn-north-4.myhuaweicloud.com/toolsmanhehe/jiuwen:0.1.8-cann9.0.0-py311-ubuntu22.04-x86
2.2 pip安装
如果不想用容器的话,按照下面的步骤执行也可以。
# 确认python:>=3.11,<3.14python3 --version # 安装 JiuwenClawpip install jiuwenclaw # 初始化 JiuwenClaw (首次启动)jiuwenclaw-init # 启动 JiuwenClawjiuwenclaw-start # 如需远程访问需要在两个终端中分别执行下面的命令jiuwenclaw-appjiuwenclaw-web --host 0.0.0.0 --port 5173
三、CANNBot Skills安装
CANNBot Skills仓库在26年4月经历了一次更新,commit 05fbb2fa之后的版本skills目录不在仓库的根目录下了,导致通过源安装会出现明明添加了源但是看不到skills的问题。此时,我们可以通过手动导入的方式安装。
其实最简单的办法是:在对话中把仓库链接告诉AI,例如:https://gitcode.com/cann/cannbot-skills.git这是一个skills仓库,帮我安装这个仓库下所有的AscendC相关的skills。
3.1 从源安装
- 在jiuwenclaw的web页面上找到技能页面,点击源管理。

- 源名称可以自己取,这里我用的是CANNBot-Skills,git仓库地址写https://gitcode.com/cann/cannbot-skills.git,然后点击添加并启用这个源。

- 关闭源管理界面后,就可以在技能页面看到刚刚添加的技能了。我们可以按需启用技能。
3.2 手动安装
- 进入容器后,将CANNBot-Skills仓库拉取到本地。
docker exec -it jiuwenclaw bashgit clone https://gitcode.com/cann/cannbot-skills.git -b 14fa0ad9
- 复制本地地址,将其填入jinwenclaw管理页面的导入本地技能的对话框中,保存即可。以下是笔者测试过的部分skills。
/root/cannbot-skills/ops/ascendc-api-best-practices/root/cannbot-skills/ops/ascendc-code-review/root/cannbot-skills/ops/ascendc-direct-invoke-template/root/cannbot-skills/ops/ascendc-docs-gen/root/cannbot-skills/ops/ascendc-docs-search/root/cannbot-skills/ops/ascendc-env-check/root/cannbot-skills/ops/ascendc-precision-debug/root/cannbot-skills/ops/ascendc-registry-invoke-to-direct-invoke/root/cannbot-skills/ops/ascendc-runtime-debug/root/cannbot-skills/ops/ascendc-st-design/root/cannbot-skills/ops/ascendc-task-focus/root/cannbot-skills/ops/ascendc-tiling-design/root/cannbot-skills/ops/ascendc-ut-develop/root/cannbot-skills/ops/ascendc-whitebox-design

- 这里不推荐直接复制skills到jiuwenclaw的skills目录下,这样卸载的话就只能手动进入skills目录删除文件了。
四、模型配置
- 这里我在本地Ascend310P上用mindie跑了一个模型。服务化配置如下:
"ipAddress" : "0.0.0.0","allowAllZeroIpListening" : true,"httpsEnabled" : false,"npuDeviceIds" : [[0,1]],"maxSeqLen" : 32768,"maxInputTokenLen" : 65535,"truncation" : true,"modelName" : "Qwen3-30B-A3B-w8a8","modelWeightPath" : "/models/Qwen3-30B-A3B-w8a8","worldSize" : 2,"trustRemoteCode" : true,"maxPrefillTokens" : 65536,"maxIterTimes" : 65536,
- 在jiuwenclaw的配置信息中进行模型配置。别忘了点保存。
五、对话测试
- 文档查询
这里我使用的测试问题是使用ascendc-api-best-practices这个技能,帮我查询一下datacopy的使用方法

- 编写add算子,这里我使用的提示词是帮我用ascendc实现一个add算子z=x+y,你需要先source /usr/local/Ascend/ascend-toolkit/set_env.sh然后就可以使用cpu进行仿真了,请自己新建工程,cpu仿真通过后告诉我。 以下是大模型的部分输出:



六、小艺连接
- 访问小艺开放平台,点击立即体验。

- 点击创建

- 选择openclaw模式,下面的名字和描述自己填写就好了。

- 第一次进来这里会提示还没有凭证,我们根据提示创建,key和安全密钥务必保存好,下面要用。创建后回来智能体编辑界面是这样的。

- 进行一些其他的配置,然后上架这个智能体。

- 回到jiuwenclaw的配置界面,在频道中配置小艺。


- 打开手机的小艺app界面,在对话页面就会出现刚刚创建的智能体。

- 我们进行对话测试,我使用的问题是搜索 asc-devkit 中 Exp API 的使用示例

七、总结
笔者走完整个流程大概花了1个小时,总体上比较顺利。
这里不想折腾环境的,建议直接用我提供的容器,笔者写本文的时候,jiuwenclaw刚出来不久,问题确实挺多的,但是截止26年6月修改的时候,基本是已经没有什么安装上的问题了。甚至有了单独的windows客户端了。
CANNBot-Skills的安装和使用倒是没遇到什么大问题,不过可能是没有针对openclaw这种模式优化,在使用的时候有概率不调用安装的skill,但是我们通过指定技能的方式能够实现正确的调用。当然,也有可能是因为笔者刚开始调教我的"油闷大虾"哈。
笔者按照cann skill的说明测试了下面几个场景,模型回答的还是比较准确的,基本没什么错误。在调用skill失败的时候,jiuwenclaw也会降级到websearch,就是多消耗亿点token罢了。
| Skill | 功能 |
| ascendc-api-best-practices | API 使用最佳实践、参数限制 |
| npu-arch | NPU 架构知识、芯片型号映射 |
| ascendc-docs-search | API 文档索引 + 在线搜索 |
| ascendc-env-check | NPU 设备查询、CANN 环境验证 |
| ascendc-runtime-debug | 运行时错误调试,错误码解析、Kernel 挂起排查 |
最后,还是建议大家在使用的时候,直接指定技能名称,这样可以有效降低token消耗。
更多推荐



所有评论(0)