yk.camelcase.work

Нещодавні роботи

Нещодавні продукти, створені від початку до кінця. Кожен запис називає інженерне рішення, яке його сформувало, а не перелік функцій.

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

Veranda Dialogues - Вебсервіс для мовної практики та іспитів

Veranda Dialogues - це вебсервіс для практики іноземної мови в живому діалозі з ШІ-співрозмовником, а також дедалі більший набір незалежних модулів вправ - картки з інтервальним повторенням, тренажери порядку слів і займенників, режими навчання на основі зображень і текстів та повноцінний режим іспиту. Режим іспиту генерує повні завдання з аудіювання й читання з аудіо та буклетами для друку, унікальні для кожної картки. Основні інженерні зусилля пішли не на генерацію контенту, а на те, щоб згенерованому контенту можна було довіряти настільки, аби його друкувати й оцінювати.

Проблема

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

Exam paper generationFastAPI, CeleryGenerated-item verificationLLM-as-judgeStatistical quality gatesSpaced repetitionper-mode SM-2Speech synthesis routingper-feature enginesInterface localization17 locales

Архітектура

  • Перевіряльник розв'язує, а не валідує. Коли модель бачила ключ відповідей і мала сказати, чи він правильний, вона раціоналізувала зіпсовані завдання й пропускала їх. Коли ж її попросили відповісти на запитання наосліп і перелічити всі обґрунтовані варіанти, вона виявила кожне з них; вердикт потім механічно випливає з її вибору.
  • Консервативність лише в один бік. Хибне відхилення знищує справне завдання, тоді як хибне прийняття лише зберігає статус-кво, тому кожен шлях помилки - недоступний провайдер, некоректна відповідь моделі, відповідь поза діапазоном - повертає «пройдено», а для відхилення потрібні і названий дефект, і висока заявлена впевненість.
  • Обмеження мають жити в коді. Рядок у промпті, що обмежував, як часто одна граматична категорія може повторюватися в пропусках, був лише рекомендацією і тихо ігнорувався. Тепер модель оголошує категорію для кожного пропуску, а сервер відхиляє весь набір, якщо розкид надто вузький.
  • Тайм-аути, що вже дійшли. Тайм-аут читання означає, що запит дійшов до рушія і генерація ще триває; повторна спроба запускає дубльоване завдання на машині, яка обробляє лише одне за раз. Тепер такі збої завершуються швидко й поодинці, а генерація натомість серіалізована.
  • Окремі екрани замість спільних розгалужень. Додавання другого формату іспиту через розгалуження в робочому коді ставило під загрозу формат, яким учні вже користувалися, тому новий отримав власний сервіс і власне дерево екранів за явним списком того, чого не можна чіпати, з перевіркою через diff.

Editron

Сервіс трансформації тексту за принципом API-first. Власний вебредактор - це клієнт того самого публічного API, якому заборонено його обходити, - саме це тримає інтеграційну поверхню чесною; рушій обробки можна замінити за одним внутрішнім контрактом, мультитенантність, API-ключі, квоти й облік використання закладено з самого початку, а також є опублікований TypeScript SDK.

Lernklang

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

Herald

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

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