上一篇博客介绍了如何用TRAE IDE为RK3506构建AI编程环境。经过一段时间实践,我对AI编程有了新的认识——与其让AI在一个对话里包办所有事情,不如把工作拆解成编译、部署、运行三个独立Skill,各司其职、灵活组合。本文将分享这套新方法论及三个Skill的完整设计。

回顾:旧方法的痛点

上一篇博客中,我通过TRAE的Builder模式,用一段提示词让AI同时完成三件事:

  1. 生成C语言测试程序
  2. 创建VSCode编译任务(交叉编译)
  3. 创建SSH部署和运行任务

这种方法虽然“一步到位”,但实践中暴露了几个问题:

提示词臃肿。 所有需求挤在一段话里,AI容易遗漏细节——比如我忘了说用户名和密码,生成的task.json就有问题。

调试困难。 部署时chmod命令失败,需要把错误信息喂给AI让它重新分析修正。每一次修改都要重新生成整个任务配置。

复用性差。 换一个项目、换一块开发板,所有配置要重新让AI生成一遍。

新思路:Skill化分工

受AI Agent设计模式的启发,我把RK3506开发工作流拆解为三个职责单一的Skill:

Skill 职责 触发场景
rk3506-compile 交叉编译程序 用户要求编译代码
rk3506-deploy 部署可执行文件到开发板 用户要求部署/拷贝文件
rk3506-run 在开发板上运行程序 用户要求执行程序并查看输出

每个Skill只做一件事,但彼此可以自由组合——“编译+部署”、“部署+运行”、“编译+部署+运行”,按需拼接。

Skill 1:rk3506-compile

name: "rk3506-compile"
description: "Compiles programs for RK3506 using arm-buildroot-linux-gnueabihf toolchain"

核心逻辑:

  • 检查 CROSS_COMPILE 环境变量
  • 若为空,自动执行 ~/3506-toolchain/host/environment-setup 加载编译环境
  • 若不为空,给出警告提示编译器可能不一致
  • 使用 $CC 等环境变量指定的编译器进行编译

设计考量: 编译环境配置是最容易出错的一步。把环境检测和加载逻辑封装在Skill里,用户只需说“帮我编译这个程序”,无需手动source脚本。

Skill 2:rk3506-deploy

name: "rk3506-deploy"
description: "Deploys compiled programs to RK3506 development board via SSH"

默认参数:

参数 默认值
目标IP 192.168.1.232
用户名 root
密码
目标路径 /root/

核心逻辑:

  • 通过 scp 将可执行文件拷贝到开发板
  • 自动 chmod +x 添加可执行权限

设计考量: 部署是编译和运行之间的桥梁。把IP、路径等参数设置成可覆写的默认值,既开箱即用,又保留了灵活性。

Skill 3:rk3506-run

name: "rk3506-run"
description: "Runs deployed programs on RK3506 development board via SSH"

默认参数:

参数 默认值
目标IP 192.168.1.232
用户名 root
程序路径 /root/

核心逻辑:

  • 通过 ssh 连接到开发板执行程序
  • 返回程序输出结果
  • 支持传递命令行参数

设计考量: 运行是与开发板交互的最终环节。支持带参数执行,覆盖更多测试场景。

对比:新旧方法优劣

维度 旧方法(All-in-One提示词) 新方法(三个Skill)
提示词复杂度 高,所有需求挤在一起 低,每次只描述一个动作
调试效率 改一处要重新生成全部 只调试出问题的Skill
复用性 差,每项目重新生成 好,Skill可跨项目复用
灵活性 低,编译部署运行强绑定 高,可按需组合
学习成本 低,一次提示搞定 中等,需理解Skill机制
错误恢复 从头再来 局部修正

使用示例

场景一:完整流程(编译+部署+运行)

用户只需依次说:

“用rk3506-compile编译当前目录的main.c”

“用rk3506-deploy部署到开发板”

“用rk3506-run运行看看结果”

场景二:仅重新编译

代码修改后,只需:

“用rk3506-compile重新编译”

部署和运行沿用之前的结果,无需重复操作。

场景三:自定义部署目标

如需部署到不同IP:

“用rk3506-deploy把program部署到192.168.1.100的/opt/目录”

Skill会使用自定义参数覆盖默认值。

为什么这样设计更好?

符合Unix哲学。 每个Skill做好一件事,通过组合产生复杂行为。这比一个庞杂的“超级Skill”更可控、更可预测。

适配AI的思维方式。 AI在处理单一、明确的任务时表现最佳。把复杂工作流拆解后,每个环节AI都能精准执行,出错时也只需局部修正。

便于持续迭代。 哪天换了新的交叉编译工具链,只需更新compile Skill;换了新的开发板IP,只需调整deploy和run的默认参数。互不影响。

总结

从“一段提示词包办一切”到“三个Skill各司其职”,本质上是把AI当作可编程的工具链而非一次性问答引擎。这种方法不仅适用于RK3506开发,也适用于任何需要“编译→部署→运行”三步曲的嵌入式开发场景。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Skill化的核心思想是:让AI记住流程,让人只关心意图。希望这套方法能给你的嵌入式AI编程带来一些启发。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