本文主要介绍章节速览的AI能力和实现方式。章节速览是将音视频内容,先按交流主题进行分割,再提炼总结每个内容分段的标题及摘要。通过章节速览,可快速了解内容的结构;并在较长的内容中,快速定位所需的主题。
请求参数
参数名 | 类型 | 是否必填 | 说明 |
AutoChaptersEnabled | boolean | 否 | 默认为false |
示例设置
{
"Input":{
...
},
"Parameters":{
...
"AutoChaptersEnabled":true,
...
}
}
代码示例
#!/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['AutoChaptersEnabled'] = True
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 AutoChaptersTest {
@Test
public void testAutoChapters() 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("AutoChaptersEnabled", true);
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",
"AutoChapters": "http://speech-swap-hangzhou.oss-cn-hangzhou.aliyuncs.com/tingwu/output/1503864348104017/05c45066fc6d496dae9b583426fdaae8/05c45066fc6d496dae9b583426fdaae8_AutoChapters_20231028230459.json?Expires=1698593389&OSSAccessKeyId=LTAI4G4uXHLPwQHj********&Signature=*********V8O%2BG4paM0VMv0AIyK4%3D"
},
"TaskId": "05c45066fc6df96dg09bf8z4*********",
"TaskStatus": "COMPLETED"
},
"RequestId": "7AE5CB5C-7287-16D1-BA93-G43********"
}
其中AutoChapters字段对应的即为章节速览结果的http url下载链接。
协议解析
上述输出中的章节速览结果url中的内容为JSON格式的报文,示例如下所示。
{
"TaskId":"05c45066fc6df96dg09bf8z4*********",
"AutoChapters":[
{
"Id":1,
"Start":1930,
"End":283874,
"Headline":"阿里巴巴云栖大会及技术责任",
"Summary":"云栖大会作为中国产业界的盛会,成为数字时代共同讨论的场所。阿里巴巴通过青橙奖助力青年科学家追求科学先进性。阿里云在云计算和数字生态方面不断发展,努力成为全球先进的计算基础设施。同时,阿里巴巴也在不断追求技术先进性,包括自主可控的云操作系统、算法模型的训练等。阿里巴巴希望通过低代码环境让普通人也能享受数据的成果和创造。此外,在芯片领域,阿里巴巴也在努力突破核心技术。"
},
{
"Id":2,
"Start":284050,
"End":452084,
"Headline":"云计算:推动中国走向现代化",
"Summary":"平头哥围绕云计算场景定义了倚天710芯片,并助力冬奥在云上举办。云计算为各行各业带来全新的生产管理方式,推动中国走向现代化。阿里巴巴致力于追求技术先进性,并为社会发展担当更大责任,努力使云计算成为可持续发展的绿色动力。"
}
]
}
具体字段定义如下。
参数名 | 类型 | 说明 |
TaskId | string | 创建任务时生成的TaskId。 |
AutoChapters | list[] | 章节速览集合, 含有0个、1个或多个章节速览信息。 |
AutoChapters[i].Id | int | 该章节序号。 |
AutoChapters[i].Start | long | 该章节相对于音频起始时间的开始时间,相对时间戳,单位毫秒。 |
AutoChapters[i].End | long | 该章节相对于音频起始时间的结束时间,相对时间戳,单位毫秒。 |
AutoChapters[i].Headline | string | 该章节的一句话标题。 |
AutoChapters[i].Summary | string | 章节总结。 |
常见问题
章节速览功能在什么场景下可以调用?
您可以在创建音视频文件离线转写或创建实时会议时,直接设置;
您也可以在离线转写或实时会议结束后,再次发起重跑任务请求(必须基于同一个TaskId),生成章节信息。
为什么我调用后没有生成章节速览的结果,或章节速览结果为空?
一个可能是调用参数没有启用或设置不正确,请您仔细参考开发文档进行对比并正确设置。
一个可能是您设置的语言模型并不支持生成章节信息,比如若音视频文件是日语,当前是不支持章节速览处理的。
另外一个可能是音视频文件的信息不够丰富,比如音视频文件转写后的ASR信息太少(可能是背景噪音过多或过差),导致模型无法生成章节信息。此时您可以更换一条涵盖有效信息更丰富的音视频文件进行测试。