HarmonyOS

文章40 |   阅读 20929 |   点赞0

来源:https://blog.csdn.net/forever_wj/category_11128883.html

HarmonyOS之AI能力·IM类意图识别

x33g5p2x  于2022-03-07 转载在 其他  
字(5.1k)|赞(0)|评价(0)|浏览(439)
一、基本概念
  • IM 类意图识别,是指利用机器学习技术,针对用户短信或聊天类 APP 等 IM 应用的文本消息进行内容分析,并识别出消息内容代表的用户意图。
  • 基于语义分析,利用机器学习的相关技术识别并理解用户消息的意图,通过IM意图识别,可以衍生出各种智能的应用场景,使智能设备更聪明,更懂用户。
  • 基于 IM 意图识别接口,可以对文本消息中包含的用户意图进行自动分析识别。
  • 目前仅开放支持通知消息类的三个意图的智能识别(称为“意图模块”),包括:
    • 还款提醒通知
    • 还款成功通知
    • 未接来电通知
  • IM 类意图识别当前只支持中文语境。
  • IM 类意图识别的输入文本限制在 500 个字符以内,字符数超出限制将返回参数错误,文本需要为 UTF-8 格式,格式错误不报错,但会导致分析结果错误。
  • Engine 支持多用户同时接入,但是不支持同一用户并发调用同一个特性。
    • 如同一个特性被同一进程同一时间多次调用,则返回系统忙错误。
    • 不同进程调用同一特性,则同一时间只有一个进程业务在处理,其他进程进入队列排队。
二、应用场景
① 生成智能卡片
  • 应用于生成智能卡片,例如:生成未接来电通知卡片。当来电未被用户接听(呼叫超时未接通或被用户主动拒绝接通),电信运营商或服务提供商会向用户发送短信提醒。
  • 当用户终端设备接收到短信提醒,即可由 IM 意图识别特性分析出未接来电通知短信的意图,并可以分析出呼叫方电话号码及呼叫时间,生成智能卡片,方便用户查看。
② 开发下拉 pad 屏
  • 应用于开发下拉 pad 屏。
  • 与生成智能卡片的场景类似,可识别用户消息文本的意图,在下拉 pad 屏生成并显示重要的信息,方便用户随时查看。
③ 文本消息意图识别
  • 主要针对用户短信或聊天类文本消息进行意图识别。
  • 目前仅开放支持了通知消息类的三个意图,分别为:还款提醒通知、还款成功通知、未接来电通知。
三、API 接口说明
① 主要接口
  • IM 类意图识别提供了初始化、同步、异步、解绑四个接口。
  • IM 类意图识别接口描述如下:
接口名功能描述
void init(Context context, OnResultListener listener, boolean isLoadModel)初始化接口,传入当前context对象和结果回调对象,决定是否在初始化时加载模型
ResponseResult getChatIntention(String requestData, int requestType)同步接口,用于IM类场景下的用户意图分析
ResponseResult getChatIntention(final String requestData, final int requestType, final OnResultListener listener)异步接口,用于IM类场景下的用户意图分析
void destroy(Context context)解绑接口,释放当前上下文对象
② 接口输入值说明
  • isLoadModel:是否在初始化时加载模型。
  • requestType:请求类型,取值可以从 ohos.ai.nlu.NluRequestType 选择,目前只支持端侧(REQUEST_TYPE_LOCAL)一种请求类型。
  • requestData 的 json 格式如下:
参数名是否必选类型说明
texttrueString待分析的文本,UTF-8编码,不超过500个字符,超过300个字符的只分析通知类意图
timestampfalselong该文本的发送时间或接收时间,格式为时间戳,表示距离格林威治时间1970.1.1的毫秒数。默认为当前系统时间
isSenderfalseint用来标示发送或接收,0表示接收,1表示发送
categoryfalseString需要分析的意图类别,默认分析所有类,多个用半角逗号“,”隔开,如需要分析出行类和通知类,传“notice”
modulefalseString用来指定具体分析哪些意图模块,默认分析全部意图模块。<br>如指定分析特定意图模块,则多个意图模块间用半角逗号“,”隔开。<br>例如同时分析还款提醒通知和还款成功通知意图,传“repayNotice,repayedNotice”
callPkgfalseString调用者名称
callTypefalseint调用者类型:<br>0:普通应用(默认)<br>1:快应用
callVersionfalseString调用者版本号
callStatefalseint调用者状态:<br>-1:未知(默认)<br>0:前台<br>1:后台
③ 接口返回值说明
  • 返回值 ResponseResult 中 responseResult 为 Json 字符串,体现文本分词的结果:
键参数名说明是否必选值类型返回值解析
code结果码TrueInt实体识别的结果码。取值包括:<br>0:成功<br>1:系统正在初始化<br>2:参数错误<br>3:系统忙<br>4:系统异常<br>5:任务超时<br>6:其它错误
message错误信息TrueString错误信息描述
intentions意图列表FalseJSONArray详细意图说明
④ 详细意图说明
  • 还款通知:表示还款通知的意图分析时,“intentions”子参数描述见下表:
