Svitom

Оновлено 28 жовтня 2026

Що стоїть за каталогом Svitom

За каталогом груп українців за кордоном Svitom (svitom.org) стоїть Meridian, наша система обробки даних із багатоступеневими перевірками. Тут про те, як вона влаштована, як ми працюємо з мовними моделями, які дослідження стоять за рішеннями та що показують цифри проєкту.

Що таке Meridian

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

Назву ми взяли з географії. Меридіан це лінія на мапі від полюса до полюса. За меридіанами визначають, де саме лежить точка на земній кулі. Так само Meridian знаходить для кожної групи її місце на мапі, а розкидані по різних країнах українські спільноти зводить в одну систему координат.

Шлях каталогу

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

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

Перевірки ми передали мовним моделям, а робота над промптами стала окремим напрямом. Розробка одного промпту може тривати від кількох днів до кількох тижнів та забирати десятки годин. Це правки, дослідження, заміри шуму відповідей та повторні перевірки на тих самих даних.

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

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

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

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

Як ми працюємо

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

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

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

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

Що ми досліджуємо

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

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

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

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

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

Шумом ми називаємо випадки, коли той самий запит з тими самими даними та тим самим промптом дає різні відповіді. Причин кілька. Промпт може не покривати якийсь випадок, тоді в моделі з’являються сумніви. Даних про групу може бракувати. А ще є власний шум моделі, який майже неможливо прибрати. У наших задачах він зазвичай не перевищує 1 %, а на простіших перевірках ще нижчий.

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

На ранніх редакціях визначення місця повторний прогін змінював відповідь у 15 % випадків. Тепер такого вже немає. У новому поколінні перевірок ми уточнили вказівки в промптах, тож на тих самих даних модель упевненіше дає ту саму відповідь. Промпт, що визначає список міст та країн групи, на повному обсязі даних дає близько 1,7 % шуму. Ця цифра рахує відповіді, що змінилися під час повторного прогону, помилок вона не рахує. Як ми міряємо шум, ми розповіли окремо.

Мовні моделі дорогі, тому ми постійно оптимізуємо їхнє використання. Що саме перевіряє система, ми розповіли в матеріалі «Як ми знаходимо й перевіряємо спільноти».

Обробка й надійність

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

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

  • Багатогодинна обробка після збою продовжується з місця зупинки.
  • Будь-який процес можна зупинити без втрати зробленого.
  • Технічний збій не стає рішенням про групу.
  • У робочій обробці одна й та сама перевірка не виконується двічі.
  • Про кожне рішення відомо, яка версія перевірки його ухвалила.
  • Нова версія перевірок не ламає те, що вже показує сайт.

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

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

Сайт і Meridian

Сайт svitom.org та Meridian це дві окремі системи, розділені архітектурно. Meridian обробляє й перевіряє групи, а сайт показує готовий результат.

Безпеку сайту ми перевіряємо окремими аудитами, а видимість у пошуку та у відповідях AI-асистентів відстежуємо за даними пошукових систем.

Довідник місць

Щоб розпізнати місто в назві групи, потрібен довідник місць. Ми взяли за основу GeoNames (відкривається в новій вкладці), відкритий довідник, яким користується багато подібних проєктів, та доопрацювали його під свої задачі.

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

Частину назв ми виправили, бо вони суперечили звичному для людей написанню. Багатьом містам ми додали українське написання. Тож наш довідник схожий на оригінал, але має чимало власних змін. Дані GeoNames поширюються за ліцензією CC BY 4.0 (відкривається в новій вкладці), ми використовуємо їх у зміненому вигляді.

Проєкт у цифрах

Цифри нижче стосуються лише Meridian, тобто серверної частини проєкту. Сайт сюди не входить. Дані станом на 28 жовтня 2026 року.

65 000+Рядків коду системи

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

55 000+Рядків коду тестів

Це 7 700+ автоматичних тестів. Після кожної зміни вони перевіряють, чи не зламалося в системі щось із того, що вже працює.

300+Технічних документів

Архітектура, правила та рішення описані в Markdown. Без документації в системі такого розміру неможливо розібратися.

280 000+Рішень перевірок

З них 220 000+ ухвалили мовні моделі, решту правила в коді. Про кожне рішення відомо, яка версія перевірки його ухвалила.

Що лишилося за кадром

Ця сторінка не повний технічний розбір Meridian. Ми використовуємо багато бібліотек, експериментальних можливостей мовних моделей, а також прийомів та тонкощів, які довго вивіряли. Кожен такий прийом коштував тижнів вимірювань, а разом вони визначають, скільки коштує та наскільки надійна кожна перевірка. Дані теж підкинули чимало сюрпризів, кожен із яких довелося розібрати.

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

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