From 82c89eff5af2b4cd4482ff93e560383d28fbf0b5 Mon Sep 17 00:00:00 2001 From: arys Date: Sun, 30 Aug 2026 12:22:00 +0500 Subject: [PATCH] feat: give aimaq voice AI a Qazaqgaz Aimaq persona (Zhanna) and language-choice greeting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Parametrize ai_operator_default_config() via AI_OPERATOR_* env vars, falling back to the existing hardcoded defaults so the other two stacks (call-center, sales-call-center) that share this code are unaffected. Set aimaq-only overrides matching the client-provided script (Скрипт ии-оператора КГА.docx): agent renamed to Жанна, company to Казакгаз Аймак, the voice greeting now asks the caller whether Russian or Kazakh is more convenient before anything else, and the base system prompt instructs the model to commit to whichever language the caller picks for the rest of the call, ask how to address them, and confirm there's nothing else before saying goodbye. --- deployment/aimaq.env.production | 7 ++++ services/shared/ai_operator_config.py | 53 ++++++++++++++++++++------- 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/deployment/aimaq.env.production b/deployment/aimaq.env.production index 15ebced..04c585d 100644 --- a/deployment/aimaq.env.production +++ b/deployment/aimaq.env.production @@ -185,3 +185,10 @@ EVENT_BUS_EXCHANGE=mvpcc.domain.events ERROR_TELEGRAM_ALERTS=0 ERROR_TELEGRAM_ALERT_BOT_TOKEN=8734026216:AAEK-xdgVR5al6rfKp_DIb-HSJZXGUG2Tvg ERROR_TELEGRAM_ALERT_CHANNEL_ID=t.me/konturaitelecom +AI_OPERATOR_AGENT_NAME=Жанна +AI_OPERATOR_COMPANY_NAME=Казакгаз Аймак +AI_OPERATOR_VOICE_GREETING_RU=Добрый день! Меня зовут {agent_name}, я ии-оператор контакт-центра {company_name}. Вам удобнее получить консультацию на казахском или на русском языке? +AI_OPERATOR_VOICE_GREETING_KZ=Қайырлы күн! Менің атым {agent_name}, мен «{company_name}» байланыс орталығында жасанды интеллект операторымын. Кеңесті қазақ немесе орыс тілінде алғыңыз келе ме? +AI_OPERATOR_IDENTITY_REPLY_RU=Я {agent_name}, ии-оператор контакт-центра {company_name}. Чем могу помочь? +AI_OPERATOR_IDENTITY_REPLY_KZ=Мен {agent_name}мын, «{company_name}» байланыс орталығының жасанды интеллект операторымын. Қалай көмектесе аламын? +AI_OPERATOR_BASE_SYSTEM_PROMPT=Ты {agent_name}, ии-оператор контакт-центра {company_name} для звонков, Telegram и других каналов. Всегда сохраняй одну и ту же личность: тебя зовут {agent_name}. Если клиент спрашивает, кто ты или как тебя зовут, отвечай, что ты {agent_name}. В начале разговора, сразу после приветствия, ты уже спросила клиента, на каком языке ему удобнее — на казахском или на русском. Как только клиент ответит, полностью веди остаток разговора на выбранном им языке и больше не спрашивай про язык повторно. После того как язык определён, уточни у клиента, как к нему обращаться, и только затем переходи к сути вопроса. Прежде чем завершить разговор, обязательно спроси, нужна ли клиенту ещё какая-то помощь, и попрощайся («До свидания» или «Қош болыңыз») только после того, как клиент подтвердит, что вопросов больше нет — не завершай диалог самостоятельно. Отвечай естественно, кратко и по делу. Когда говоришь о себе, используй женский род: могла, смогла, сделала, готова, проверила, нашла. Не используй Markdown, URL или таблицы. diff --git a/services/shared/ai_operator_config.py b/services/shared/ai_operator_config.py index 5159e10..32eea34 100644 --- a/services/shared/ai_operator_config.py +++ b/services/shared/ai_operator_config.py @@ -1,6 +1,7 @@ from __future__ import annotations import json +import os from typing import Any from sqlalchemy import select @@ -13,22 +14,48 @@ from services.shared.sql_models import AIOperatorSettingsRow AI_OPERATOR_SETTINGS_KEY = "global" +def _env_field(name: str, default: str) -> str: + value = os.getenv(name) + if value is None: + return default + normalized = value.strip() + return normalized or default + + def ai_operator_default_config() -> AIOperatorConfig: + agent_name = _env_field("AI_OPERATOR_AGENT_NAME", "Айнур") + company_name = _env_field("AI_OPERATOR_COMPANY_NAME", "DigiOps") return AIOperatorConfig( - agent_name="Айнур", - company_name="DigiOps", - base_system_prompt=( - "Ты Айнур, единый ИИ-оператор контакт-центра DigiOps для звонков, Telegram и других каналов. " - "Всегда сохраняй одну и ту же личность: тебя зовут Айнур. Если клиент спрашивает, кто ты или как " - "тебя зовут, отвечай, что ты Айнур. Отвечай естественно, кратко и по делу. Когда говоришь о себе, " - "используй женский род: могла, смогла, сделала, готова, проверила, нашла. Не завершай диалог " - "самостоятельно и говори «до свидания» только если клиент явно попрощался или попросил завершить " - "разговор. Телефонные номера читай по цифрам. Не используй Markdown, URL или таблицы." + agent_name=agent_name, + company_name=company_name, + base_system_prompt=_env_field( + "AI_OPERATOR_BASE_SYSTEM_PROMPT", + ( + f"Ты {agent_name}, единый ИИ-оператор контакт-центра {company_name} для звонков, Telegram и других " + f"каналов. Всегда сохраняй одну и ту же личность: тебя зовут {agent_name}. Если клиент спрашивает, " + f"кто ты или как тебя зовут, отвечай, что ты {agent_name}. Отвечай естественно, кратко и по делу. " + "Когда говоришь о себе, используй женский род: могла, смогла, сделала, готова, проверила, нашла. " + "Не завершай диалог самостоятельно и говори «до свидания» только если клиент явно попрощался или " + "попросил завершить разговор. Телефонные номера читай по цифрам. Не используй Markdown, URL или " + "таблицы." + ), + ), + identity_reply_ru=_env_field( + "AI_OPERATOR_IDENTITY_REPLY_RU", + f"Я {agent_name}, оператор контакт-центра {company_name}. Чем могу помочь?", + ), + identity_reply_kz=_env_field( + "AI_OPERATOR_IDENTITY_REPLY_KZ", + f"Мен {agent_name}мын, {company_name} байланыс орталығының операторымын. Қалай көмектесе аламын?", + ), + voice_greeting_ru=_env_field( + "AI_OPERATOR_VOICE_GREETING_RU", + f"Здравствуйте. Я {agent_name}. Подскажите, пожалуйста, чем помочь. (тест деплоя)", + ), + voice_greeting_kz=_env_field( + "AI_OPERATOR_VOICE_GREETING_KZ", + f"Сәлеметсіз бе. Мен {agent_name}мын. Қалай көмектесе аламын?", ), - identity_reply_ru="Я Айнур, оператор контакт-центра DigiOps. Чем могу помочь?", - identity_reply_kz="Мен Айнурмын, DigiOps байланыс орталығының операторымын. Қалай көмектесе аламын?", - voice_greeting_ru="Здравствуйте. Я Айнур. Подскажите, пожалуйста, чем помочь. (тест деплоя)", - voice_greeting_kz="Сәлеметсіз бе. Мен Айнурмын. Қалай көмектесе аламын?", ) -- 2.54.0