Перейти до основного вмісту
megapromotingПоговорімо

Експертиза · Транскрипція та переклад

Мова в текст, українською та російською, зі згодою, записаною до першої секунди аудіо.

Ми транскрибуємо аудіо в реальному часі або з файлу, перекладаємо між румунською та російською в розмовах із клієнтами й надаємо текст із часовими позначками, аудіоекспортом і слідом згоди. Розпізнавання мовлення ми запускаємо через постачальників, через наш gateway; власна модель румунської мови — це дослідження, а не продукт.

Вже збудованоDouă implementări proprii, ambele deschise și citate. Prima e o aplicație de transcriere în flux, cu backend Express de 3.378 de linii în 25 de fișiere și 37 de teste pe care le-am rulat azi — toate trec; ea conține partea pe care nimeni nu o construiește din entuziasm: o poartă de consimțământ care refuză captura când nu există acord înregistrat. A doua rulează în producție, la clienți reali: mesajele vocale primite pe canalele de mesagerie sunt transcrise, iar răspunsul scris de un operator în română este rescris în limba clientului înainte de a pleca. Ce NU intră în „delivered” și e scris ca atare în pagină: modelul propriu de recunoaștere și sinteză în română este cercetare — nu are demonstrație publică, nu are interfață de programare, iar pe acuratețe în română pierde față de sistemele comerciale mari. Serviciul se vinde pe ce rulează, nu pe ce studiem.

Транскрипція здається вирішеною проблемою, доки не застосуєш її до румунської, з двома співрозмовниками, що перебивають одне одного, цифрами, сказаними швидко, і клієнтом, який переходить на російську посеред фрази. Тоді з’являються три справжні проблеми: яку модель обрати для мови перед вами, як зрозуміти, де закінчується черга мовлення, і хто дав вам дозвіл на запис. Ми займаємося всіма трьома, і останню розглядаємо як проблему коду, а не як абзац політики.

У нашому застосунку потокової транскрипції браузер ніколи не отримує ключ постачальника. Він просить у бекенду одноразовий токен, за замовчуванням дійсний чверть години, з яким відкриває з’єднання транскрипції; маршрут, що видає токен, закритий за замовчуванням і може бути відкритий лише через явне налаштування поза продукцією, саме тому, що це маршрут, на якому витрачаються гроші. Поверх сирої транскрипції працює аналіз на моделі мови, зі списком резервних моделей у порядку, щоб недоступність однієї не зупинила сеанс.

Шлюз згоди — це частина, до якої ми ставимося особливо. Перш ніж прийняти шматок аудіо, сервер запитує рядок невідкликаної згоди для відповідної сесії. Якщо його немає, відповідає 451 і повідомленням українською. Якщо база даних не відповідає, він усе відхиляє — 503, а не «пропускає далі». Уже перевірені сесії проходять через кеш на десять хвилин, щоб короткий збій не переривав запис, що триває. Це написано так, щоб це не можна було обійти через помилку конфігурації.

Частина, яка вже є в клієнтів, інша і менш ефектна: на каналах месенджерів отримане голосове повідомлення стає текстом, а мову обирають шляхом голосування за останніми вісьмома повідомленнями розмови, а не вгадуванням з аудіо. У зворотному напрямку, коли колега відповідає румунською, його текст переписується мовою клієнта зі строгими інструкціями — не додає інформації, не вигадує цін чи строків, не суперечить оператору, і трактує текст оператора суто як дані для передавання, ніколи як інструкції для моделі.

Що входить

Робота, за складовими

Згода, перевірена до аудіо

Шлюз згоди вимагає неревокований рядок у реєстрі погоджень для поточної сесії. Без нього: 451, із повідомленням румунською. Коли база даних недоступна: 503, тобто відмова, а не пропуск. Уже перевірені сесії проходять через кеш на 10 хвилин, щоб перевірка не зверталася до бази з кожним фрагментом аудіо.

Одноразовий токен, ключ залишається на сервері

Сторінка запитує у backend токен для транскрипції в реальному часі, дійсний за замовчуванням 900 секунд, і з ним відкриває з’єднання до постачальника. Ключ облікового запису ніколи не потрапляє в браузер. Запит до постачальника має timeout 30 секунд, а його перевищення повертає явну помилку, а не нескінченне очікування.

