本文是「鸿蒙 7.0 新特性」系列第 3 篇。上篇讲 Component3D 空间计算(一行加载 glTF 3D 模型真机渲染)。本文讲智能体框架核心:意图即服务------根因在意图路由表。鸿蒙 7.0(API 26)发布 HMAF 2.0(鸿蒙智能体框架 2.0),本文用本机 API 21 就能跑的 InsightIntentExecutor(API 11)真机演示,再讲鸿蒙 7.0 智能体框架演进根因:InsightIntentExecutor(API 11)→ HMAF 2.0 Skill(API 26)。
一、开篇:意图即服务不是 if-else 路由,是意图路由表绑定
你写 React 时,意图分发是「if-else 魔法」(条件判断路由到不同 handler):
typescript
// React 意图分发:if-else 魔法(条件判断路由)
function dispatchIntent(intent: string, params: Record<string, any>): string {
if (intent === 'query_weather') { // ✅ if-else 路由
return queryWeather(params.location)
} else if (intent === 'play_music') {
return playMusic(params.song)
} else if (intent === 'set_alarm') {
return setAlarm(params.time)
}
return '未知意图'
}
// React 意图分发:if-else 魔法(硬编码路由,无框架托管)
你写鸿蒙 ArkTS 时,意图即服务是意图路由表绑定------InsightIntentExecutor 继承 + onExecute 路由:
typescript
// ArkTS 意图即服务:InsightIntentExecutor 意图路由表
import InsightIntentExecutor from '@ohos.app.ability.InsightIntentExecutor'
import insightIntent from '@ohos.app.ability.insightIntent'
import { window } from '@kit.ArkUI'
// ✅ 自定义意图执行器:继承 InsightIntentExecutor
class WeatherIntentExecutor extends InsightIntentExecutor {
// ✅ 培景模式执行(UIAbility 培台)
onExecuteInUIAbilityForegroundMode(name: string, param: Record<string, Object>, pageLoader: window.WindowStage): insightIntent.ExecuteResult | Promise<insightIntent.ExecuteResult> {
const result: Record<string, Object> = {}
result['message'] = this.routeIntent(name, param)
return { code: 0, result: result } as insightIntent.ExecuteResult
}
// ✅ 核心:意图路由表(意图名 → Skill 执行)
routeIntent(name: string, param: Record<string, Object>): string {
if (name === 'query_weather') {
const location = (param['location'] as string) || '北京'
return `Skill[query_weather] 执行:查询 ${location} 天气`
} else if (name === 'play_music') {
return `Skill[play_music] 执行:播放 ${param['song']}`
}
return `未知意图:${name}`
}
}
// ArkTS 意图即服务:InsightIntentExecutor 意图路由表(框架托管,培景/后台模式分发)
if-else 魔法 vs 意图路由表绑定的区别:React 把意图分发当 if-else 魔法(硬编码路由,无框架托管),ArkTS 把 InsightIntentExecutor 当「意图路由表绑定」(框架托管,培景/后台模式分发)。根因不是 if-else 魔法是意图路由表绑定------InsightIntentExecutor 意图路由表绑定,框架托管培景/后台模式分发。
二、根因:InsightIntentExecutor 的意图路由表机制
鸿蒙 ArkUI 的 InsightIntentExecutor 是意图路由表绑定------onExecute 回调 + 培景/后台模式分发,来自三重绑定机制。
机制 1:InsightIntentExecutor 继承------框架托管意图执行
InsightIntentExecutor 继承------框架托管意图执行,培景/后台模式自动分发:
typescript
// ✅ InsightIntentExecutor 继承:框架托管意图执行
class WeatherIntentExecutor extends InsightIntentExecutor {
// ✅ 培景模式执行(UIAbility 培台,有 UI)
onExecuteInUIAbilityForegroundMode(name: string, param: Record<string, Object>, pageLoader: window.WindowStage): insightIntent.ExecuteResult | Promise<insightIntent.ExecuteResult> {
const result: Record<string, Object> = {}
result['message'] = this.routeIntent(name, param)
return { code: 0, result: result } as insightIntent.ExecuteResult
}
// ✅ 后台模式执行(无 UI,后台静默)
onExecuteInUIAbilityBackgroundMode(name: string, param: Record<string, Object>): insightIntent.ExecuteResult | Promise<insightIntent.ExecuteResult> {
const result: Record<string, Object> = {}
result['message'] = this.routeIntent(name, param)
return { code: 0, result: result } as insightIntent.ExecuteResult
}
}
// InsightIntentExecutor 继承:框架托管意图执行,培景/后台模式自动分发
InsightIntentExecutor 继承 vs 硬编码调用的区别:InsightIntentExecutor 继承(框架托管意图执行,培景/后台模式自动分发),硬编码调用(手动调用 handler,无框架托管)。根因不是硬编码调用是 InsightIntentExecutor 继承------InsightIntentExecutor 继承框架托管意图执行,培景/后台模式自动分发。
机制 2:意图路由表------意图名 → Skill 执行
意图路由表------意图名 → Skill 执行,根据 name 分发到不同 Skill:
typescript
// ✅ 意图路由表:意图名 → Skill 执行
routeIntent(name: string, param: Record<string, Object>): string {
// ✅ 意图路由表:意图名 → Skill 执行
if (name === 'query_weather') {
const location = (param['location'] as string) || '北京'
return `Skill[query_weather] 执行:查询 ${location} 天气` // ✅ 路由到 query_weather Skill
} else if (name === 'play_music') {
const song = (param['song'] as string) || '默认歌'
return `Skill[play_music] 执行:播放 ${song}` // ✅ 路由到 play_music Skill
} else if (name === 'set_alarm') {
const time = (param['time'] as string) || '07:00'
return `Skill[set_alarm] 执行:设置 ${time} 闹钟` // ✅ 路由到 set_alarm Skill
}
return `未知意图:${name}`
}
// 意图路由表:意图名 → Skill 执行,根据 name 分发到不同 Skill
意图路由表 vs if-else 硬编码的区别:意图路由表(意图名 → Skill 执行,框架托管路由),if-else 硬编码(条件判断路由,无框架托管)。根因不是 if-else 硬编码是意图路由表------意图路由表意图名 → Skill 执行,框架托管路由。
机制 3:ExecuteResult 标准返回------code + result 双字段
ExecuteResult 标准返回------code(结果码)+ result(执行结果)双字段:
typescript
// ✅ ExecuteResult 标准返回:code + result 双字段
onExecuteInUIAbilityForegroundMode(name: string, param: Record<string, Object>, pageLoader: window.WindowStage): insightIntent.ExecuteResult | Promise<insightIntent.ExecuteResult> {
const result: Record<string, Object> = {}
result['message'] = this.routeIntent(name, param)
// ✅ ExecuteResult:code(结果码 0=成功)+ result(执行结果 Record)
return { code: 0, result: result } as insightIntent.ExecuteResult
}
// ExecuteResult 标准返回:code(结果码)+ result(执行结果 Record)双字段
ExecuteResult 标准返回 vs 自定义返回的区别:ExecuteResult 标准返回(code + result 双字段,框架规范),自定义返回(任意结构,无规范)。根因不是自定义返回是 ExecuteResult 标准返回------ExecuteResult 标准返回 code + result 双字段,框架规范。
三、真机配图:鸿蒙智能体框架 2.0------意图即服务

