HarmonyOS APP《画伴梦工厂》开发第51篇-Skill开发入门——VibeCoding与系统级智能入口

第7.1篇:Skill 开发入门------Vibe Coding 与系统级智能入口

难度 :⭐⭐⭐ 高级

前置知识 :第 1.1 篇 ArkTS 语言入门

涉及源文件 :鸿蒙 HMAF 框架、小艺开放平台、module.json5skills/ 目录结构


概述

在之前的文章中,我们完整构建了"画伴梦工厂"的应用层能力------从画布涂鸦、图片识别到图生视频的 AI 编排链路。然而,这些强大的功能目前只在应用内部可用。用户必须打开应用、层层导航,才能使用这些能力。

有没有一种方式,让用户只需对小艺说一句话,就能直接调用应用中的某一项功能?比如:

  • "帮我把这张涂鸦变成动画"
  • "看看这幅画里有什么"
  • "帮我生成一张恐龙在森林里的图片"

这就是 鸿蒙 Skill(应用技能) 的核心价值------将应用能力外化为系统级智能体的可调用服务单元。本文将深入讲解 Skill 的概念、架构、开发流程,以及如何将"画伴梦工厂"的现有 AI 能力封装为 Skill,接入鸿蒙全场景智能生态。


一、什么是 Skill------系统级智能入口

1.1 从"人找 App"到"能力找人"

传统的 App 使用路径是这样的:

复制代码
解锁手机 → 找到图标 → 点击打开 → 在菜单中寻找功能 → 完成操作

用户在完成每一个操作前,都需要经历漫长的"导航"过程。而鸿蒙 Skill 的出现彻底改变了这一范式,将交互路径缩短为:

复制代码
唤醒小艺 → 说出需求 → 系统自动调用 Skill → 获取结果

