"""TTS 语音合成工具。""" from uuid import uuid4 from yuxi.agents.toolkits.registry import tool from yuxi.storage.minio import aupload_file_to_minio from yuxi.agents.toolkits.buildin.tts import get_tts_provider from yuxi.utils import logger @tool( category="buildin", tags=["语音"], display_name="语音合成", config_guide="使用前需配置 TTS_API_KEY 环境变量", ) async def text_to_speech(text: str, voice: str = "default") -> str: """ 将文本转换为语音并返回音频文件 URL。 Args: text: 要转换的文本(不超过 4096 字符) voice: 语音类型(default / alloy / echo / fable / onyx / nova / shimmer) Returns: 音频文件的访问 URL """ if len(text) > 4096: return "错误:文本长度超过 4096 字符限制" provider = get_tts_provider() if not provider: return "错误:TTS 服务未配置,请设置 TTS_API_KEY 环境变量" try: result = await provider.synthesize(text, voice=voice) except Exception as e: logger.error("TTS 合成失败: %s", e) return f"错误:语音合成失败 — {e}" # 存储到 MinIO file_name = f"tts/{uuid4().hex}.mp3" url = await aupload_file_to_minio("public", file_name, result.audio_data) return url