Потокова транскрипція, з мовою, обраною з контексту

У production, на каналах обміну повідомленнями, мова голосового повідомлення визначається голосуванням за останніми восьми повідомленнями розмови — російська, якщо переважає, інакше румунська — і лише потім запускається розпізнавання, з явною передачею мовної підказки. Формат файлу розпізнається за першими 12 байтами, а не за розширенням, бо голосові повідомлення на каналах Meta приходять як `ogg`, незалежно від того, як їх названо.

Переклад оператор → клієнт, із межами, записаними в prompt

Коли колега відповідає румунською у внутрішньому ланцюжку, повідомлення для клієнта переписується мовою клієнта. Правила є явними в коді: не додає інформації, не вигадує деталей, цін, годин чи обіцянок, не суперечить оператору, а текст оператора трактується строго як дані для передачі, ніколи як інструкції для моделі — захід проти injection of commands, а не формулювання стилю.

Аналіз над transcript, із резервними моделями в порядку

Поверх отриманого тексту запускається аналіз мовною моделлю, з упорядкованим списком альтернативних моделей у коді, щоб недоступність знижувала якість, а не зупиняла сесію. Модель аналізу можна змінити з configuration, без повторного введення в експлуатацію.

Експорт аудіо у трьох форматах, з явним збоєм

WAV створюється без зовнішніх інструментів. FLAC і MP3 потребують `ffmpeg`; якщо його немає, сервер відповідає 501 із причиною, а якщо процес зависає, його зупиняють через 60 секунд і повертають 504 із першими двома тисячами символів із помилки. Експорт, що не вдався, каже чому.

Окремий облік квоти та вартості

Витрачені хвилини віднімаються атомарно через процедуру в базі даних, а вартість записується в окремий реєстр, на постачальника. Це дві різні речі, і ламаються вони по-різному: якщо рядок вартості не можна прив’язати до сесії, його зберігають непов’язаним, щоб інформація про вартість не загубилася.

Три пороги трафіку, на користувача, а не на адресу

Видача токенів, аналіз і експорт мають окремі ліміти, а ключем обліку є автентифікований користувач, коли він є, а не IP-адреса — інакше один агресивний користувач за спільною мережею вичерпав би квоту всіх своїх колег.

Транскрипція на каналах обміну повідомленнями, в існуючому потоці

Голосове повідомлення, отримане від клієнта, стає текстом у тій самій розмові, без того, щоб хтось відкривав інший інструмент. Розпізнавання та синтез проходять через наш gateway, а не безпосередньо до постачальника, тож споживання відображається в тому ж місці, що й решта.

Як це виглядає

Шлях, крок за кроком.

01

Визначаємо право на запис, до будь-якого коду

Хто говорить, хто поінформований, хто погоджується, хто зберігає запис і скільки. Результат — не документ, який лежить у шухляді, а конфігурація порога: що саме означає «наявна згода» у ситуації клієнта і що стається, коли її немає.

02

Вибираємо ланцюжок за мовою та умовами звуку

Румунська й російська поводяться по-різному, так само як і настільний мікрофон порівняно зі стисненим телефонним дзвінком. Вибір моделі, мовного індексу та стратегії сегментації робиться на зразках із реального матеріалу клієнта, а не на чистій демонстрації.

03

Збираємо потік докупи і навмисно його ламаємо

Токен, з’єднання, транскрипція, аналіз, експорт. Потім перевіряємо випадки, які справді трапляються: відсутня згода, база даних упала посеред сесії, токен закінчився, `ffmpeg` відсутній, постачальник недоступний. Кожен має дати повідомлення, що саме зламалося.

04

Передаємо з увімкненими лічильниками й лімітами

Облік хвилин, журнал витрат, пороги трафіку на користувача і журнали. Без них перший інцидент обговорюється з пам’яті.

IntrareVerificareDeciziePublicareNimic nu trece mai departe neverificat.ORDINEA E ARGUMENTUL
Cinci pași, în ordinea în care se execută: acordul verificat în registru (fără el, drumul se oprește aici); jetonul de unică folosință emis de server, cu cheia rămasă pe server; transcrierea în flux la furnizor; analiza peste transcript, cu modele de rezervă în ordine; exportul textului și al audio-ului. Primul pas e singurul care poate opri tot restul, și e desenat ca poartă, nu ca etapă.