Skill 是一份声明式的能力外化机制。开发者将应用内可被外部调用的业务能力组织为若干能力单元,每个单元包含:

  • 一份描述文件(SKILL.md:声明触发场景、入参约束与返回值契约
  • 一份 ArkTS 入口脚本:将外部调用桥接到应用内既有的业务逻辑
  • 模块配置绑定:将 Skill 绑定到指定 Ability

运行时,系统智能体(小艺)依据描述文件完成"意图---能力"的语义匹配,将用户语音/文本指令路由到匹配的 Skill,执行后返回结果。

1.2 Skill 与智能体、应用的关系

复制代码
┌─────────────────────────────────────────────────────────────┐
│                     鸿蒙系统智能体生态                          │
│                                                             │
│  ┌──────────┐    ┌──────────┐    ┌──────────────────┐      │
│  │  小艺 AI  │───→│ 意图理解  │───→│  服务分发引擎      │      │
│  │ (系统入口) │    │ (NLU)    │    │  (Skill 匹配)     │      │
│  └──────────┘    └──────────┘    └────────┬─────────┘      │
│                                           │                 │
│         ┌─────────────────────────────────┼─────────┐      │
│         │          鸿蒙应用生态             │         │      │
│         │  ┌──────────┐  ┌──────────┐    ▼         │      │
│         │  │ Skill A  │  │ Skill B  │  Skill C     │      │
│         │  │ 图生动画   │  │ 图片识别   │  文生图     │      │
│         │  └──────────┘  └──────────┘  └──────────┘ │      │
│         │         │             │            │              │
│         │         └────────┬────┴────────────┘              │
│         │                  ▼                                │
│         │         ┌──────────────────┐                      │
│         │         │  "画伴梦工厂" 应用  │                      │
│         │         │   (业务逻辑实现)   │                      │
│         │         └──────────────────┘                      │
│         └──────────────────────────────────────────────────┘
└─────────────────────────────────────────────────────────────┘

1.3 Skill 与传统开发模式对比

维度 传统 App 开发 Skill 开发
入口方式 用户手动打开 App 小艺语音/文本触发
交互模式 页面导航式交互 意图驱动的对话式交互
分发渠道 应用市场下载安装 小艺意图匹配自动分发
设备覆盖 需逐个设备适配 一次开发,全场景部署
开发模式 手写代码 Vibe Coding 对话式开发
跨应用协作 需自行实现 IPC A2A 协议自动协同

二、Vibe Coding------自然语言驱动的 Skill 开发

2.1 什么是 Vibe Coding

Vibe Coding(氛围编程)是 HDC2026 上华为推出的创新开发模式。开发者可以用自然语言对话的方式描述需求,小艺开放平台自动生成 Skill 的核心代码框架,开发者审核反馈、AI 持续优化,开发完成后一键发布到小艺入口。

2.2 Vibe Coding 开发流程

在小艺开放平台上,通过 Vibe Coding 创建 Skill 的流程如下:

复制代码
步骤 1:登录小艺开放平台 → 进入 Skill → 新建 Skill → Vibe Coding
步骤 2:填写 Skill 名称、描述、触发意图等基础信息
步骤 3:选择拓展能力(@ 按钮添加)
步骤 4:点击生成,AI 解析需求
步骤 5:需求澄清与规划(AI 自动提出问题)
步骤 6:选择是否使用生成式 UI
步骤 7:AI 自动生成 Skill 代码(SKILL.md + 入口脚本)
步骤 8:测试与评测(平台自动校验合规性)
步骤 9:填写 Skill 描述(供 Agent 语义匹配)
步骤 10:自动打包 → 真机测试 → 上架

2.3 Vibe Coding 的核心价值

  • 降低门槛:非技术背景的产品经理、设计师也能开发 Skill
  • 持续协作:开发者可通过对话提出修改意见,AI 实时响应优化
  • 生成式 UI:根据用户指令复杂度动态调整交互形式,简单查询展示轻量卡片,复杂需求自动扩展为详细视图
  • 一键上架:开发完成后直接打包发布,省去繁琐的配置环节

2.4 传统 Skill 开发 vs Vibe Coding

开发方式 技能要求 开发周期 迭代方式 适用场景
传统手动开发 掌握 ArkTS、HMAF 框架 数天 手动修改代码 复杂业务逻辑
Vibe Coding 自然语言描述能力 数分钟 对话式迭代 标准能力外化、快速原型

三、Skill 开发全流程

3.1 环境准备

要将应用能力封装为 Skill,需要满足以下条件:

  1. 开发环境:DevEco Studio 5.0+,鸿蒙 SDK API 26.0.0 及以上
  2. 测试设备:ROM 版本 6.0.0 及以上,小艺 APP 版本 11.3.8.300 及以上
  3. 华为账号:完成开发者实名认证
  4. 应用已上架:Skill 需要关联已在 AppGallery Connect 中的应用

3.2 Skill 包结构

一个标准的 Skill 包目录结构如下:

复制代码
entry/
├── skills/
│   └── {SkillName}/
│       ├── scripts/
│       │   └── {SkillScript}.ets     ← 入口脚本
│       └── SKILL.md                   ← 契约描述文件
├── src/main/ets/
│   ├── entryability/
│   │   └── EntryAbility.ets
│   └── service/
│       └── {BusinessService}.ets      ← 业务服务实现
└── src/main/
    └── module.json5                   ← 模块配置

关键约定

  • skills/ 是当前模块所有 Skill 的根目录,路径固定不可更改
  • 每个 Skill 以独立子目录组织
  • 方法名必须和 SKILL.md 中的 functionName 完全一致
  • 入口脚本的第一个参数固定为 scriptManager.ArkTSScriptInfo
  • 执行结果必须通过 completeArkTSScriptInApp 回传

3.3 SKILL.md 契约描述文件

SKILL.md 是 Skill 的核心描述文件,包含元数据、触发场景、入参契约和返回值契约四部分。

元数据(YAML Front Matter):

yaml 复制代码
---
skill_name: "画作识别"
skill_version: "1.0.0"
description: "识别儿童画作中的主角、场景、情绪等元素,返回结构化识别结果"
functionName: "recognizeDrawing"
---

触发场景(trigger_scenarios):

markdown 复制代码
## trigger_scenarios

- "看看这幅画里有什么"
- "帮我识别这张涂鸦"
- "这幅画画的是什么"
- "分析一下这张图片的内容"
- "这张画的主角是谁"

执行参数契约:

markdown 复制代码
## parameters

| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| imageUri | String | 是 | 图片的本地 URI,支持 content:// 和 file:// 协议 |
| language | String | 否 | 返回结果的语言,默认 "zh-CN" |

返回值契约:

markdown 复制代码
## returns

| 字段 | 类型 | 说明 |
|------|------|------|
| success | Boolean | 识别是否成功 |
| protagonist | String | 画作中的主角描述 |
| scene | String | 场景描述 |
| emotion | String | 情绪描述 |
| animationSuggestion | String | 动画建议 |
| confidence | Object | 各维度的置信度百分比 |

3.4 入口脚本实现

typescript 复制代码
// skills/recognize-drawing/scripts/RecognizeDrawingSkill.ets

import { completeArkTSScriptInApp } from '@kit.AgentKit';
import { ImageRecognitionService } from '../../src/main/ets/service/ImageRecognitionService';

interface RecognizeParams {
  imageUri: string;
  language?: string;
}

interface RecognizeResult {
  success: boolean;
  protagonist?: string;
  scene?: string;
  emotion?: string;
  animationSuggestion?: string;
  confidence?: Record<string, number>;
  error?: string;
}

export function recognizeDrawing(
  scriptInfo: ArkTSScriptInfo,
  params: RecognizeParams
): void {
  recognizeDrawingAsync(scriptInfo, params).catch((error: Error) => {
    completeArkTSScriptInApp(scriptInfo, {
      result: {
        success: false,
        error: error.message
      }
    });
  });
}

async function recognizeDrawingAsync(
  scriptInfo: ArkTSScriptInfo,
  params: RecognizeParams
): Promise<void> {
  // 调用应用内已有的识别服务
  const result = await ImageRecognitionService.recognizeDrawing(
    params.imageUri
  );

  completeArkTSScriptInApp(scriptInfo, {
    result: {
      success: true,
      protagonist: result.protagonist,
      scene: result.scene,
      emotion: result.emotion,
      animationSuggestion: result.animationSuggestion,
      confidence: result.confidence
    }
  });
}

3.5 module.json5 配置

json5 复制代码
{
  "module": {
    "name": "entry",
    "type": "entry",
    "srcEntry": "./ets/entryability/EntryAbility.ets",
    "skills": [
      {
        "name": "recognize-drawing",
        "srcPath": "./skills/recognize-drawing"
      }
    ],
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ]
  }
}

