前言

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

  1. 这里我已经全部打包好了,直接在终端中执行下面的命令即可。 未安装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
  1. 然后使用浏览器访问http://localhost:5173,局域网使用http://{ip}:5173。

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 从源安装

  1. 在jiuwenclaw的web页面上找到技能页面,点击源管理。

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

  1. 关闭源管理界面后,就可以在技能页面看到刚刚添加的技能了。我们可以按需启用技能。

3.2 手动安装

  1. 进入容器后,将CANNBot-Skills仓库拉取到本地。
docker exec -it jiuwenclaw bashgit clone https://gitcode.com/cann/cannbot-skills.git -b 14fa0ad9
  1. 复制本地地址,将其填入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

  1. 这里不推荐直接复制skills到jiuwenclaw的skills目录下,这样卸载的话就只能手动进入skills目录删除文件了。

四、模型配置

  1. 这里我在本地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,
  1. 在jiuwenclaw的配置信息中进行模型配置。别忘了点保存。

五、对话测试

  1. 文档查询

这里我使用的测试问题是使用ascendc-api-best-practices这个技能,帮我查询一下datacopy的使用方法

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

六、小艺连接

  1. 访问小艺开放平台,点击立即体验。

  1. 点击创建

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

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

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

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

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

  1. 我们进行对话测试,我使用的问题是搜索 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消耗。

Logo

CANN开发者社区旨在汇聚广大开发者,围绕CANN架构重构、算子开发、部署应用优化等核心方向,展开深度交流与思想碰撞,携手共同促进CANN开放生态突破!

更多推荐