本文主要介紹服務質檢的AI能力和實現方式。服務質檢是指對服務過程中的對話進行質量檢測,支持自定義多個質檢維度,輔助客戶提升服務水平。
請求參數
參數名 | 類型 | 是否必填 | 說明 |
ServiceInspectionEnabled | boolean | 否 | 服務質檢功能開關,默認為false。 |
ServiceInspection | object | 否 | 服務質檢參數對象。 |
ServiceInspection.SceneIntroduction | string | 是 | 服務質檢的對話場景描述。 |
ServiceInspection.InspectionIntroduction | string | 是 | 服務質檢的檢測目標和側重點描述。 |
ServiceInspection.InspectionContents | list[] | 是 | 服務質檢的質檢維度列表,包含質檢維度名稱和定義,即需要大模型以什么樣的標準判斷該維度是否命中。個數不超過100。 |
ServiceInspection.InspectionContents[i].Title | string | 是 | 服務質檢的質檢維度名稱。 |
ServiceInspection.InspectionContents[i].Content | string | 是 | 服務質檢的質檢維度定義。 |
ServiceInspection.SpeakerMap | map<string,string> | 否 | 服務質檢的角色映射表,key為"1"、"2"...對應SpeakerId,value為說話人對應的角色,只有在多通道音頻下才有意義。 |
示例設置
{
"Input":{
...
},
"Parameters": {
"ServiceInspectionEnabled": true,
"ServiceInspection": {
"SceneIntroduction": "汽車門店線下銷售場景",
"InspectionIntroduction": "請檢測對話中汽車銷售人員表現是否接待熱情、態度良好",
"InspectionContents": [
{
"Title": "到店迎接-歡迎語",
"Content": "銷售在開場白的時候主動向客戶打招呼進行歡迎"
},
{
"Title": "離店送別-客戶留資",
"Content": "銷售邀請客戶留下微信、電話號碼、名片等聯系方式"
},
{
"Title": "到店迎接-飲品提供",
"Content": "銷售在接待客戶的時候主動詢問是否需要飲料(如咖啡、橙汁、水、茶等)、點心、零食、水果等"
}
]
}
}
}
代碼示例
#!/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['ServiceInspectionEnabled'] = True
service_inspection = {
"SceneIntroduction": "汽車門店線下銷售場景",
"InspectionIntroduction": "請檢測對話中汽車銷售人員表現是否接待熱情、態度良好",
"InspectionContents": [
{
"Title": "到店迎接-歡迎語",
"Content": "銷售在開場白的時候主動向客戶打招呼進行歡迎"
},
{
"Title": "離店送別-客戶留資",
"Content": "銷售邀請客戶留下微信、電話號碼、名片等聯系方式"
},
{
"Title": "到店迎接-飲品提供",
"Content": "銷售在接待客戶的時候主動詢問是否需要飲料(如咖啡、橙汁、水、茶等)、點心、零食、水果等"
}
]
}
parameters['ServiceInspection'] = service_inspection
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 ServiceInspectionTest {
@Test
public void testServiceInspection() 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("ServiceInspectionEnabled", true);
JSONObject serviceInspection = new JSONObject();
serviceInspection.fluentPut("SceneIntroduction", "長安深藍汽車門店線下銷售場景")
.fluentPut("InspectionIntroduction", "請檢測對話中汽車銷售人員表現是否接待熱情、態度良好")
.fluentPut("InspectionContents", new JSONArray()
.fluentAdd(new JSONObject().fluentPut("Title", "到店迎接-歡迎語").fluentPut("Content", "銷售在開場白的時候主動向客戶打招呼進行歡迎"))
.fluentAdd(new JSONObject().fluentPut("Title", "離店送別-客戶留資").fluentPut("Content", "銷售邀請客戶留下微信、電話號碼、名片等聯系方式"))
.fluentAdd(new JSONObject().fluentPut("Title", "到店迎接-飲品提供").fluentPut("Content", "銷售在接待客戶的時候主動詢問是否需要飲料(如咖啡、橙汁、水、茶等)、點心、零食、水果等。"))
);
parameters.put("ServiceInspection", serviceInspection);
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": "http://speech-swap-hangzhou.oss-cn-hangzhou.aliyuncs.com/tingwu/output/1503864348104017/05c45066fc6d496dae9b583426fdaae8/05c45066fc6d496dae9b583426fdaae8_Transcription_20231028230430.json?Expires=1698593389&OSSAccessKeyId=LTAI4G4uXHLPwQHj********&Signature=*********huzKcM4tzimubU%3D",
"ServiceInspection": "http://speech-swap-hangzhou.oss-cn-hangzhou.aliyuncs.com/tingwu/output/1503864348104017/05c45066fc6d496dae9b583426fdaae8/05c45066fc6d496dae9b583426fdaae8_ServiceInspection_20231028230459.json?Expires=1698593389&OSSAccessKeyId=LTAI4G4uXHLPwQHj********&Signature=*********V8O%2BG4paM0VMv0AIyK4%3D"
},
"TaskId": "05c45066fc6df96dg09bf8z4*********",
"TaskStatus": "COMPLETED"
},
"RequestId": "7AE5CB5C-7287-16D1-BA93-G43********"
}
其中ServiceInspection字段對應的即為口語書面化結果的http url下載鏈接。
協議解析
上述輸出中的服務質檢結果url中的內容為JSON格式的報文,示例如下所示。
{
"TaskId": "4ee872e72fd0490694f1cd615b6b6314",
"ServiceInspection": [
{
"Title": "到店迎接-歡迎語",
"Matched": true,
"Remarks": "銷售人員通過詢問開啟對話,表現出一定的迎接意圖。",
"MatchedSentenceIds": [
]
},
{
"Title": "離店送別-客戶留資",
"Matched": true,
"Remarks": "銷售人員提出加微信的方式以便后續聯系。",
"MatchedSentenceIds": [
]
},
{
"Title": "到店迎接-飲品提供",
"Matched": false,
"Remarks": "對話中未提及提供飲品的信息。",
"MatchedSentenceIds": [
]
}
]
}
具體字段定義如下。
參數名 | 類型 | 說明 |
TaskId | string | 創建任務時生成的TaskId。 |
ServiceInspection | list[] | 服務質檢結果的集合,含有0個、1個或多個服務質檢結果信息。 |
ServiceInspection[i].Title | string | 服務質檢結果的名稱,和入參的ServiceInspection.InspectionContents[i].Title對應。 |
ServiceInspection[i].Matched | boolean | 本條服務質檢項是否命中。 |
ServiceInspection[i].Remarks | string | 大模型對本條質檢項的分析。 |
ServiceInspection[i].MatchedSentenceIds | list[] | 命中該質檢項的原始對話,在原文中的句子id。 |