3.6 开发、调测、审核、上架全流程

复制代码
┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
│  开发阶段   │───→│  调测阶段   │───→│  审核阶段   │───→│  上架阶段   │
└──────────┘    └──────────┘    └──────────┘    └──────────┘
      │               │               │               │
      ├─ 编写 SKILL.md │               │               │
      ├─ 实现入口脚本   ├─ 真机调试      │               │
      ├─ module.json5  ├─ hilog 检查点  ├─ 合规校验     ├─ 上架到小艺
      └─ 本地化测试     └─ 端到端验证    └─ 语义测试     └─ 全网发布

开发阶段:编写 SKILL.md 描述文件、实现入口脚本、配置 module.json5

调测阶段:使用真机进行端到端验证,通过 hilog 确认参数传递和执行结果正确

审核阶段:平台自动校验 SKILL.md 合规性,测试执行工具调用结果

上架阶段:Skill 自动打包,一键发布到小艺入口,等待全网分发


四、Skill 架构深度解析

4.1 意图匹配机制

当用户说"帮我看看这幅画里有什么"时,系统内部的匹配流程如下:

复制代码
用户语音/文本输入
       │
       ▼
┌──────────────────┐
│  小艺 NLU 引擎    │  自然语言理解,提取意图和实体
│  (Intent Resolve) │
└────────┬─────────┘
         │ { intent: "recognize_drawing", entities: { image: "..." } }
         ▼
┌──────────────────┐
│  Skill 匹配引擎    │  扫描所有已注册 Skill 的 trigger_scenarios
│  (Service Match)  │  计算语义相似度,选择最佳匹配
└────────┬─────────┘
         │ matched_skill: "recognize-drawing"
         ▼
┌──────────────────┐
│  执行 Skill 入口   │  调用 recognizeDrawing(scriptInfo, params)
│  (Script Execute) │  等待 completeArkTSScriptInApp 回传结果
└────────┬─────────┘
         │ { success: true, protagonist: "恐龙", scene: "森林", ... }
         ▼
┌──────────────────┐
│  结果呈现           │  小艺用自然语言回复用户
│  (Response Gen)   │  "这幅画的主角是一只小恐龙,场景是森林..."
└──────────────────┘

4.2 执行流程详解

typescript 复制代码
// 入口脚本的执行生命周期

// 1. 小艺解析用户意图,匹配到 Skill
// 2. 系统创建 ArkTSScriptInfo 上下文对象
// 3. 调用入口函数,传入参数
// 4. 入口函数内部调用应用业务服务
// 5. 业务服务执行完毕,调用 completeArkTSScriptInApp 回传结果
// 6. 系统将结果格式化为自然语言回复给用户

