Як я будував медичний довідник AI-агентами і що пішло не так з Google

💡 Усі статті, обговорення, новини про AI — в одному місці. Приєднуйтесь до AI спільноти!

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

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

Що взагалі за проєкт

У межах громадської організації «Ахімса Екосистем» я захотів зробити безкоштовний довідник лабораторних маркерів двома мовами, «Jey Здоров’я», плюс Telegram-бот, що пояснює завантажений бланк аналізів. Задача скромна: щоб людина прийшла на свої десять хвилин до лікаря з конкретними питаннями, а не як баран на заклання.

Текстів про феритин LLM-ка вам згенерує скільки завгодно. Проблема у іншому. Це YMYL-тема (your money or your life), де ціна тихо перекрученої норми висока, а вичитувати кожну сторінку живим лікарем нема кому. Питання, від якого танцювала вся архітектура, звучало так: як зробити, щоб система фізично не могла опублікувати те, чого не може підтвердити.

Чому extraction, а не генерація

Модель нічого не пише «від себе». Вона лише розкладає чуже по нашій структурі. Кожне суттєве твердження прив’язане до джерела з allowlist (NIH/MedlinePlus, StatPearls, клінічні настанови профільних товариств, каталоги лабораторій як-от Mayo Clinic Labs чи ARUP). Референсні діапазони модель взагалі не генерує: вони підтягуються з окремої версіонованої бази. Немає прив’язки до дозволеного джерела, немає твердження.

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

Конвеєр і карантин

Кожна сторінка йде через ланцюг, де жоден крок не вірить попередньому на слово:

  • генерація чернетки з підписаного профілю джерел;
  • детерміновані скрипти-гейти: числа збігаються з базою, одиниці на місці, дисклеймери є, заборонена діагностична лексика відсутня, кожне твердження має тег джерела;
  • незалежні LLM-рецензенти, серед яких обов’язково модель іншого сімейства, ніж генератор (у моделей одного вендора занадто схожі сліпі зони: Claude ловить те, що не бачить GPT, і навпаки);
  • бенчмарк-гейт.

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

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

Google сказав ні

Далі почалась зовсім інша історія. Точніше, про те, як новий медичний домен у пошук НЕ виходить.

Повернемось до тієї одиниці в Search Console. Ручних санкцій немає, тобто це чисто алгоритмічне рішення: сайт не вартий краулінгу. Crawl demand упав майже до нуля.

І тут я зробив помилку, яка коштувала мені 3-х тижнів. Я вирішив, що проблема в авторитеті: новий домен, майже нуль беклінків, треба нарощувати посилання. Почав планувати аутріч. Коли я нарешті поліз у консоль розбиратися по-справжньому, виявилось дві причини, і жодна з них не була про беклінки:

  • ~85% URL були комбінаторним шаблоном з майже ідентичним текстом. Це саме те, що пошуковики 2026 року трактують як scaled content abuse. Нові YMYL-домени за це кладуть під ніж першими.
  • Технічне сміття: на російськомовні сторінки вилазив неперекладений український службовий текст (класика жанру, «Читати далі» посеред російської сторінки, тільки гірше і в багатьох місцях). Для класифікатора якості це виглядає як зламаний машинний генератор. У медичній тематиці це вирок.

Тобто окремо взята стаття була нормальна. Ламала все структура: тисячі клонів плюс мовне сміття у видачі.

Лагодимо сайт тими ж агентами

Найсмішніше, що виправляв я це тими самими агентами, які цей контент і нагенерували.

Спочатку консолідація. Тисячі near-duplicate сторінок (окремі band-сторінки під кожен діапазон маркера, окремі калькулятори) звів 301-редіректами до однієї сторінки-хаба на маркер. Було 2000+ URL, лишилось ~300 чистих, унікальних на маркер. Калькулятор вбудував прямо в хаб, щоб не втратити функцію.

Потім переклад. Маркери без російської версії доперекладав прогоном із 4 перекладачів (дешевша модель) і 4 незалежних рецензентів потужнішої, що вичитували одне: чи не додав і не пом’якшив перекладач жодного клінічного твердження, і чи на місці всі числа з одиницями та посилання. Плюс окремий прохід, що вичищав усі неперекладені службові рядки. Кожну ключову зміну перед деплоєм проганяв через код-рев’ю зовнішньою моделлю (Codex на базі GPT проти моїх Claude-рецензентів, знову різні сімейства).

Станом на 18.07.26 сайт схуд до ~300 сторінок, мовне сміття я вичистив, віддав Google нову карту сайту й запросив переіндексацію ключових сторінок. Чи вистачить цього, щоб пробити індексацію, покаже наступний місяць. У YMYL спершу чистиш і консолідуєш контент, а вже потім будуєш авторитет: посилання на сайт, який алгоритм позначив як неякісний, цей прапорець не знімають.

Мораль, яка мене не тішить

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

Сам довідник живе тут: health.jeyai.ai. Проєкт некомерційний, тож якщо бачите, де ми тупимо (архітектурно чи в підході до YMYL), пишіть у коментарі, полаємось конструктивно.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

В мене довідник з архітектурних патернів має до 5 кліків на добу — імовірно, через брак беклінків metapatterns.io

Підписатись на коментарі