Files
XCDesktop/tools/tongyi/tingwu_api.py
2026-03-08 01:34:54 +08:00

177 lines
5.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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(app_key, file_url):
"""
初始化请求参数
"""
body = dict()
body['AppKey'] = app_key
# 基本请求参数
input = dict()
input['SourceLanguage'] = 'cn'
input['TaskKey'] = 'task' + datetime.datetime.now().strftime('%Y%m%d%H%M%S')
input['FileUrl'] = file_url
body['Input'] = input
# AI相关参数按需设置即可
parameters = dict()
# 音视频转换相关
transcoding = dict()
# 将原音视频文件转成mp3文件用以后续浏览器播放
transcoding['TargetAudioFormat'] = 'mp3'
transcoding['SpectrumEnabled'] = False
parameters['Transcoding'] = transcoding
# 语音识别控制相关
transcription = dict()
# 角色分离 可选
transcription['DiarizationEnabled'] = True
diarization = dict()
diarization['SpeakerCount'] = 2
transcription['Diarization'] = diarization
parameters['Transcription'] = transcription
# 文本翻译控制相关 可选
parameters['TranslationEnabled'] = True
translation = dict()
translation['TargetLanguages'] = ['en'] # 假设翻译成英文
parameters['Translation'] = translation
# 章节速览相关 可选,包括: 标题、议程摘要
parameters['AutoChaptersEnabled'] = True
# 智能纪要相关 可选,包括: 待办、关键信息(关键词、重点内容、场景识别)
parameters['MeetingAssistanceEnabled'] = True
meetingAssistance = dict()
meetingAssistance['Types'] = ['Actions', 'KeyInformation']
parameters['MeetingAssistance'] = meetingAssistance
# 摘要控制相关 可选,包括: 全文摘要、发言人总结摘要、问答摘要(问答回顾)
parameters['SummarizationEnabled'] = True
summarization = dict()
summarization['Types'] = ['Paragraph', 'Conversational', 'QuestionsAnswering', 'MindMap']
parameters['Summarization'] = summarization
# ppt抽取和ppt总结 可选
parameters['PptExtractionEnabled'] = True
# 口语书面化 可选
parameters['TextPolishEnabled'] = True
# 大模型后处理任务全局参数 可选
parameters['Model'] = 'qwq'
parameters['LlmOutputLanguage'] = 'en'
body['Parameters'] = parameters
return body
def submit_tingwu_task(file_url, app_key, access_key_id, access_key_secret):
"""
提交通义听悟任务
"""
print(f"开始提交通义听悟任务文件URL: {file_url}")
try:
# 初始化参数
body = init_parameters(app_key, file_url)
print("初始化参数完成")
# 初始化客户端
credentials = AccessKeyCredential(access_key_id, access_key_secret)
client = AcsClient(region_id='cn-beijing', credential=credentials)
print("初始化客户端完成")
# 创建请求
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)
response_data = json.loads(response)
print("任务提交成功")
print(f"响应数据: {json.dumps(response_data, indent=4, ensure_ascii=False)}")
# 返回任务ID
task_id = response_data.get('Data', {}).get('TaskId')
if task_id:
print(f"获取到任务ID: {task_id}")
return task_id
else:
print("无法获取任务ID")
return None
except Exception as e:
print(f"任务提交失败: {e}")
import traceback
traceback.print_exc()
return None
def get_task_result(task_id, access_key_id, access_key_secret):
"""
获取任务结果
"""
print(f"开始查询任务结果任务ID: {task_id}")
try:
# 初始化客户端
credentials = AccessKeyCredential(access_key_id, access_key_secret)
client = AcsClient(region_id='cn-beijing', credential=credentials)
# 创建请求
uri = '/openapi/tingwu/v2/tasks' + '/' + task_id
request = create_common_request('tingwu.cn-beijing.aliyuncs.com', '2023-09-30', 'https', 'GET', uri)
# 发送请求
response = client.do_action_with_exception(request)
response_data = json.loads(response)
print("任务查询成功")
print(f"响应数据: {json.dumps(response_data, indent=4, ensure_ascii=False)}")
return response_data
except Exception as e:
print(f"任务查询失败: {e}")
import traceback
traceback.print_exc()
return None
def check_task_status(task_id, access_key_id, access_key_secret):
"""
检查任务状态
"""
result = get_task_result(task_id, access_key_id, access_key_secret)
if result:
task_status = result.get('Data', {}).get('TaskStatus')
print(f"当前任务状态: {task_status}")
return task_status
return None