export function recognizeDrawing(
  scriptInfo: ArkTSScriptInfo,  // ★ 系统注入的上下文
  params: RecognizeParams       // ★ 从用户意图中提取的参数
): void {
  // ★ 异步执行,结果通过回调返回
  doWork(scriptInfo, params);
}

async function doWork(
  scriptInfo: ArkTSScriptInfo,
  params: RecognizeParams
): Promise<void> {
  try {
    const result = await ImageRecognitionService.recognizeDrawing(params.imageUri);
    completeArkTSScriptInApp(scriptInfo, { result }); // ★ 结果回传
  } catch (error) {
    completeArkTSScriptInApp(scriptInfo, {
      error: { message: error.message }
    });
  }
}

4.3 Skill 生命周期

一个 Skill 从创建到下线,经历以下完整生命周期:

复制代码
创建 → 开发 → 调试 → 发布(上线) → 运行(被调用) → 更新 → 下架
阶段 状态 说明
草稿 Draft 刚刚创建,尚未提交审核
审核中 Reviewing 提交审核,等待平台校验
已上线 Published 审核通过,已发布到小艺入口
已下架 Unpublished 主动下架或因违规被下架
已更新 Updated 新版本审核通过,替换旧版本

五、HMAF 2.0 与鸿蒙智能体框架

5.1 HMAF 2.0 三层架构

HarmonyOS 智能体框架(HMAF)2.0 是鸿蒙系统级智能体能力的核心支撑,其架构分为三层:

复制代码
┌────────────────────────────────────────────────────────────┐
│                    应用层 (App Layer)                        │
│   Agent Framework Kit / FunctionComponent / AgentController │
│   开发者通过 Kit 接入智能体,嵌入 Skill 调用能力              │
├────────────────────────────────────────────────────────────┤
│                   框架层 (HMAF Framework)                    │
│  ┌──────────┐  ┌──────────┐  ┌────────────────────┐       │
│  │ 意图识别   │  │ 工具调度   │  │ 多智能体协同引擎     │       │
│  │ Intent    │  │ Tool     │  │ Multi-Agent        │       │
│  │ Resolve   │  │ Dispatch │  │ Orchestration      │       │
│  └──────────┘  └──────────┘  └────────────────────┘       │
│  ┌──────────┐  ┌──────────┐  ┌────────────────────┐       │
│  │ 对话管理   │  │ 知识检索   │  │ 分布式软总线         │       │
│  │ Context   │  │ RAG      │  │ Distributed Bus     │       │
│  │ Manager   │  │ Engine   │  │                     │       │
│  └──────────┘  └──────────┘  └────────────────────┘       │
├────────────────────────────────────────────────────────────┤
│                    能力层 (Capability Layer)                 │
│  ┌────────┐  ┌────────┐  ┌────────┐  ┌────────────┐       │
│  │端侧 LLM │  │ 语音识别 │  │ 视觉理解 │  │ Intents Kit│       │
│  │On-device│  │ASR/TTS │  │CV/OCR  │  │ 意图框架    │       │
│  └────────┘  └────────┘  └────────┘  └────────────┘       │
└────────────────────────────────────────────────────────────┘

5.2 Skill 在 HMAF 中的定位

Skill 在 HMAF 体系中处于能力外化层,是应用向系统智能体暴露能力的标准化接口。HMAF 通过以下组件与 Skill 交互:

HMAF 组件 与 Skill 的关系
意图识别引擎 将用户自然语言映射到 Skill 的 trigger_scenarios
工具调度器 根据意图匹配结果,调度对应的 Skill 入口函数
多智能体协同引擎 当一个任务需要多个 Skill 协作时,负责编排调用顺序
对话管理器 维护多轮对话上下文,在连续对话中保持 Skill 状态
分布式软总线 跨设备传输 Skill 调用请求和结果

5.3 A2A 协议与多 Skill 协同

HMAF 2.0 通过 A2A(Agent-to-Agent)协议 实现多 Skill 之间的协同工作。例如,用户说"帮我把这张恐龙涂鸦变成动画,然后发到朋友圈",系统可能会串联多个 Skill:

