在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、前言思考

1.1 从"人找应用"到"服务找人"

传统 App 模式是人找应用:用户想打车 → 打开打车 App → 输入目的地 → 点叫车。每一步都是用户在操作。

鸿蒙意图框架(IntentKit)提供服务找人的新范式:

  • 用户说"我快迟到了" → 系统理解意图 → 主动推提醒 + 打车卡片 + 路线;
  • 用户到达商场 → 系统识别场景 → 主动推停车位、优惠券;
  • 用户睡前 → 系统预判 → 推送助眠音乐、闹钟设置。

1.2 主动服务的三个支撑

支撑 作用
意图解析 把用户行为/语音/上下文转成可执行的意图
用户画像 记住偏好,让推荐个性化
场景引擎 预判用户即将需要什么,提前准备

二、底层原理

2.1 双范式对比

维度 人找应用(传统) 服务找人(意图即服务)
触发 用户主动打开 App 意图识别自动触发
输入 手动操作 行为/语音/传感器/上下文
体验 多步操作 一触即达
数据 应用内数据 跨应用上下文
私密性 数据在各 App 内部 需要权限治理模型

2.2 意图解析流水线

输入(语音/文字/行为/位置/时间)
        │
        ▼
意图识别: 这是什么意图? (打车/订餐/提醒/导航)
        │
        ▼
槽位抽取: 起点/终点/时间/人数
        │
        ▼
画像注入: 用户偏好(常用车型/常去地点)
        │
        ▼
场景匹配: 当前场景(通勤/出差/聚会)
        │
        ▼
服务排序: 哪个服务最适合?
        │
        ▼
主动推送: 卡片/通知/直达

2.3 场景预判引擎

基于规则的预判 + 基于学习的预测:

规则: 工作日 7:30 在家 → 预判通勤场景 → 推送路况+导航
学习: 用户每周五晚点外卖 → 周五 17:00 预判外卖意图 → 推餐厅卡片

预判不是"猜",而是"等":场景命中且用户最近用过的服务,才推卡片,避免骚扰。

2.4 用户画像

用户画像 = 静态画像(性别/常居地/职业) + 动态画像(近期行为/频次/时段)

画像隐私约束:画像数据必须端侧保存、用户可查看可删除、权限可控

三、实战落地

3.1 声明意图服务(被主动调用)

// module.json5 中声明能力
{
  "skills": [
    {
      "entities": ["entity.system.reminder"],
      "actions": ["action.reminder.create"],
      "uris": [{ "scheme": "demo", "host": "reminder" }]
    }
  ]
}
// Ability 中处理意图调用
onCreate(want: Want) {
  if (want.action === 'action.reminder.create') {
    const time = want.parameters['time'] as string;
    const event = want.parameters['event'] as string;
    this.showCreateReminder(time, event);
  }
}

3.2 注册主动服务(服务找人)

import { intentService } from '@kit.AiKit';

// 注册一个可被意图框架发现的服务
intentService.register({
  intent: 'action.delivery.order',
  description: '外卖下单服务',
  inputSchema: {
    food: 'string',
    address: 'string',
    time: 'string'
  },
  priority: 80,               // 服务排序权重
  conditions: {               // 触发条件
    scene: ['meal_time', 'weekend_evening']
  },
  handler: async (params) => {
    // 收到意图,拉起下单卡片
    return { action: 'launch', url: 'demo://delivery?food=' + params.food };
  }
});

3.3 主动推送卡片

import { notificationManager } from '@kit.NotificationKit';

// 意图命中 → 推送可交互卡片
const wantAgent = await wantAgentHelper.getWantAgent({
  wants: [{ action: 'action.delivery.order', parameters: { food: '披萨' } }],
  actionType: wantAgent.OperationType.START_ABILITY,
  requestCode: 1001
});

notificationManager.publish({
  id: 1001,
  content: {
    notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
    normal: {
      title: '🍕 又到周五了',
      text: '上次点了这家,还点吗?',
      additionalText: '点我直达下单'
    }
  },
  wantAgent: wantAgent
});