参数名是否必选类型说明
nametrueString意图名,值为“repayNotice”
attributesfalseJSONArray意图属性,用数组表示,数组里的类型为JSONObject
+deadlinetrueJSONObject还款截止时间,结构与实体“time”一致
+moneyInfofalseJSONArray还款额信息,可能存在多币种,以数组形式存在,数组里的类型为JSONObject
++amounttrueString还款总额
++miniAmountfalseString最低还款金额
++unittrueint单位,0(人民币元)、1(美元)
+bankfalseString还款银行
+cardSuffixfalseString银行卡尾号
+bankCodefalseString银行简称代码
+phoneNumberfalseString客服电话
+cardTypetrueint卡类型,其取值列表如下:<br>0:信用卡<br>1:借记卡
+accountTypetrueint账户类型,其取值列表如下:<br>0:普通个人账户(默认)<br>1:车贷账户
  • 已还款通知:表示已经还款成功的通知,“intentions”子参数描述见下表:
参数名是否必选类型说明
nametrueString意图名,值为“repayedNotice”
attributesfalseJSONArray意图属性,用数组表示,数组里的类型为JSONObject
+timefalseJSONObject还款的时间,结构与实体“time”一致
+moneyInfofalseJSONArray还款额信息,可能存在多币种,以数组形式存在,数组里的类型为JSONObject
++amounttrueString已还款额
++unittrueint单位,0(人民币元)、1(美元)
+bankfalseString还款银行,与“银行卡尾号”二者至少存在一个
+cardSuffixfalseString银行卡尾号,与“还款银行”二者至少存在一个
+bankCodefalseString银行简称代码(对照代码表)
+isPayOfffalseint是否还清,只依据文本中出现的描述,“1”表示还清,否则无该字段
+arrearsfalseJSONArray还欠款信息,可能存在多币种,以数组形式存在,数组里的类型为JSONObject
++amounttrueString还欠款额
++unittrueint单位,0(人民币元)、1(美元)
+cardTypetrueint卡类型,其取值列表如下:<br>0:信用卡<br>1:借记卡
+accountTypetrueint账户类型,其取值列表如下:<br>0:普通个人账户(默认)<br>1:车贷账户
+deadlinefalseJSONObject截止时间,结构与实体“time”一致
  • 未接来电通知:表示未接来电的意图,“intentions”子参数描述见下表:
参数名是否必选类型说明
attributestrueJSONArray意图属性,用数组表示,数组里的类型为JSONObject
+numbertrueString未接来电号码
+callTimetrueJSONObject未接来电时间,结构与实体“time”一致
+namefalseString未接来电号码所属的人名
四、开发流程
  • 在使用 IM 类意图识别 API 时,将实现 IM 类意图识别的相关的类添加至工程:
import ohos.ai.nlu.ResponseResult; // 接口返回的结果类
	import ohos.ai.nlu.NluClient; // 接口客户端类
	import ohos.ai.nlu.NluRequestType; // 接口请求类
	import ohos.ai.nlu.OnResultListener; // 异步函数,执行成功的回调结果类
	import ohos.ai.nlu.util.NluError; // 调用接口返回的成功/错误码信息
  • 使用 NluClient 静态类进行初始化,通过异步方式获取服务的连接。
    • context:应用上下文信息,应为 ohos.aafwk.ability.Ability 或 ohos.aafwk.ability.AbilitySlice 的实例或子类实例。
    • listener:初始化结果的回调,可以传 null。
    • isLoadModel:是否加载模型,如果传 true,则在初始化时加载模型;如果传 false,则在初始化时不加载模型。
NluClient.getInstance().init(context, new OnResultListener<Integer>(){
	        @Override
	        public void onResult(Integer result){
	         // 初始化成功回调,在服务初始化成功调用该函数
	        }
	}, true);
  • 确认 NluClient 静态类进行初始化接口调用成功后,调用获取 IM 类意图识别方法得到分析结果,调用实例。同一个接口同时提供了同步和异步两种方法,开发者可根据自己需要进行选择,还款通知中的时间不应早于当前时间。
    • 同步接口:
String requestJson = "{text:'您个人信用卡07月账单¥198.00,还款日07月27日【XX银行】'}";
	ResponseResult responseResult = NluClient.getInstance().getChatIntention(requestJson, NluRequestType.REQUEST_TYPE_LOCAL);
	if (responseResult != null) {
	    // 获取接口返回结果
	    String result = responseResult.getResponseResult();
	}
    • 异步接口:
String requestJson = "{text:'您个人信用卡07月账单¥198.00,还款日07月27日【XX银行】'}"; 
	// 调用接口
	NluClient.getInstance().getChatIntention(requestJson, NluRequestType.REQUEST_TYPE_LOCAL, new OnResultListener <ResponseResult> () {
	    @Override
	    public void onResult(ResponseResult respResult) {
	        // 异步返回
	        if (respResult != null && respResult.getCode() == NluError.SUCCESS_RESULT) {
	            // 获取接口返回结果
	            String result = respResult.getResponseResult();
	        }
	    }
	});
  • 解绑服务:
/* 功能使用完毕,销毁上下文,释放资源。 */
	NluClient.getInstance().destroy(context);

相关文章