鸿蒙 7.0 智能体框架 2.0:意图即服务根因——从 InsightIntentExecutor 到 HMAF 2.0 Skill 演进

本文是「鸿蒙 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 核心!

相关推荐
掘金者阿豪1 小时前
折腾电科金仓 Docker 部署的一晚上:角色登录失败、远程连接失败,这几个坑终于踩完了
后端
lichenyang4531 小时前
从图片创作到本地可复现的 AIGC 全栈闭环:AIGC Creative Studio 实践复盘
前端·后端
倒流时光三十年1 小时前
第三阶段 26 · highlight 高亮(返回命中片段)
后端·python·django
lpfasd1232 小时前
编程语言榜单变迁分析
开发语言·后端·scala
Shawn_Shawn2 小时前
google ADK VS Langchain-ai
后端·llm·agent
名字还没想好☜2 小时前
Go 用 bufio.Scanner 读大文件踩坑:默认 64KB 行上限、Buffer 扩容与按 Token 切分
开发语言·后端·golang·go
用户6083089290472 小时前
SpringBoot自定义注解校验
后端
董员外2 小时前
RAG 系统进化论(六):GraphRAG(基于知识图谱的 RAG),从相似文本走向实体关系
人工智能·后端·设计模式
Conan在掘金2 小时前
ArkTS 进阶之道(31):状态联动深水区收官边界——为啥四级状态容器 + V1/V2 双轨是状态联动深水区收官根因
后端