feat: switch wake word to waltron
This commit is contained in:
@@ -21,6 +21,8 @@ from .config import (
|
||||
OPENROUTER_API_KEY,
|
||||
OPENROUTER_API_URL,
|
||||
OPENROUTER_MODEL,
|
||||
WAKE_WORD,
|
||||
WAKE_WORD_ALIASES,
|
||||
ZAI_API_KEY,
|
||||
ZAI_API_URL,
|
||||
ZAI_MODEL,
|
||||
@@ -29,15 +31,18 @@ from .config import (
|
||||
_HTTP = requests.Session()
|
||||
|
||||
# Системный промпт
|
||||
SYSTEM_PROMPT = """Ты — Александр, умный голосовой ассистент с человеческим поведением.
|
||||
_wake_word_aliases_text = ", ".join(WAKE_WORD_ALIASES)
|
||||
SYSTEM_PROMPT = f"""Ты — умный голосовой ассистент с человеческим поведением.
|
||||
Веди себя как живой человек: будь дружелюбным, естественным и немного эмоциональным, где это уместно.
|
||||
Твоя главная цель — помогать пользователю и поддерживать интересный диалог.
|
||||
Отвечай кратко и по существу, на русском языке.
|
||||
Избегай длинных списков, сложного форматирования и спецсимволов, так как твои ответы озвучиваются голосом.
|
||||
Пиши в разговорном стиле, как при живом общении, но не забывай о вежливости и правильности твоих ответов.
|
||||
ВАЖНО: Не используй в ответах панибратские или сленговые приветствия и обращения, такие как "Эй", "Хэй", "Слушай" в начале фразы и подобные."""
|
||||
ВАЖНО: Не используй в ответах панибратские или сленговые приветствия и обращения, такие как "Эй", "Хэй", "Слушай" в начале фразы и подобные.
|
||||
Тебя активируют словом "{WAKE_WORD}". Никогда не произноси это слово и его варианты ({_wake_word_aliases_text}) ни в каком ответе.
|
||||
Если пользователь спрашивает, как тебя зовут или как к тебе обращаться, отвечай нейтрально: "Я ваш голосовой ассистент"."""
|
||||
SYSTEM_PROMPT += (
|
||||
'\nROLE_JSON: {"name":"Александр","role":"умный голосовой ассистент",'
|
||||
'\nROLE_JSON: {"name":"голосовой ассистент","role":"умный голосовой ассистент",'
|
||||
'"language":"ru","style":["дружелюбный","естественный","краткий"],"format":"plain"}'
|
||||
)
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import re
|
||||
import pymorphy3
|
||||
from num2words import num2words
|
||||
from .config import WAKE_WORD, WAKE_WORD_ALIASES
|
||||
from .roman import roman_to_int
|
||||
|
||||
morph = pymorphy3.MorphAnalyzer()
|
||||
@@ -83,6 +84,10 @@ MONTHS_GENITIVE = [
|
||||
|
||||
# Время
|
||||
TIME_UNIT_LEMMAS = {"час", "минута", "секунда"}
|
||||
WAKE_WORD_BLOCKED_PATTERNS = [
|
||||
re.compile(rf"\b{re.escape(alias)}\b", flags=re.IGNORECASE)
|
||||
for alias in set(WAKE_WORD_ALIASES) | {WAKE_WORD.lower()}
|
||||
]
|
||||
|
||||
# Суффиксы порядковых
|
||||
_ORDINAL_SUFFIX_MAP = {
|
||||
@@ -419,6 +424,10 @@ def clean_response(text: str, language: str = "ru") -> str:
|
||||
flags=re.IGNORECASE | re.MULTILINE,
|
||||
)
|
||||
|
||||
# Запрет на произнесение wake word в любых ответах ассистента.
|
||||
for pattern in WAKE_WORD_BLOCKED_PATTERNS:
|
||||
text = pattern.sub("ассистент", text)
|
||||
|
||||
# Числа в слова
|
||||
if language == "ru":
|
||||
text = roman_numerals_to_words(text)
|
||||
|
||||
@@ -66,8 +66,17 @@ DEEPGRAM_API_KEY = os.getenv("DEEPGRAM_API_KEY")
|
||||
# --- Настройки активации голосом (Porcupine) ---
|
||||
# Ключ доступа PicoVoice
|
||||
PORCUPINE_ACCESS_KEY = os.getenv("PORCUPINE_ACCESS_KEY")
|
||||
# Wake word label and common ASR aliases.
|
||||
WAKE_WORD = "Waltron"
|
||||
WAKE_WORD_ALIASES = (
|
||||
"waltron",
|
||||
"voltron",
|
||||
"волтрон",
|
||||
"уолтрон",
|
||||
"валтрон",
|
||||
)
|
||||
# Путь к файлу модели ключевого слова (.ppn), который лежит в папке assets/models
|
||||
PORCUPINE_KEYWORD_PATH = BASE_DIR / "assets" / "models" / "Alexandr_en_linux_v4_0_0.ppn"
|
||||
PORCUPINE_KEYWORD_PATH = BASE_DIR / "assets" / "models" / "Waltron_en_linux_v4_0_0.ppn"
|
||||
# Чувствительность wake word (0..1). Выше = ловит легче, но больше ложных срабатываний.
|
||||
PORCUPINE_SENSITIVITY = float(os.getenv("PORCUPINE_SENSITIVITY", "0.8"))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user