对话内容提取

更新时间:2025-04-01 08:46:16

本文主要介绍对话内容提取的AI能力和实现方式。对话内容提取是指对销售、演讲、访谈、客户服务等场景对话进行指定话题的提取,支持自定义多个提取话题,帮助客户快速抓住沟通重点,从而进一步开展产品迭代、营销策略制定等工作。

请求参数

参数名

类型

是否必填

说明

参数名

类型

是否必填

说明

ContentExtractionEnabled

boolean

对话内容提取功能开关,默认为false。

ContentExtraction

object

对话内容提取参数对象。

ContentExtraction.SceneIntroduction

string

对话内容提取的场景描述。

ContentExtraction.ExtractionContents

list[]

对话内容提取的提取维度列表,包含提取项的名称和定义。个数不超过100。

ContentExtraction.ExtractionContents[i].Title

string

对话内容提取的提取维度名称。

ContentExtraction.ExtractionContents[i].Content

string

对话内容提取的维度定义。

ContentExtraction.ExtractionContents[i].Identity

string

对话内容提取该维度对应的说话人身份。该参数需要与身份识别配合使用

说明

身份识别功能可辅助优化对话内容提取的效果。同时开启身份识别与对话内容提取,身份识别将会自动作为对话内容提取的前置节点,其识别结果将作为身份信息自动代入对话内容中。此时,可以通过ContentExtraction.ExtractionContents[i].Identity参数,指定话题适用的发言人身份,优化对话内容提取的效果。

示例设置

对话内容提取功能需要明确对话的场景,如:在线教育电话销售场景、汽车门店线下销售场景、房产中介售房场景等。

通过“Title”字段描述对话内容提取项的名称,“Content”为具体提取点描述。需要通过中文直观描述,不要增加角色定义、正则表达式、复杂的列表结构等。否则将与服务包含的Prompt冲突。

{
    "Input":{
        ...
    },
    "Parameters": {
        "ContentExtractionEnabled": true,
        "ContentExtraction": {
            "SceneIntroduction": "汽车门店线下销售场景",
            "ExtractionContents": [
                {
                    "Title": "客户价格异议",
                    "Content": "客户提到对车型价格、优惠活动或担心之后降价",
                    "Identity": "客户"
                },
                {
                    "Title": "竞品车型反馈",
                    "Content": "总结客户明确表达感受的所有竞品品牌或竞品车型,并总结客户对竞品品牌或车型的想法"
                },
                {
                    "Title": "引导购车话术",
                    "Content": "基于对话提取销售引导客户购车的话术",
                    "Identity": "销售"
                }
            ]
        }
    }
}

建议:

  • Title边界分明,不同身份不出现重复、表述不清的说明,如“客户提问”、“交流话题”、“客户需求”。

  • Content不增加判断逻辑

代码示例

Python
Java
#!/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['ContentExtractionEnabled'] = True
    content_extraction = {
        "SceneIntroduction": "汽车门店线下销售场景",
        "ExtractionContents": [
            {
                "Title": "客户价格异议",
                "Content": "客户提到对车型价格、优惠活动或担心之后降价",
                "Identity": "客户"
            },
            {
                "Title": "竞品车型反馈",
                "Content": "总结客户明确表达感受的所有竞品品牌或竞品车型,并总结客户对竞品品牌或车型的想法",
                "Identity": "客户"
            },
            {
                "Title": "引导购车话术",
                "Content": "基于对话提取销售引导客户购车的话术",
                "Identity": "销售"
            }
        ]
    }
    parameters['ContentExtraction'] = content_extraction
    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 ContentExtractionTest {

    @Test
    public void testContentExtraction() 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("ContentExtractionEnabled", true);
        JSONObject contentExtraction = new JSONObject();
        contentExtraction.fluentPut("SceneIntroduction", "汽车门店线下销售场景")
                .fluentPut("ExtractionContents", new JSONArray()
                        .fluentAdd(new JSONObject().fluentPut("Title", "客户价格异议").fluentPut("Content", "客户提到对车型价格、优惠活动或担心之后降价").fluentPut("Identity", "客户"))
                        .fluentAdd(new JSONObject().fluentPut("Title", "竞品车型反馈").fluentPut("Content", "总结客户明确表达感受的所有竞品品牌或竞品车型,并总结客户对竞品品牌或车型的想法"))
                        .fluentAdd(new JSONObject().fluentPut("Title", "引导购车话术").fluentPut("Content", "基于对话提取销售引导客户购车的话术").fluentPut("Identity", "销售"))
                );
        parameters.put("ContentExtraction", contentExtraction);
        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", 
            "ContentExtraction": "https://speech-swap-hangzhou.oss-cn-hangzhou.aliyuncs.com/tingwu/output/1503864348104017/05c45066fc6d496dae9b583426fdaae8/05c45066fc6d496dae9b583426fdaae8_ContentExtraction_20231028230459.json"
        }, 
        "TaskId": "05c45066fc6df96dg09bf8z4*********", 
        "TaskStatus": "COMPLETED"
    }, 
    "RequestId": "7AE5CB5C-7287-16D1-BA93-G43********"
}

其中ContentExtraction字段对应的即为对话内容提取结果的HTTPS url下载链接。

协议解析

上述输出中的对话内容提取结果url中的内容为JSON格式的报文,示例如下所示。

{
    "TaskId": "4ee872e72fd0490694f1cd6*********",
    "ContentExtraction": [
        {
            "Title": "客户价格异议",
            "Result": "客户对车型价格及优惠活动表达了关注,询问了具体的优惠金额、报废车置换补贴、贷款利息及总费用,以及不同车型的优惠幅度。",
            "Remarks": "客户在对话中多次提及价格和优惠相关的问题,显示出对购车成本的敏感和对性价比的考量。",
            "MatchedSentenceIds": [2, 4, 10, 21, 34, 54, 89, 123, 129, 130, 139, 147, 154, 150, 160]
        },
        {
            "Title": "竞品车型反馈",
            "Result": "未提及",
            "Remarks": "客户在对话中没有提及任何竞品品牌或车型,也没有表达对竞品的想法。",
            "MatchedSentenceIds": []
        },
        {
            "Title": "预计购车时间",
            "Result": "年底前",
            "Remarks": "客户表示计划在年终最优惠的活动价时,购买新车。",
            "MatchedSentenceIds": [3, 5, 6, 7]
        }
    ]
}

具体字段定义如下:

参数名

类型

说明

参数名

类型

说明

TaskId

string

创建任务时生成的TaskId。

ContentExtraction

list[]

对话内容提取结果的集合,含有0个、1个或多个对话内容提取结果信息。

ContentExtraction[i].Title

string

对话内容提取结果的名称,和入参的ContentExtraction.ExtractionContents[i].Title对应。

ContentExtraction[i].Result

string

内容提取结果。

ContentExtraction[i].Remarks

string

大模型对本条内容提取项的分析。

ContentExtraction[i].MatchedSentenceIds

list[]

命中该内容的原始对话,在原文中的句子id。

  • 本页导读 (0)
  • 请求参数
  • 示例设置
  • 代码示例
  • 示例输出
  • 协议解析
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等