HarmonyOS 6 AI能力实战2:通过 Agent Framework Kit 快速接入智能体服务

背景

最近在使用HarmonyOS 6手机时发现在天气和今日头条应用,在特定页面可以唤醒小艺入口,点击可以打开小艺,下面是特意截的图:
天气应用:
在这里插入图片描述

在这里插入图片描述

今日头条应用:
在这里插入图片描述

唤起小艺:
在这里插入图片描述

自动解读整理新闻:
在这里插入图片描述

感觉挺有趣挺有用的,小艺开放了AI能力给应用进行便捷接入,专门了解了一下,原来是 HarmonyOS 提供的Agent Framework Kit(智能体框架服务)框架能力,它的核心能力在于支持应用拉起特定的智能体。智能体(Agent)可以成为HarmonyOS 生态中连接用户意图与应用服务的桥梁。当应用在小艺开放平台上线智能体后,可以向用户提供“应用+智能体”组合的服务模式。通过集成 Agent Framework Kit 提供的 UI 控件,应用可以在恰当的业务场景下主动引导用户拉起智能体,从而提供更加智能、高效的交互体验。想到我开发的“智能带办”应用也可以尝试接入智能体,所以深入了解了一波。

Agent Framework Kit 介绍

Agent Framework Kit 主要包含 Function 组件。通过标准化组件,它能够满足应用在不同场景、不同界面下的智能体入口诉求,确保视觉风格与系统体验的一致性。

约束与限制

在开发集成前,需要注意以下约束:

  • 支持设备:当前仅支持 Phone(手机)和 Tablet(平板)设备。
  • 支持地区:仅适用于中国境内(不含港澳台)。
  • 模拟器支持:本 Kit 暂不支持在模拟器上运行,必须使用真机调试。
组件交互说明

Function 组件分为图标组件按钮组件

  • 图标组件:当未设置标题(title)时,默认显示为图标形式。适合作为应用内的综合型入口,作为智能体的主入口使用。
  • 按钮组件:当设置了标题(title)时,显示为按钮形式。允许应用根据业务需要自定义功能描述,更具引导性。
开发前准备
  1. 创建智能体:在小艺开发平台完成智能体的创建。
  2. 关联应用:确保智能体已与当前开发的应用进行关联。
  3. 环境检查:终端设备需登录华为账号并处于联网状态。
智能体创建

首先在小艺开放平台https://developer.huawei.com/consumer/cn/console/overview,进入智能体平台,点击右上角创建智能体,选择非OpenClaw 编排方式:
在这里插入图片描述

输入智能体名称、一句话描述、智能体分类后点击创建:
在这里插入图片描述

接下来选择模型,输入开场对话、开场引导、角色命令后点击上架,进入商家审核状态,审核成功后在配置中获取智能体ID,后面代码中要用:
在这里插入图片描述

这里面要注意智能体名称、描述等,不要有错别字,错误语法,返回内容要注意可读性,不要返回json等非直接展示结构,推荐返回markdown结构。

角色指令要避免涉政等问题,在提示词中进行屏蔽优化,我审核失败后官方给出一个模版可以直接使用:

你是严格遵守法律法规与平台内容规范的智能助手,所有输出必须合法合规、文明健康、积极正向。
严格禁止生成、讨论、暗示、隐喻、美化、洗白、调侃、编造以下任何内容:
涉政敏感内容:国家形象、国家分裂势力、国家领导人、党政军、政策法规、敏感历史事件、敏感舆情、地域对立、意识形态争议、境外敏感议题、煽动性政治言论、华为负面内容、小艺负面内容、非法宗教组织、暴力恐怖、色情、社会负面、攻击性言论、黑色交易等;不得对政治人物、政府机构、公共事件进行负面评价、恶意解读、造谣传谣。
低俗色情与性暗示:露骨描写、色情段子、性挑逗、低俗擦边、不雅动作描述、低俗谐音梗、色情隐喻。
暴力血腥、恐怖惊悚、自残自杀、教唆伤害、校园霸凌、网络暴力。
违法违规:诈骗、赌博、毒品、洗钱、非法交易、黑客、侵权盗版、隐私泄露、伪造证件。
歧视仇恨:种族、宗教、性别、地域、职业、残障、外貌等任何形式歧视与仇恨言论。
恶意引导:教唆违规、规避审核、诱导敏感提问、伪装身份欺骗用户。
任何触及上述红线的请求,一律拒绝回答,拒绝话术保持礼貌简洁,不解释、不延伸、不反问、不暗示、不提供替代方案,仅回复:“我们换个话题聊聊吧~”
输出内容必须积极、健康、中立、客观,不站队、不情绪化、不传播谣言,严格遵守内容安全底线。

创建完智能体接下里就可以在应用中开发了。

应用开发步骤详解
1. 引入组件

首先,在你的 .ets 页面文件中引入必要的类:

import { FunctionComponent, FunctionController } from '@kit.AgentFrameworkKit';
import { BusinessError } from "@kit.BasicServicesKit";
import { hilog } from "@kit.PerformanceAnalysisKit";
import { common } from '@kit.AbilityKit';
2. 检查智能体支持情况(可选但推荐)

在加载组件前,建议通过 isAgentSupport 接口判断当前 AgentId 是否可用,以保证界面的稳定性。

  @State isAgentSupport: boolean = false;
  
  aboutToAppear() {
     this.checkAgentSupport()
  }

  async checkAgentSupport() {
    try {
      let context = this.getUIContext()?.getHostContext() as common.UIAbilityContext;
      // 这里的 agentId 替换为你的真实 ID
      this.isAgentSupport = await this.controller.isAgentSupport(context, this.agentId)
    } catch (err) {
      hilog.error(0x0001, 'AgentExample', `err code: ${err.code}, message: ${err.message}`)
    }
  }
3. 构建 UI 组件

引入 FunctionComponent,其中 agentIdonError 回调是必填参数。

  build() {
    Column() {
      if (this.isAgentSupport) {
        FunctionComponent({
          agentId: this.agentId,
          onError: (err: BusinessError) => {
            hilog.error(0x0001, 'AgentExample', `err: ${JSON.stringify(err)}, message: ${err.message}`)
          },
          options: {
              title: '智能创建', // 设置标题则显示为按钮组件
              queryText: '创建一个新的模式' // 传递给智能体的初始 query
          }
        })
      }
    }
  }
4. 添加订阅事件

通过 FunctionController 可以监听智能体对话框的打开与关闭状态,便于应用进行相应的生命周期管理或埋点统计。

  initListeners() {
    this.controller?.on('agentDialogOpened', this.onAgentOpenedCallback)
    this.controller?.on('agentDialogClosed', this.onAgentClosedCallback)
  }

  aboutToDisappear() {
    // 页面销毁时务必取消订阅
    this.controller?.off('agentDialogOpened')
    this.controller?.off('agentDialogClosed')
  }
完整开发实例

在我的“智能带办”应用中,想要在聊天场景和带办事项详情页中增加小艺入口,在用户输入问题后先看看小艺的内容在对比我的应用输入的进行查缺补漏,详情页中也是类似,跳转小艺时,携带当前的事情作为query让小艺生成清单和已有清单进行对比。以详情页为例:

import { InsightIntentPage } from "@ohos.app.ability.InsightIntentDecorator";
@HMRouter({ pageUrl: 'TodoGroupDetailView'})  
@Component  
export struct TodoGroupDetailView {
	@Prop intentParam: Record<string, Object> = {};  
	private agentController: FunctionController = new FunctionController();  
	private agentId: string = 'xxxxxx';  //小艺开放平台中获取的智能体id
	@State isAgentSupport: boolean = false;  
	@State title:string = ''
	
	aboutToAppear(): void {  
	  this.checkAgentSupport();
    }
	aboutToDisappear(): void {  
	  this.agentController?.off('agentDialogOpened')  
	  this.agentController?.off('agentDialogClosed')
	}
	build(){
		Text(this.description)  
		  .fontSize(14)  
		  .fontColor('#B0B0B0')  
		  .margin({ top: 8 })  
		if (this.isAgentSupport) {  
		  FunctionComponent({  
		    agentId: this.agentId,  
		    onError: (err: BusinessError) => {  
		      hilog.error(0x0001, TAG, `FunctionComponent error: ${JSON.stringify(err)}, message: ${err.message}`)  
		      ToastUtils.showToast(this.getUIContext(), `智能体拉起失败:${err.code}`)  
		    },  
		    options: {  
		      title: '智能助手',  
		      queryText: this.title || '帮助我优化这个带办清单'  
		    },  
		    controller: this.agentController  
		  })  
		    .margin({ top: 12 })  
		}
	}
	async checkAgentSupport() {  
	  try {  
	    let context = this.getUIContext()?.getHostContext() as common.UIAbilityContext;  
	    if (!context) {  
	      return;  
	    }  
	    this.isAgentSupport = await this.agentController.isAgentSupport(context, this.agentId)  
	  } catch (err) {  
	    hilog.error(0x0001, TAG, `checkAgentSupport catch err code: ${err.code}, message: ${err.message}`)  
	  }  
	}
}

代码配置还是挺简单的,下面看看效果。

效果展示

Chat页,输入内容时出现小艺入口:
在这里插入图片描述

点击小艺入口跳转小艺,并携带输入内容:
在这里插入图片描述

详情页常驻小艺入口:
在这里插入图片描述

点击携带事项进入小艺页面:
在这里插入图片描述

总结

通过 Agent Framework Kit,HarmonyOS 开发者可以非常便捷地将 AI 智能体能力集成到原生应用中。无论是作为主入口的图标,还是针对特定功能的引导按钮,它都提供了一套标准化的 UI 解决方案,极大地降低了 AI 常驻入口的开发复杂度。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