复制代码
用户意图: "帮我把这张恐龙涂鸦变成动画,然后发到朋友圈"
                    │
                    ▼
           ┌──────────────────┐
           │  主 Agent: 任务拆解  │
           └────────┬─────────┘
                    │
        ┌───────────┼───────────┐
        │           │           │
        ▼           ▼           ▼
┌────────────┐ ┌──────────┐ ┌──────────┐
│ Skill:      │ │ Skill:    │ │ Skill:    │
│ 画作识别     │→│ 图生动画   │→│ 社交分享   │
│ (识别内容)   │ │ (生成视频) │ │ (发朋友圈) │
└────────────┘ └──────────┘ └──────────┘

六、多设备分发

6.1 一次开发,全场景部署

Skill 的跨设备能力源自鸿蒙系统的分布式架构。开发者只需开发一次,即可在以下设备上运行:

设备类型 分发方式 交互形态
手机 小艺语音唤醒 语音+文本对话
平板 小艺语音+手写 全屏半屏卡片
车机 方向盘语音键 纯语音交互
智慧屏 远场语音 语音+大屏展示
手表 语音唤醒 轻量卡片展示
2in1 笔记本 小艺+键鼠 桌面级交互

6.2 生成式 UI 自适应

HDC2026 引入的 A2UI 协议 让 Skill 在不同设备上自动适配 UI 形态:

  • 简单结果(如查询天气):显示轻量卡片
  • 中等复杂度(如图片识别结果):显示结构化信息卡片
  • 复杂交互(如多步骤操作):自动扩展为详细视图

开发者无需手动适配每种设备,A2UI 协议通过标准化描述语言,系统自动根据当前设备生成合适的 UI。

6.3 华为账号跨设备同步

Skill 通过华为账号实现跨设备状态同步:

  • 用户一次授权,所有设备可用
  • 对话历史跨设备同步
  • 个人偏好设置自动流转

七、"画伴梦工厂"现有 AI 能力的 Skill 封装

7.1 可封装的现有能力

"画伴梦工厂"项目目前拥有以下 AI 能力,均可封装为独立的 Skill:

现有功能 对应服务 可封装的 Skill
画作识别 ImageRecognitionService.recognizeDrawing() 画作识别 Skill
文生图 AIGenerationService.generateImage() 文生图 Skill
图生视频 AIGenerationService.generateVideo() 图生视频 Skill
语音识别 VoiceRecognitionService 语音转文字 Skill

7.2 图生视频 Skill 示例

yaml 复制代码
# skills/animate-drawing/SKILL.md
---
skill_name: "图生动画"
skill_version: "1.0.0"
description: "将儿童画作转换为动画视频,支持自定义动作风格"
functionName: "animateDrawing"
---

## trigger_scenarios

- "帮我把这幅画变成动画"
- "让我的涂鸦动起来"
- "把这个涂鸦变成视频"
- "给我生成的画做个动画"
- "让这张图动起来"

## parameters

| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| imageUri | String | 是 | 画作的图片 URI |
| prompt | String | 否 | 动作风格描述,如"跳跃"、"奔跑" |
| style | String | 否 | 动画风格,可选值: "cute", "natural", "cartoon" |

## returns

| 字段 | 类型 | 说明 |
|------|------|------|
| success | Boolean | 是否生成成功 |
| videoUri | String | 生成的视频 URI |
| duration | Number | 视频时长(秒) |
| prompt | String | 实际使用的 Prompt |

入口脚本实现:

typescript 复制代码
// skills/animate-drawing/scripts/AnimateDrawingSkill.ets

import { completeArkTSScriptInApp } from '@kit.AgentKit';
import { AIGenerationService } from '../../src/main/ets/service/AIGenerationService';
import { WorkRepository } from '../../src/main/ets/service/WorkRepository';

interface AnimateParams {
  imageUri: string;
  prompt?: string;
  style?: 'cute' | 'natural' | 'cartoon';
}

export function animateDrawing(
  scriptInfo: ArkTSScriptInfo,
  params: AnimateParams
): void {
  animateDrawingAsync(scriptInfo, params).catch((error: Error) => {
    completeArkTSScriptInApp(scriptInfo, {
      result: { success: false, error: error.message }
    });
  });
}

