鸿蒙意图即服务高级开发范式:从人找应用到服务找人/用户画像驱动/场景预判/主动服务推送架构升级
·



一、前言思考
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 条。
五、总结
- 意图即服务的本质是把"用户操作"降级为"用户意图":让服务主动靠近用户。
- 三层支撑缺一不可:意图解析(懂用户)、用户画像(懂偏好)、场景引擎(懂时机)。
- 主动推送是双刃剑:用画像 + 场景 + 负反馈控制打扰度,宁可少推不可骚扰。
- 隐私是底线:画像全端侧、可查看、可删除、可关闭。
一句话记住:理解意图、记住偏好、预判场景、克制推送。
🚀 演示功能优化(随项目同步更新)
本文对应的 ArkTS 演示页面已随项目整体优化,主要改进:
- 独立主题风格:活力橙 · 暖色卡片圆角标签,与其余章节演示页明显区分,不再千篇一律。
- 步骤回放动画:点击演示按钮后,结果行按 260~320ms/步 逐步展示,模拟真实推理过程。
- 运行态保护:演示过程中按钮置灰防重复触发,页面退出自动清理定时器。
- 结果摘要:演示结束后自动给出「一句话结论」,并 Toast 提示完成。
- AI 对话演示:新增 AiChatDemo(根目录 main.py 的 ArkTS 移植),真实 SSE 流式大模型请求,首页「★ AI Chat 流式对话演示」可进入。
对应页面:entry/src/main/ets/pages/IntentUpgradeDemo.ets
🧪 演示优化:真实 AI 推理接入(v3)
本演示页顶部新增 AI 意图理解主卡,点击即真实调用云端大模型(SSE 流式),不再是纯模拟回放:
- 请求链路:
utils/AiClient.ets(ArkTS 封装 OpenAI 兼容接口)→ POSThttps://api-ai.gitcode.com/v1/chat/completions,模型deepseek-ai/DeepSeek-V4-Flash,流式stream: true - 演示场景:意图解析 / 多意图衔接 / 用户画像 —— 每个场景绑定不同 IntentKit 专家 Prompt,返回内容各有差异
- 交互体验:进入页面自动触发一次真实推理;点场景标签切换并重新请求;按钮手动触发;输出区打字机流式展示
- 真实标识:卡片右上角
LIVE徽标 + 端点/模型名水印,保证"所见即所调"
更多推荐




所有评论(0)