ForcePilot/backend/package/yuxi/agents/toolkits/buildin/tts.py
Kris b3bdb4fa2f feat: 新增TTS语音合成、音视频解析能力
1. 新增内置TTS工具,支持OpenAI兼容语音合成服务
2. 新增ASR音频解析和视频解析处理器
3. 扩展文件解析支持范围,添加音视频格式支持
4. 新增ffmpeg音视频处理基础工具库
5. 补充相关单元测试用例
2026-06-13 20:33:40 +08:00

45 lines
1.3 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.

"""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