async function animateDrawingAsync(
  scriptInfo: ArkTSScriptInfo,
  params: AnimateParams
): Promise<void> {
  const finalPrompt = params.prompt ?? '让画作中的角色动起来';

  const generatedVideo = await AIGenerationService.generateVideo(
    params.imageUri,
    finalPrompt,
    (message: string) => {
      // 可选的进度回调,用于实时反馈
    }
  );

  // 自动保存到作品集
  const work = WorkRepository.createWork(
    'ai-chat',
    generatedVideo.prompt,
    params.imageUri,
    generatedVideo.videoUri
  );
  WorkRepository.save(work);

  completeArkTSScriptInApp(scriptInfo, {
    result: {
      success: true,
      videoUri: generatedVideo.videoUri,
      duration: generatedVideo.duration ?? 3,
      prompt: generatedVideo.prompt
    }
  });
}

7.3 Skill 封装的优势

将现有 AI 能力封装为 Skill 后,"画伴梦工厂"能够获得以下好处:

  • 新流量入口:用户无需打开 App,直接通过小艺对话即可使用核心功能
  • 降低使用门槛:儿童或老人不需要理解复杂的 UI 导航,一句话就能完成操作
  • 跨应用协同:其他 App 的 Skill 也可以调用"画伴梦工厂"的能力(在用户授权下)
  • 全场景覆盖:手机、平板、车机、智慧屏上都能使用

八、触发场景详解

8.1 语音触发

用户通过唤醒小艺后,使用自然语言描述需求。小艺的 NLU 引擎解析意图,匹配到对应的 Skill。这是最主要的触发方式,覆盖手机、车机、智慧屏等场景。

8.2 文本触发

在小艺对话框内,用户通过文字输入触发 Skill。适合不便使用语音的场景(如安静环境、公共场合)。

8.3 上下文感知触发

系统根据用户当前的行为和上下文,主动推荐或触发 Skill:

触发类型 触发条件 示例
习惯推荐 用户行为模式学习 每天下午自动推荐"文生图"Skill
事件推荐 时间+事件特征 周末推荐"图生视频"Skill
位置推荐 地理位置围栏 在画展场景推荐"画作识别"Skill
小艺建议 系统智能预测 检测到相册有新的涂鸦照片时推荐

8.4 跨应用触发

通过 A2A 协议,一个 Skill 的执行结果可以作为另一个 Skill 的输入参数,实现跨应用的自动协作。


九、最佳实践

9.1 SKILL.md 编写规范

  • trigger_scenarios 覆盖面要广:为同一个功能编写 5~10 种不同的自然语言表达方式,覆盖用户可能的各种说法
  • description 要详细准确:给模型看的自然语言说明要具体,避免太笼统导致模型误匹配
  • 参数 Schema 要完整:明确 required 字段和 optional 字段,减少模型传入空对象的概率
  • 返回值结构要稳定:一旦上线勿随意修改字段名和类型,避免调用方解析失败

9.2 入口脚本开发规范

typescript 复制代码
// ★ 规范一:统一使用 try-catch 包裹异步逻辑
async function handler(scriptInfo: ArkTSScriptInfo, params: Params) {
  try {
    // 业务逻辑
    completeArkTSScriptInApp(scriptInfo, { result });
  } catch (error) {
    // ★ 必须回传错误,否则系统会一直等待
    completeArkTSScriptInApp(scriptInfo, {
      error: { message: error.message, code: error.code }
    });
  }
}

// ★ 规范二:参数校验前置
function validateParams(params: Params): boolean {
  if (!params.imageUri) {
    throw new Error('imageUri 是必填参数');
  }
  return true;
}

// ★ 规范三:超时控制
async function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {
  const timeout = new Promise<T>((_, reject) => {
    setTimeout(() => reject(new Error('Skill 执行超时')), ms);
  });
  return Promise.race([promise, timeout]);
}

9.3 调测建议

  • 使用真机调试:模拟器无法完全模拟小艺的意图匹配过程
  • 检查 hilog 日志:确认入口函数是否被正确调用,参数是否完整传递
  • 测试多种触发语句:验证 trigger_scenarios 中所有的触发方式
  • 异常场景覆盖:测试参数缺失、网络超时、服务不可用等异常情况
  • 性能基线:确保 Skill 响应时间在合理范围内(建议 < 5s)

9.4 安全与隐私

  • 最小权限原则:只申请 Skill 运行所必需的权限
  • 用户授权:涉及敏感数据(相册、位置等)必须经过用户授权
  • 数据最小化:只传输 Skill 执行所需的数据,不要过度采集
  • 安全通信:使用 HTTPS 加密通信,避免敏感数据泄露