Дані

Чого торкаємося, де воно лежить і скільки лишається

Запитання, які ставить кожен, у кого є відповідальний за захист даних, — поставлені тут раніше, ніж їх поставить він.

Реєстр згод
Один рядок на сесію, з робочим простором, ідентифікатором сесії та моментом відкликання, порожній, поки згода чинна. Перевірка шукає саме відсутність відкликання. Це єдине джерело істини для права на захоплення аудіо, і до нього звертаються перед кожною сесією, а не лише під час реєстрації.
Аудіо, transcript і аналіз
Сире аудіо проходить через з’єднання для транскрипції до постачальника; у нас зберігаються transcript, часові мітки та результат аналізу, а також експорти, яких просить користувач. Що саме зберігається і як довго, визначається для проєкту до першого запису — для ради, медичної наради й комерційного дзвінка відповіді не однакові.
Куди йде аудіо і кому
До постачальників розпізнавання мовлення та до моделі аналізу, через наш gateway. Їхній список записується в контракті до запуску, з назвою кожного, бо неповідомлений субпроцесор — це юридична проблема, а не технічна пропуск.
Реєстр споживання
Спожиті хвилини списуються атомарно в базі даних, а вартість записується окремо, по сесії та по постачальнику. Це два окремі реєстри саме для того, щоб помилка в одному не фальсифікувала інший.
Чого ми не торкаємося
Ми не навчаємо моделі на записах клієнта і не використовуємо вихід постачальника голосу для побудови чи тестування конкуруючої моделі — це прямо заборонено в умовах постачальника, якого ми використовуємо, і це межа, яку ми дотримуємо навіть там, де це було б технічно зручно.

Випадок

Сесія, яка не запускається, і чому це правильна поведінка

Ситуація

Сценарій наради з кількома учасниками, у якому транскрипція мала початися з браузера, а запис — бути збережений. Ситуація, в якій ламається більшість інструментів транскрипції: хтось натискає «записати» до того, як згода учасників була десь зафіксована.

Що ми збудували

Я поставив перевірку згоди на шлях запиту, а не на екран попередження. Сервер шукає рядок незвільненої згоди для поточної сесії перед тим, як прийняти перший фрагмент аудіо. Я навмисно описав і поведінку при аварії: якщо база даних, що зберігає згоди, не відповідає, запит відхиляється з 503, а не пропускається. Уже перевірені сесії залишаються десять хвилин у кеші, щоб короткий збій не переривав поточний запис. Шлях, який видає жети постачальнику, за замовчуванням закритий, з можливістю відкриття лише через явне налаштування поза продукцією.

Що вийшло

Без зафіксованої згоди захоплення повертає 451 з повідомленням румунською мовою, а подію журналюють із сесією та робочим простором. Поведінка покрита тестами, які запускаються без бази даних, через ін’єкцію перевірки. Суїт бекенду має 37 тестів; під час сьогоднішнього запуску всі проходять.

Чого цей випадок не каже

Застосунок не опублікований — він працює в нас, не має сторінки, де можна зареєструватися, а право записувати певну розмову залишається за клієнтом: ми технічно його примушуємо, а не надаємо. І ще одне обмеження: шлюз перевіряє наявність згоди, а не її юридичну якість. Якщо текст згоди погано написаний, код застосує його буквально.

Питання

Про що нас питають, перш ніж зателефонувати

Якими мовами ви транскрибуєте?

Ми працюємо з румунською та російською, бо саме в цих мовах виникають наші реальні проблеми і ми можемо перевіряти їх на власному матеріалі. Інші мови технічно можливі через тих самих постачальників, але перед тим як щось обіцяти, ми робимо пробу на ваших записах — мова працює або не працює залежно від аудіо, а не від списку на сторінці постачальника.

У вас є власна модель розпізнавання мовлення румунською?

