feat(voice): 实现自身语音缓存以跳过ASR识别

当机器人通过TTS插件发送语音时,会自动将语音数据和对应的原始文本进行缓存。

当机器人接收到自己发送的语音消息时,会优先从缓存中直接读取文本,从而跳过调用ASR(自动语音识别)服务的步骤。

此项优化可以:
- 节省不必要的ASR资源开销和费用。
- 保证对机器人自身语音100%的识别准确性。
- 提升对自身消息的响应处理速度。
This commit is contained in:
tt-P607
2025-10-26 01:14:23 +08:00
parent 3ea56c55f1
commit c61cc19eb6
3 changed files with 96 additions and 9 deletions

View File

@@ -0,0 +1,42 @@
"""
自我语音缓存模块
用于在机器人发送TTS语音后临时存储其原始文本
以便在接收到该语音消息时,能够直接获取文本内容,
避免不必要的自我语音识别。
"""
import hashlib
from typing import Dict
# 一个简单的内存缓存,用于将机器人自己发送的语音消息映射到其原始文本。
# 键是语音base64内容的SHA256哈希值。
_self_voice_cache: Dict[str, str] = {}
def get_voice_key(base64_content: str) -> str:
"""为语音内容生成一个一致的键。"""
return hashlib.sha256(base64_content.encode('utf-8')).hexdigest()
def register_self_voice(base64_content: str, text: str):
"""
为机器人自己发送的语音消息注册其原始文本。
Args:
base64_content (str): 语音的base64编码内容。
text (str): 原始文本。
"""
key = get_voice_key(base64_content)
_self_voice_cache[key] = text
def consume_self_voice_text(base64_content: str) -> str | None:
"""
获取并移除机器人自己发送的语音消息的原始文本。
这是一个一次性操作,获取后即从缓存中删除。
Args:
base64_content (str): 语音的base64编码内容。
Returns:
str | None: 如果找到则返回原始文本否则返回None。
"""
key = get_voice_key(base64_content)
return _self_voice_cache.pop(key, None)