9.5 Skill 上架检查清单

检查项 说明
SKILL.md 格式正确 YAML Front Matter + Markdown 结构
trigger_scenarios 不少于 5 条 覆盖用户常用表达
参数 Schema 完整 类型、描述、必填都正确
入口脚本有异常处理 所有分支都调用 completeArkTSScriptInApp
应用已在 AppGallery Connect 上架 Skill 必须关联已发布的应用
真机调试通过 至少 3 种触发语句测试通过
权限声明最小化 无多余权限申请

十、总结与对比

10.1 Skill 开发 vs 传统 App 开发

对比维度 传统 App 开发 Skill 开发
核心思路 构建完整的独立应用 将功能片段外化为服务
开发方式 手动编写全部代码 Vibe Coding 对话式开发
交互方式 页面+手势导航 语音/文本对话
用户获取方式 应用市场搜索下载 小艺意图匹配自动分发
设备适配 逐设备适配 UI A2UI 协议自动适配
跨应用协同 需要自行实现 A2A 协议自动编排
分发效率 用户需主动搜索 系统智能分发到精准用户
开发周期 数周到数月 数小时到数天

10.2 核心要点回顾

本文围绕鸿蒙 Skill 开发的核心主题,完整覆盖了以下内容:

知识点 核心要点
Skill 概念 应用能力外化为系统智能体可调用的服务单元
Vibe Coding 自然语言对话驱动的 Skill 开发模式
Skill 架构 SKILL.md + 入口脚本 + module.json5 三层结构
HMAF 2.0 鸿蒙智能体框架,意图识别 → 服务匹配 → 执行回传
多设备分发 一次开发,覆盖手机/平板/车机/智慧屏/手表
项目集成 画伴梦工厂的识别、生成能力可封装为 Skill

10.3 下一步

Skill 开发是鸿蒙智能体生态的入口。掌握 Skill 开发后,你还可以继续探索:

  • 元服务开发:无需安装即可使用的轻量服务
  • Agent Framework Kit:在应用内嵌入智能体 UI
  • Intents Kit:将应用意图共享到小艺建议、小艺搜索
  • A2A 协议:实现多智能体协作的复杂工作流

下一节我们将进入第 7.2 篇,深入了解 Agent Framework Kit 的实战应用,学习如何在"画伴梦工厂"中嵌入系统级智能助手,实现真正的"应用+智能体"融合体验。


参考文档

本文内容参考自以下官方文档:

  • 小艺开放平台 --- Skill 开发指南:https://developer.huawei.com/consumer/cn/doc/service/develop-skill-0000002623371043
  • 创建 Skill(Vibe Coding):https://developer.huawei.com/consumer/cn/doc/service/vibe-skill-0000002623211165
  • HMAF 鸿蒙智能体框架:HarmonyOS SDK API 26.0.0+ 文档
  • 智能体场景开发案例:https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-agent
相关推荐
哦***71 小时前
最后一块拼图补齐!华为大豆包时代开启✨
华为·音频·harmonyos
最爱老式锅包肉2 小时前
《HarmonyOS技术精讲-ArkGraphics 2D(方舟2D图形服务)》第七篇:动效来袭——与ArkUI结合实现2D动画与交互
华为·交互·harmonyos
HarmonyOS_SDK2 小时前
Account Kit新能力:AI赋能Skill接入“华为账号一键登录”,实现6倍效率飞跃
harmonyos
在书中成长2 小时前
HarmonyOS 小游戏《对战五子棋》开发第14篇 - 困难AI实现:Minimax算法原理详解
人工智能·算法·harmonyos
国服第二切图仔2 小时前
HarmonyOS APP《画伴梦工厂》开发第54篇-鸿蒙AI开放能力——语音与自然语言处理
人工智能·自然语言处理·harmonyos
在书中成长3 小时前
HarmonyOS 小游戏《对战五子棋》开发第12篇 - 简单AI实现:规则引擎与优先级策略
人工智能·华为·harmonyos
大雷神4 小时前
HarmonyOS 6.1 新能力实战:用“双镜记忆相机”把照片、地点与人重新连起来
数码相机·华为·harmonyos
心中有国也有家4 小时前
Flutter 鸿蒙编译与构建流程深度解析
学习·flutter·华为·harmonyos
水龙吟啸4 小时前
华为2026.6.24机考选择题+编程题【速刷敲黑板】
人工智能·深度学习·算法·机器学习·华为