3.4 用户画像驱动推荐

// 端侧画像(本地存储,用户可清除)
const profile = {
  favoriteFood: ['披萨', '日料'],
  homeAddress: '北京朝阳',
  workAddress: '北京海淀',
  activeHours: ['7:30-9:00', '19:00-21:00'],
  recentApps: ['music', 'map', 'delivery']
};

// 排序逻辑: 场景 × 画像 × 频率
function rankServices(intent: Intent): Service[] {
  return allServices
    .filter(s => s.matches(intent))
    .sort((a, b) =>
      (b.sceneScore + b.profileScore) - (a.sceneScore + a.profileScore));
}

四、性能排查与优化

问题 表现 优化手段
推送骚扰 频繁打扰用户 降频、画像负反馈、用户可一键关闭
意图误判 推了不该推的 提高置信度阈值、加二次确认
服务超时 主动服务响应慢 服务预启动、卡片先行结果后到
画像过期 推荐过时 画像衰减(旧行为权重降低)
隐私投诉 用户担心数据 全本地存储 + 透明说明 + 可删除

4.1 负反馈闭环

用户每次忽略/关闭推送都是一次负反馈信号,用于降低该服务的排序权重:

function onIgnore(serviceId: string) {
  const w = profile.negativeWeights[serviceId] ?? 0;
  profile.negativeWeights[serviceId] = w + 1;
  // 排序时扣减
}

4.2 防骚扰限流

  • 同一意图 24h 内最多主动推送 1 次;
  • 连续 3 次忽略 → 该服务 7 天内不再主动推;
  • 全局每天主动推送上限 5 条。

五、总结

  1. 意图即服务的本质是把"用户操作"降级为"用户意图":让服务主动靠近用户。
  2. 三层支撑缺一不可:意图解析(懂用户)、用户画像(懂偏好)、场景引擎(懂时机)。
  3. 主动推送是双刃剑:用画像 + 场景 + 负反馈控制打扰度,宁可少推不可骚扰。
  4. 隐私是底线:画像全端侧、可查看、可删除、可关闭。

一句话记住:理解意图、记住偏好、预判场景、克制推送。


🚀 演示功能优化(随项目同步更新)

本文对应的 ArkTS 演示页面已随项目整体优化,主要改进:

  1. 独立主题风格:活力橙 · 暖色卡片圆角标签,与其余章节演示页明显区分,不再千篇一律。
  2. 步骤回放动画:点击演示按钮后,结果行按 260~320ms/步 逐步展示,模拟真实推理过程。
  3. 运行态保护:演示过程中按钮置灰防重复触发,页面退出自动清理定时器。
  4. 结果摘要:演示结束后自动给出「一句话结论」,并 Toast 提示完成。
  5. AI 对话演示:新增 AiChatDemo(根目录 main.py 的 ArkTS 移植),真实 SSE 流式大模型请求,首页「★ AI Chat 流式对话演示」可进入。

对应页面:entry/src/main/ets/pages/IntentUpgradeDemo.ets


🧪 演示优化:真实 AI 推理接入(v3)

本演示页顶部新增 AI 意图理解主卡,点击即真实调用云端大模型(SSE 流式),不再是纯模拟回放:

  • 请求链路utils/AiClient.ets(ArkTS 封装 OpenAI 兼容接口)→ POST https://api-ai.gitcode.com/v1/chat/completions,模型 deepseek-ai/DeepSeek-V4-Flash,流式 stream: true
  • 演示场景:意图解析 / 多意图衔接 / 用户画像 —— 每个场景绑定不同 IntentKit 专家 Prompt,返回内容各有差异
  • 交互体验:进入页面自动触发一次真实推理;点场景标签切换并重新请求;按钮手动触发;输出区打字机流式展示
  • 真实标识:卡片右上角 LIVE 徽标 + 端点/模型名水印,保证"所见即所调"
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