本文主要介绍对身份识别的AI能力和实现方式。身份识别是指对参与对话的发言人进行身份识别,支持指定对话场景,帮助客户快速识别对话角色,从而进一步开展产品迭代、营销策略制定等工作。
请求参数
参数名 | 类型 | 是否必填 | 说明 |
参数名 | 类型 | 是否必填 | 说明 |
IdentityRecognitionEnabled | boolean | 否 | 身份识别功能开关,默认为false。 |
IdentityRecognition | object | 否 | 身份识别参数对象。 |
IdentityRecognition.SceneIntroduction | string | 否 | 身份识别的场景描述。 |
IdentityRecognition.IdentityContents | list[] | 是 | 身份识别的内容列表,包含身份名称和描述。 |
IdentityRecognition.IdentityContents[i].Name | string | 是 | 身份名称。 |
IdentityRecognition.IdentityContents[i].Description | string | 是 | 身份描述。 |
使用身份识别功能之前应开启说话人分离,否则默认对话只有一个说话人。
IdentityRecognition.IdentityContents的最大长度为5。
示例设置
身份识别功能支持指定对话的场景,帮助提升身份识别效果,如:在线教育电话销售场景、汽车门店线下销售场景、房产中介售房场景等。
通过“Name”字段指定身份,“Description”为身份描述。需要通过中文直观描述,不要增加正则表达式、复杂的列表结构等。否则将与服务包含的Prompt冲突。
{
"Input":{
...
},
"Parameters": {
"IdentityRecognitionEnabled": true,
"IdentityRecognition": {
"SceneIntroduction": "汽车门店线下销售场景",
"IdentityContents": [
{
"Name": "销售",
"Description": "介绍车辆的不同配置、性能与技术、舒适性与便利性等"
},
{
"Name": "客户",
"Description": "对车辆提出疑问,表达使用感受等"
}
]
}
}
}
建议:
Name尽可能不出现类似的身份,如“销售”,“导购”出现在同一个身份识别任务中。
Description边界分明,不同身份不出现重复、类似的身份描述。
代码示例
#!/usr/bin/env python
# coding=utf-8
import os
import json
import datetime
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from aliyunsdkcore.auth.credentials import AccessKeyCredential
def create_common_request(domain, version, protocolType, method, uri):
request = CommonRequest()
request.set_accept_format('json')
request.set_domain(domain)
request.set_version(version)
request.set_protocol_type(protocolType)
request.set_method(method)
request.set_uri_pattern(uri)
request.add_header('Content-Type', 'application/json')
return request
def init_parameters():
root = dict()
root['AppKey'] = '输入您在听悟管控台创建的Appkey'
# 基本请求参数
input = dict()
input['SourceLanguage'] = 'cn'
input['TaskKey'] = 'task' + datetime.datetime.now().strftime('%Y%m%d%H%M%S')
input['FileUrl'] = '输入待测试的音频url链接'
root['Input'] = input
# AI相关参数,按需设置即可
parameters = dict()
# 身份识别
parameters['IdentityRecognitionEnabled'] = True
identity_recognition = {
"SceneIntroduction": "汽车门店线下销售场景",
"IdentityContents": [
{
"Name": "销售",
"Description": "介绍车辆的不同配置、性能与技术、舒适性与便利性等"
},
{
"Name": "客户",
"Description": "对车辆提出疑问,表达使用感受等"
}
]
}
parameters['IdentityRecognition'] = identity_recognition
root['Parameters'] = parameters
return root
body = init_parameters()
print(body)
# TODO 请通过环境变量设置您的 AccessKeyId 和 AccessKeySecret
credentials = AccessKeyCredential(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
client = AcsClient(region_id='cn-beijing', credential=credentials)
request = create_common_request('tingwu.cn-beijing.aliyuncs.com', '2023-09-30', 'https', 'PUT', '/openapi/tingwu/v2/tasks')
request.add_query_param('type', 'offline')
request.set_content(json.dumps(body).encode('utf-8'))
response = client.do_action_with_exception(request)
print("response: \n" + json.dumps(json.loads(response), indent=4, ensure_ascii=False))
package com.alibaba.tingwu.client.demo.aitest;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.profile.DefaultProfile;
import org.junit.Test;
/**
* @author tingwu2023
*/
public class IdentityRecognitionTest {
@Test
public void testIdentityRecognition() throws ClientException {
CommonRequest request = createCommonRequest("tingwu.cn-beijing.aliyuncs.com", "2023-09-30", ProtocolType.HTTPS, MethodType.PUT, "/openapi/tingwu/v2/tasks");
request.putQueryParameter("type", "offline");
JSONObject root = new JSONObject();
root.put("AppKey", "输入您在听悟管控台创建的Appkey");
JSONObject input = new JSONObject();
input.fluentPut("FileUrl", "输入待测试的音频url链接")
.fluentPut("SourceLanguage", "cn")
.fluentPut("TaskKey", "task" + System.currentTimeMillis());
root.put("Input", input);
JSONObject parameters = new JSONObject();
parameters.put("IdentityRecognitionEnabled", true);
JSONObject identityRecognition = new JSONObject();
identityRecognition.fluentPut("SceneIntroduction", "汽车门店线下销售场景")
.fluentPut("IdentityContents", new JSONArray()
.fluentAdd(new JSONObject().fluentPut("Name", "销售").fluentPut("Description", "介绍车辆的不同配置、性能与技术、舒适性与便利性等"))
.fluentAdd(new JSONObject().fluentPut("Name", "客户").fluentPut("Description", "对车辆提出疑问,表达使用感受等"))
);
parameters.put("IdentityRecognition", identityRecognition);
root.put("Parameters", parameters);
System.out.println(root.toJSONString());
request.setHttpContent(root.toJSONString().getBytes(), "utf-8", FormatType.JSON);
// TODO 请通过环境变量设置您的AccessKeyId、AccessKeySecret
DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
IAcsClient client = new DefaultAcsClient(profile);
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
}
public static CommonRequest createCommonRequest(String domain, String version, ProtocolType protocolType, MethodType method, String uri) {
// 创建API请求并设置参数
CommonRequest request = new CommonRequest();
request.setSysDomain(domain);
request.setSysVersion(version);
request.setSysProtocol(protocolType);
request.setSysMethod(method);
request.setSysUriPattern(uri);
request.setHttpContentType(FormatType.JSON);
return request;
}
}
示例输出
{
"Message": "success",
"Code": "0",
"Data": {
"Result": {
"Transcription": "https://speech-swap-hangzhou.oss-cn-hangzhou.aliyuncs.com/tingwu/output/1503864348104017/05c45066fc6d496dae9b583426fdaae8/05c45066fc6d496dae9b583426fdaae8_Transcription_20231028230430.json",
"IdentityRecognition":"https://speech-swap-hangzhou.oss-cn-hangzhou.aliyuncs.com/tingwu/output/1662764528407695/10cac845e6464a2d9aac6017bc8c8563/10cac845e6464a2d9aac6017bc8c8563_IdentityRecognition_20250331141840.json"
},
"TaskId": "10cac845e6464a2d9aac601*********",
"TaskStatus": "COMPLETED"
},
"RequestId": "B95BC4D9-AB53-1FBA-97B9-C8A6********"
}
其中IdentityRecognition字段对应的即为身份识别结果的HTTPS url下载链接。
协议解析
上述输出中的身份识别url中的内容为JSON格式的报文,示例如下所示。
{
"TaskId": "10cac845e6464a2d9aac601*********",
"IdentityRecognition": {
"IdentityResults":[
{"SpeakerId":"1","Identity":"销售"},
{"SpeakerId":"2","Identity":"客户"}
]
}
}
具体字段定义如下。
参数名 | 类型 | 说明 |
参数名 | 类型 | 说明 |
TaskId | string | 创建任务时生成的TaskId。 |
IdentityRecognition | Object | 身份识别结果对象,含一个身份识别结果列表。 |
IdentityRecognition.IdentityResults | List | 身份识别结果列表。 |
IdentityRecognition.IdentityResults[i].SpeakerId | string | 说话人id,对应语音转写中说话人分离结果的speakerId。 |
IdentityRecognition.IdentityResults[i].Identity | string | 身份识别结果的名称,和入参的IdentityRecognition.IdentityContents[i].Name对应。 |
- 本页导读 (0)
- 请求参数
- 示例设置
- 代码示例
- 示例输出
- 协议解析