贺公子之数据科学与艺术头像
【第 06 课 | 鸿蒙Agent Framework实战:让你的应用拥有智能体能力】封面图

【第 06 课 | 鸿蒙Agent Framework实战:让你的应用拥有智能体能力】

适用AI工具:DevEco Code / Cursor
前置博客:第02篇
预计阅读时间:22分钟
在这里插入图片描述

一、什么是鸿蒙的 Agent Framework?

2026 年鸿蒙生态最重要的变化之一:系统级智能体框架正式开放。过去应用提供的是"被调用的功能",Agent Framework 之后,应用可以注册自己的能力给系统智能体(小艺)编排调用,也可以在自己的应用内嵌入智能体运行时。

一句话理解三层角色:

  • 应用:通过 Agent Framework 注册能力(FunctionComponent),声明"我能做什么、需要什么参数"
  • 系统智能体:理解用户意图后,从所有已注册能力中选择并调用
  • AgentExtensionAbility:应用侧承接智能体调用的扩展入口,把调用翻译成业务执行

对开发者意味着两件事:你的应用能被一句话唤醒(第 07 篇 Intents Kit 是轻量版),以及复杂多步任务可交给智能体编排(本篇重点)。

二、整体架构与调用链路

旅行应用

日程应用

并行被调用

用户语音/文字输入

系统智能体: 意图理解

匹配到哪个应用能力?

TravelApp AgentExtensionAbility

CalendarApp AgentExtensionAbility

解析 FunctionComponent 参数

执行业务: 查询行程

构造结构化结果返回

智能体汇总 多应用结果融合

以卡片/语音形式呈现给用户

关键点:一次用户请求可能并行唤起多个应用的能力,智能体负责汇总融合。所以你的返回结果必须是结构化、自描述的,而不是一段 UI 文案。

三、FunctionComponent:注册你的能力

能力注册的核心是声明"函数签名 + 语义描述"。语义描述写得越清楚,智能体匹配越准:

// agent/TravelCapabilities.ets
import { functionComponent, FunctionResult } from '@kit.AgentFrameworkKit';

@functionComponent({
  name: 'query_travel_itinerary',
  description: '查询用户未来N天的旅行行程安排,包含航班、酒店与景点预约',
  parameters: [
    { name: 'days', type: 'number', description: '查询未来几天,默认3', required: false },
    { name: 'city', type: 'string', description: '按城市过滤,可选', required: false }
  ]
})
export async function queryItinerary(params: Record<string, Object>): Promise<FunctionResult> {
  const days = (params.days as number) ?? 3;
  const city = params.city as string ?? '';
  const list = await ItineraryModel.query(days, city);   // 复用既有业务层
  return new FunctionResult({
    summary: `未来${days}天共${list.length}项安排`,
    items: list.map(i => ({
      title: i.title, time: i.startTime, location: i.city
    })),
    deepLink: 'travelapp://itinerary/list'    // 用户点卡片可跳回应用
  });
}

AI 用法:把现有业务接口(如 ItineraryModel.query)贴给 AI,要求"按 Agent Framework 规范生成 @functionComponent 注册代码,parameters 从函数签名推导,description 补充中文语义"。能力注册是典型的模式化代码,AI 一次成型,人工只需校对 description 的措辞——description 决定匹配率,值得逐字打磨。

四、AgentExtensionAbility:承接调用

注册了能力,还要有入口承接智能体的调度:

import { AgentExtensionAbility, AgentRequest, AgentResponse } from '@kit.AgentFrameworkKit';

export default class TravelAgentExtension extends AgentExtensionAbility {
  async onInvoke(request: AgentRequest): Promise<AgentResponse> {
    // request.functionName 对应注册的 name
    switch (request.functionName) {
      case 'query_travel_itinerary':
        return await queryItinerary(request.params);
      default:
        return AgentResponse.notSupported(request.functionName);
    }
  }
}

同时在 module.json5 中声明扩展:

"extensionAbilities": [{
  "name": "TravelAgentExtension",
  "type": "agent",
  "exported": true,
  "srcEntry": "./ets/agent/TravelAgentExtension.ets"
}]

五、应用内嵌智能体:本地执行复杂任务

除了"被系统调用",Agent Framework 也支持应用内嵌智能体运行时:应用自己定义一组工具(Tools)+ 目标(Goal),由运行时循环"规划 → 调工具 → 观察结果 → 再规划"直到完成。

典型场景:旅游 App 内"帮我规划一个三天的杭州行程"——智能体依次调用 search_scenic(查景点)、check_weather(查天气)、book_hotel(订酒店)三个工具,自行决定调用顺序与参数。工具越多、任务越开放,编排价值越大。

AI 在这里的角色是"工具工厂":每个工具本质是"函数 + schema 描述",把业务方法清单给 AI,让它批量生成工具定义与参数校验,人工聚焦在异常分支的设计上。

六、调试与验证

智能体开发最痛苦的是"不知道智能体会怎么调用你"。三个调试抓手:

  1. 模拟器内置智能体调试台:DevEco 模拟器可模拟用户指令(语音转文字),直接观察你的 Extension 是否被拉起、收到的参数是什么
  2. hilog 过滤:Extension 生命周期与调用参数会打进系统日志,hdc shell hilog | grep AgentExt 全程可见
  3. 让 AI 反推测试用例:把 description 与 parameters 喂给 AI,生成 20 条"用户可能的说法"清单,逐条验证匹配——description 的打磨依据就在这里

实测经验:query_travel_itinerary 的 description 从"查询行程"扩写为"查询用户未来N天的旅行行程安排,包含航班、酒店与景点预约"后,小艺的意图命中率从约 55% 提升到约 90%。语义描述不是注释,是产品。

七、下一步

本篇是"应用能力被智能体编排"的重量级方案。下一篇介绍轻量级入口——Intents Kit 意图框架,让应用被小艺"一句话唤醒"。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/qq_31532979/article/details/168121354

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--