Як я будував медичний довідник AI-агентами і що пішло не так з Google
На днях я відкрив Google Search Console, готуючись побачити приємне зростання. Але, на жаль, побачив дещо інше — проіндексована одна сторінка з двох з гаком тисяч. Перша думка була, що це глюк консолі.
Глюком це не виявилось — і це історія про те, як я місяцями будував багатоагентний захист від галюцинацій у медичному контенті, а вбив сайт найтупішою штукою, яку тільки можна уявити. Заодно про інженерну частину: як робити медичний довідник, коли в тебе немає ні команди, ні бюджету на редакцію (лікаря в штаті теж немає, до цього ще дійдемо).
Що взагалі за проєкт
У межах громадської організації «Ахімса Екосистем» я захотів зробити безкоштовний довідник лабораторних маркерів двома мовами, «Jey Здоров’я», плюс Telegram-бот, що пояснює завантажений бланк аналізів. Задача скромна: щоб людина прийшла на свої десять хвилин до лікаря з конкретними питаннями, а не як баран на заклання.
Текстів про феритин
Чому extraction, а не генерація
Модель нічого не пише «від себе». Вона лише розкладає чуже по нашій структурі. Кожне суттєве твердження прив’язане до джерела з allowlist (NIH/MedlinePlus, StatPearls, клінічні настанови профільних товариств, каталоги лабораторій як-от Mayo Clinic Labs чи ARUP). Референсні діапазони модель взагалі не генерує: вони підтягуються з окремої версіонованої бази. Немає прив’язки до дозволеного джерела, немає твердження.
Звучить нудно, зате скейлиться без клініциста в кожному циклі.
Конвеєр і карантин
Кожна сторінка йде через ланцюг, де жоден крок не вірить попередньому на слово:
- генерація чернетки з підписаного профілю джерел;
- детерміновані скрипти-гейти: числа збігаються з базою, одиниці на місці, дисклеймери є, заборонена діагностична лексика відсутня, кожне твердження має тег джерела;
- незалежні
LLM-рецензенти, серед яких обов’язково модель іншого сімейства, ніж генератор (у моделей одного вендора занадто схожі сліпі зони: Claude ловить те, що не бачить GPT, і навпаки); - бенчмарк-гейт.
А зверху цього всього одне правило: будь-який збій означає карантин — упав скрипт, затаймаутив рецензент, застарів бенчмарк, зник лог або прийшов частковий вивід. Дратує неймовірно, зате жодна «майже готова» сторінка не проскакує в прод.
Тут треба сказати прямо: живий лікар поки жодної сторінки не вичитував. Це наступний етап, і я так і пишу в методології на сайті. Що система гарантує вже зараз: вона структурує тільки те, що є в цитованих джерелах, і мовчки відмовляється публікувати решту.
Google сказав ні
Далі почалась зовсім інша історія. Точніше, про те, як новий медичний домен у пошук НЕ виходить.
Повернемось до тієї одиниці в Search Console. Ручних санкцій немає, тобто це чисто алгоритмічне рішення: сайт не вартий краулінгу. Crawl demand упав майже до нуля.
І тут я зробив помилку, яка коштувала мені
- ~85% URL були комбінаторним шаблоном з майже ідентичним текстом. Це саме те, що пошуковики 2026 року трактують як scaled content abuse. Нові YMYL-домени за це кладуть під ніж першими.
- Технічне сміття: на російськомовні сторінки вилазив неперекладений український службовий текст (класика жанру, «Читати далі» посеред російської сторінки, тільки гірше і в багатьох місцях). Для класифікатора якості це виглядає як зламаний машинний генератор. У медичній тематиці це вирок.
Тобто окремо взята стаття була нормальна. Ламала все структура: тисячі клонів плюс мовне сміття у видачі.
Лагодимо сайт тими ж агентами
Найсмішніше, що виправляв я це тими самими агентами, які цей контент і нагенерували.
Спочатку консолідація. Тисячі near-duplicate сторінок (окремі band-сторінки під кожен діапазон маркера, окремі калькулятори) звів
Потім переклад. Маркери без російської версії доперекладав прогоном із 4 перекладачів (дешевша модель) і 4 незалежних рецензентів потужнішої, що вичитували одне: чи не додав і не пом’якшив перекладач жодного клінічного твердження, і чи на місці всі числа з одиницями та посилання. Плюс окремий прохід, що вичищав усі неперекладені службові рядки. Кожну ключову зміну перед деплоєм проганяв через код-рев’ю зовнішньою моделлю (Codex на базі GPT проти моїх Claude-рецензентів, знову різні сімейства).
Станом на 18.07.26 сайт схуд до ~300 сторінок, мовне сміття я вичистив, віддав Google нову карту сайту й запросив переіндексацію ключових сторінок. Чи вистачить цього, щоб пробити індексацію, покаже наступний місяць. У YMYL спершу чистиш і консолідуєш контент, а вже потім будуєш авторитет: посилання на сайт, який алгоритм позначив як неякісний, цей прапорець не знімають.
Мораль, яка мене не тішить
Я місяцями будував захист від розумних помилок: незалежні рецензенти різних сімейств, детерміновані гейти, карантин за замовчуванням. І при цьому вбив сайт найбанальнішим: комбінаторним дублюванням шаблонів і неперекладеним рядком інтерфейсу. Захист від складних галюцинацій не рятує від дурних. Ну і так, довелось нацькувати власний конвеєр на власний сайт. Що характерно, спрацювало.
Сам довідник живе тут: health.jeyai.ai. Проєкт некомерційний, тож якщо бачите, де ми тупимо (архітектурно чи в підході до YMYL), пишіть у коментарі, полаємось конструктивно.
1 коментар
Додати коментар Підписатись на коментаріВідписатись від коментарівВ мене довідник з архітектурних патернів має до 5 кліків на добу — імовірно, через брак беклінків metapatterns.io