#!/usr/bin/env python3 """ 简单测试 DashScope ASR 功能 """ import sys import os sys.path.append('.') import dashscope from dashscope.audio.asr import Transcription from lover.config import settings from lover.oss_utils import upload_audio_file, delete_audio_file import logging # 设置日志 logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def test_dashscope_asr(): """测试 DashScope ASR 功能""" # 设置 API Key dashscope.api_key = settings.DASHSCOPE_API_KEY logger.info(f"DashScope API Key: {settings.DASHSCOPE_API_KEY[:10]}***") # 创建测试音频数据(模拟 MP3 文件头) # 这是一个最小的 MP3 文件头,虽然不是真正的音频,但可以测试 API 调用 mp3_header = bytes([ 0xFF, 0xFB, 0x90, 0x00, # MP3 同步字和头信息 0x00, 0x00, 0x00, 0x00, # 填充数据 ]) + b"fake mp3 audio data" * 100 logger.info(f"创建测试 MP3 数据,大小: {len(mp3_header)} 字节") try: # 上传到 OSS logger.info("上传测试音频到 OSS...") file_url = upload_audio_file(mp3_header, "mp3") logger.info(f"上传成功: {file_url}") # 验证 URL 格式 if not file_url.startswith('https://'): logger.error(f"URL 格式错误: {file_url}") return False # 调用 DashScope ASR logger.info("调用 DashScope ASR...") logger.info(f"文件 URL: {file_url}") task_response = Transcription.async_call( model='paraformer-v2', file_urls=[file_url], parameters={ 'format': 'mp3', 'sample_rate': 16000, 'enable_words': False } ) logger.info(f"ASR 任务响应: status_code={task_response.status_code}") logger.info(f"ASR 任务响应: {task_response}") if task_response.status_code == 200: task_id = task_response.output.task_id logger.info(f"任务创建成功: {task_id}") # 等待结果(简单等待,不处理结果) logger.info("等待 ASR 结果...") try: result = Transcription.wait(task=task_id) logger.info(f"ASR 结果: status_code={result.status_code}") logger.info(f"ASR 结果: {result}") if result.status_code == 200: logger.info(f"任务状态: {result.output.task_status}") if result.output.task_status == "FAILED": logger.info(f"失败原因: {getattr(result.output, 'code', 'Unknown')}") logger.info(f"失败消息: {getattr(result.output, 'message', 'Unknown')}") else: logger.error(f"获取结果失败: {result.status_code}") except Exception as wait_error: logger.error(f"等待结果失败: {wait_error}") else: logger.error(f"任务创建失败: {task_response.status_code}") if hasattr(task_response, 'message'): logger.error(f"错误消息: {task_response.message}") # 清理文件 logger.info("清理 OSS 文件...") delete_audio_file(file_url) return True except Exception as e: logger.error(f"测试失败: {e}") logger.error(f"错误类型: {type(e)}") import traceback logger.error(f"错误堆栈: {traceback.format_exc()}") return False if __name__ == "__main__": success = test_dashscope_asr() if success: logger.info("🎉 DashScope ASR 测试完成") else: logger.error("💥 DashScope ASR 测试失败") sys.exit(1)