Smart Garden
An AI voice sales manager for the Smart Garden residential development. Callers talk to Anya: she answers in a natural Russian voice, helps pick an apartment, and steers the conversation toward a lead — a showing at the sales office or a callback from a specialist.Голосовой ИИ-продавец жилого комплекса Smart Garden. Звонящие разговаривают с Аней: она отвечает живым русским голосом, помогает подобрать квартиру и ведёт разговор к лиду — показу в офисе продаж или обратному звонку специалиста.
We built an API that shows which apartments are actually available, so the agent checks the real inventory before recommending anything. We also loaded it with all the data the real sales managers have. So yes, this one really does replace them.Мы сделали API с реальным наличием квартир, поэтому агент сверяется с ним прежде чем что-то советовать. А ещё загрузили в него все данные, которыми владеют настоящие менеджеры. Так что да — он их правда заменяет.
Under the hood is a custom voice-agent core built on ports and adapters: STT, LLM, and TTS are interchangeable, and the conversation streams over WebRTC. You can interrupt Anya mid-sentence — she stops and listens. A lead only exists once it's captured through a structured tool call: her saying “noted” out loud doesn't count.Под капотом — собственное ядро голосового агента на портах и адаптерах: STT, LLM и TTS взаимозаменяемы, разговор идёт потоком по WebRTC. Аню можно перебить на полуслове — она замолкает и слушает. Лид существует только после того, как его зафиксировал структурный вызов инструмента: сказанное вслух «записал» не считается.
I really like how this manager turned out. Honestly, I don't think I've heard an AI that sounds better yet.Этот продавец мне очень нравится. Честно: лучше звучащего ИИ я пока не слышал.
Favorite detailsЛюбимые детали
STT models have a funny and well-known bug: when the user stays silent, they can invent a phrase. We kept getting “Thanks for watching” and even “Озвучено Dima Torzok” from complete silence. The pipeline filters these hallucinations out, so the agent asks again instead of answering something nobody said.У STT-моделей есть смешной и известный баг: когда пользователь молчит, они могут придумать фразу. В полной тишине мы стабильно получали «Thanks for watching» и даже «Озвучено Dima Torzok». Пайплайн отфильтровывает такие галлюцинации, поэтому агент переспрашивает, а не отвечает на то, чего никто не говорил.
Teaching GigaChat to call tools was an adventure of its own. It silently ignores the OpenAI format: the model wrote the call straight into the reply text, the speech synthesis read it out to the caller, and the lead was lost. The adapter translates calls into Sber's native dialect and scrubs anything call-shaped out of the speech. One iron rule came out of it: a tool only runs through the typed protocol; call-shaped prose never does.Отдельное приключение — научить GigaChat вызывать инструменты. Он молча игнорирует OpenAI-формат: модель писала вызов прямо в текст ответа, синтез речи озвучивал его клиенту, а лид терялся. Адаптер переводит вызовы в родной диалект Сбера и вычищает из речи всё, что похоже на внутренний синтаксис. И железное правило: инструмент исполняется только через типизированный протокол; текст, похожий на вызов, — никогда.
While the apartment search runs, the pause is covered by a pre-synthesized “Let me check”. And if the live pipeline goes down, a cached recovery line plays — it works even when everything else is broken.Пока идёт поиск квартир, паузу закрывает заранее синтезированное «Дайте уточнить». А если живой пайплайн упал, проигрывается кешированная фраза восстановления — это работает, даже когда всё остальное сломалось.
StackСтек
Python, WebRTC, streaming STT/LLM/TTS adapters, deterministic compliance checks — robot disclosure, stop phrases, quiet hours.Python, WebRTC, потоковые адаптеры STT/LLM/TTS, детерминированные проверки регламента — объявление робота, стоп-фразы, тихие часы.