真机配图展示鸿蒙智能体框架 2.0 意图即服务:
- 初始态:意图执行器注册就绪,显示 InsightIntentExecutor 注册区 + Skill 意图路由区(query_weather/play_music/set_alarm 三个 Skill 路由表)+ 四个触发按钮
- 意图路由执行态 :点击「查天气(北京)」按钮,意图路由 query_weather → Skillquery_weather 执行,意图日志显示
name="query_weather", param={"location":"北京"},执行结果显示Skill[query_weather] 执行:查询 北京 天气 - 多意图切换态 :点击「查天气(上海)」按钮,意图路由切换到上海,执行结果显示
Skill[query_weather] 执行:查询 上海 天气,验证意图路由表多意图分发
四、真解法:鸿蒙智能体框架 2.0 的三个场景
场景 1:InsightIntentExecutor 意图路由(90% 场景首选,意图即服务)
InsightIntentExecutor 意图路由用继承 + onExecute + routeIntent:
typescript
// ✅ 场景 1:InsightIntentExecutor 意图路由(意图即服务)
class WeatherIntentExecutor extends InsightIntentExecutor {
onExecuteInUIAbilityForegroundMode(name: string, param: Record<string, Object>, pageLoader: window.WindowStage): insightIntent.ExecuteResult | Promise<insightIntent.ExecuteResult> {
const result: Record<string, Object> = {}
result['message'] = this.routeIntent(name, param)
return { code: 0, result: result } as insightIntent.ExecuteResult
}
routeIntent(name: string, param: Record<string, Object>): string {
if (name === 'query_weather') {
return `Skill[query_weather] 执行:查询 ${param['location']} 天气`
}
return `未知意图:${name}`
}
}
// InsightIntentExecutor 意图路由:继承 + onExecute + routeIntent,意图即服务
场景 2:培景/后台模式分发(UIAbility 培台 vs 后台静默)
培景/后台模式分发------onExecuteInUIAbilityForegroundMode(培台有 UI)vs onExecuteInUIAbilityBackgroundMode(后台静默):
typescript
// ✅ 场景 2:培景/后台模式分发(UIAbility 培台 vs 后台静默)
class WeatherIntentExecutor extends InsightIntentExecutor {
// ✅ 培景模式执行(UIAbility 培台,有 UI)
onExecuteInUIAbilityForegroundMode(name: string, param: Record<string, Object>, pageLoader: window.WindowStage): insightIntent.ExecuteResult | Promise<insightIntent.ExecuteResult> {
const result: Record<string, Object> = {}
result['message'] = this.routeIntent(name, param)
return { code: 0, result: result } as insightIntent.ExecuteResult
}
// ✅ 后台模式执行(无 UI,后台静默)
onExecuteInUIAbilityBackgroundMode(name: string, param: Record<string, Object>): insightIntent.ExecuteResult | Promise<insightIntent.ExecuteResult> {
const result: Record<string, Object> = {}
result['message'] = this.routeIntent(name, param)
return { code: 0, result: result } as insightIntent.ExecuteResult
}
}
// 培景/后台模式分发:培景有 UI vs 后台静默,框架自动分发
场景 3:鸿蒙 7.0 HMAF 2.0 Skill(API 26 describe + execute)
鸿蒙 7.0(API 26)升级 HMAF 2.0------@kit.AgentKit Skill describe + execute:
typescript
// ✅ 场景 3:鸿蒙 7.0 HMAF 2.0 Skill(API 26 describe + execute)
// ⚠ 鸿蒙 7.0(API 26)新特性,本机 API 21 降级为 InsightIntentExecutor
// ✅ 鸿蒙 7.0 HMAF 2.0 Skill(API 26)
// import { Skill, SkillContext, SkillResult, SkillParameter } from '@kit.AgentKit'
// export class WeatherQuerySkill extends Skill {
// describe(): SkillParameter { // ✅ describe 声明能力
// return {
// name: 'weather_query',
// description: '查询指定城市的实时天气信息',
// parameters: {
// location: { type: 'string', description: '城市名称', required: true }
// }
// }
// }
// async execute(context: SkillContext): Promise<SkillResult> { // ✅ execute 执行逻辑
// const location = context.params.location as string
// return SkillResult.success({ location, temperature: 25, condition: '晴' })
// }
// }
// 鸿蒙 7.0 HMAF 2.0:Skill describe(声明能力)+ execute(执行逻辑),意图即服务
// ✅ 降级方案:API 21 用 InsightIntentExecutor
// class WeatherIntentExecutor extends InsightIntentExecutor { ... }
鸿蒙 7.0 HMAF 2.0 Skill vs InsightIntentExecutor 的区别:鸿蒙 7.0 HMAF 2.0 Skill(API 26,@kit.AgentKit,describe 声明能力 + execute 执行逻辑),InsightIntentExecutor(API 11,继承 + onExecute 路由)。根因不是 InsightIntentExecutor 是鸿蒙 7.0 HMAF 2.0 Skill------鸿蒙 7.0 HMAF 2.0 Skill describe + execute,意图即服务。
五、一句话哲学
写鸿蒙 ArkUI 记住 :意图即服务不是 if-else 路由是意图路由表绑定------InsightIntentExecutor 继承框架托管意图执行。根因不是 if-else 魔法是意图路由表绑定------InsightIntentExecutor 继承(框架托管,培景/后台模式自动分发)+ 意图路由表(意图名 → Skill 执行,框架托管路由)+ ExecuteResult 标准返回(code + result 双字段,框架规范)+ 鸿蒙 7.0 HMAF 2.0 Skill(API 26,@kit.AgentKit,describe 声明能力 + execute 执行逻辑)。InsightIntentExecutor 意图路由用继承 + onExecute + routeIntent(首选,90% 场景),培景/后台模式分发用 onExecuteInUIAbilityForegroundMode vs onExecuteInUIAbilityBackgroundMode,鸿蒙 7.0 HMAF 2.0 Skill 升级(API 26,describe + execute,意图即服务)。意图路由表绑定框架托管培景/后台模式分发是鸿蒙 7.0 智能体框架 2.0 核心!