У дослідженні, не в продукті, і важливо не плутати ці дві речі. Власний напрям не має публічної демонстрації, не має інтерфейсу програмування і не має телефонії, а за точністю розпізнавання румунською наші вимірювання показують, що ми поступаємося великим комерційним системам. Ми публікуємо це, бо це наш висновок, отриманий на власному тестовому стенді. Сервіс, який ми продаємо сьогодні, працює на постачальниках, через наш шлюз.

Хто має право записувати розмову і що ви робите, якщо такого права немає?

Право визначається для кожного випадку окремо, разом із клієнтом, до встановлення — це не те, що ми можемо передати. Наше завдання — технічно це примусити: без зареєстрованої згоди для поточної сесії сервер відхиляє захоплення з 451 і повідомленням румунською мовою. Якщо база даних, що зберігає згоди, не відповідає, тоді теж відхиляє, з 503. Немає налаштування, яке перетворить відсутність згоди на тихий прохід.

Мій ключ від постачальника потрапляє в браузер?

Ні. Сторінка запитує у бекенда одноразовий жетон для сесії транскрипції, дійсний за замовчуванням 900 секунд, і ним відкриває з’єднання. Ключ облікового запису залишається на сервері. Крім того, шлях, який видає жетони, закритий за замовчуванням і може бути відкритий лише через явне налаштування поза продукцією, бо це шлях, який витрачає гроші.

Наскільки точна транскрипція?

Це більше залежить від аудіо, ніж від моделі: мікрофон, накладання, цифри, власні назви, фоновий шум. Ми не даємо вам відсоток, поки не почуємо ваш матеріал, бо відсоток, узятий з картки продукту, нічого не каже про ваші зустрічі. Ми робимо пробу на реальних записах, із помилками, викладеними на стіл — зазвичай ламається на цифрах і назвах, а не на фразах.

Ви перекладаєте розмови в реальному часі між оператором і клієнтом?

Так, і це вже працює в продукції в одному напрямку: колега пише відповідь румунською, а повідомлення йде клієнтові мовою клієнта. Правила в коді жорсткі — без доданої інформації, без вигаданих цін чи термінів, без суперечності оператору. Зворотний напрямок, від клієнта до оператора, сьогодні вирішується через транскрипцію голосових повідомлень; автоматичний переклад тексту клієнта для оператора не увімкнений усюди, і ми кажемо це наперед, а не після.

Які формати аудіо ви приймаєте і що я отримую назад?

Формат розпізнається за вмістом файлу, а не за розширенням — WAV, OGG, MP3 і M4A обробляються явно, а голосові повідомлення з месенджер-каналів зазвичай приходять як OGG. Ви отримуєте транскрипт, аналіз, якщо він потрібен, і експортоване аудіо: WAV без залежностей, FLAC і MP3, якщо `ffmpeg` є на сервері. Якщо його немає, сервер каже про це окремим кодом, а не завершується загальною помилкою.

Ви використовуєте наші записи, щоб тренувати ваші моделі?

Ні. Крім того, ми не використовуємо вихід постачальників голосу для навчання чи тестування конкуруючої моделі — їхні умови використання прямо це забороняють, і ми їх дотримуємося також у нашому власному дослідницькому напрямі, де було б зручно цього не робити.

Що відбувається, коли постачальник транскрипції виходить з ладу посеред наради?

Сесію зупиняє помилка, яка називає причину, а не порожній екран. Для аналізу є впорядкований список резервних моделей у коді, тож там недоступність погіршує якість, а не зупиняє потік. Для розпізнавання мовлення в реальному часі ми не маємо автоматичної надлишковості між постачальниками, і це реальне обмеження, а не пропуск.

На чому ґрунтуються твердження вище (14 джерел)
  1. Termenii furnizorului de voce interzic antrenarea sau testarea unui model concurent pe ieșirea lorhttps://elevenlabs.io/use-policy · 2026-09-06

13 з них — це код і файли з наших репозиторіїв. Ми не публікуємо їхні назви чи номери рядків: разом, на одній сторінці, це надто точно описало б, як побудовані системи, які належать не лише нам. Ми проходимо їх разом із вами, у репозиторії, за запитом — перевірка залишається можливою, просто вона відбувається в розмові.

Що вам хотілося б налагодити?

Розкажіть про свій процес. Разом визначимо, що варто збудувати, що можна підключити і як перевіримо результат.

Поговорімо