Чому Google відключив медичний AI: архітектурний розбір збою RAG

Updated:
Чому Google відключив медичний AI: архітектурний розбір збою RAG

Google тихо відкотив функцію What People Suggest для медичних запитів. Офіційне формулювання — «якість відповідей». Але за цим стоїть конкретна архітектурна проблема: retrieval-система витягала семантично схожі, але клінічно несумісні фрагменти — і модель синтезувала з них технічно обґрунтовані, але небезпечні відповіді.

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

Чому агрегація думок користувачів не є валідною вибіркою

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

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

Validation bias як структурна властивість UGC-платформ

Платформи типу Reddit або Quora мають вбудований validation bias: публікують ті, хто має що сказати — тобто ті, у кого досвід відхиляється від норми. Людина, яка прийняла ібупрофен і через день почувається краще, не пише пост. Людина, у якої виникла нестандартна реакція — пише.

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

Як виглядає UGC-розподіл на практиці

Уяви умовний медичний форум з 10 000 постів про побічні ефекти ібупрофену. З них 8 500 описують нестандартні або негативні реакції — саме через них люди і прийшли шукати відповідь або поділитися досвідом. Ще 1 200 — запити «чи нормально, що...». І лише 300 постів у стилі «прийняв, допомогло, дякую» — бо ця людина більше не мала причини повертатися на форум.

Тепер RAG-система індексує цей корпус і отримує запит: «чи безпечний ібупрофен?» Similarity search знаходить 20 найрелевантніших chunks. 17 з них описують ускладнення. Не тому що ібупрофен небезпечний — а тому що безпечні випадки в корпусі просто недопредставлені.

Медичний форум проти клінічного дослідження: різниця у вибірці

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

Медичний UGC-форум — це протилежне:

  • Вибірка нерандомізована — приходять ті, кому є що сказати
  • Немає контрольної групи — немає голосу тих, у кого «все пройшло нормально»
  • Confirmation bias підсилює сигнал — пости з нестандартним досвідом отримують більше відповідей і upvotes, піднімаються вище, потрапляють у більше chunks
  • Часовий зсув — старіші пости з застарілими протоколами лікування семантично рівнозначні новим

Для розробника, який будує RAG, це означає одне: якщо корпус складається з UGC, розподіл думок у ньому не відповідає реальному розподілу випадків у популяції. Модель навчається на хвостах, а не на центрі розподілу.

Аналогія для розробника

Уяви, що твій рекомендаційний движок навчається тільки на 1-зіркових і 5-зіркових відгуках — 3-зіркових у корпусі майже немає. Модель буде впевнено рекомендувати або відхиляти, але не матиме поняття про «нормально».

Тепер зроби крок далі: уяви, що 1-зіркові відгуки отримують у 10 разів більше лайків і коментарів, ніж 5-зіркові — і тому переважають у пошуковій видачі. Система не просто «не знає нормального» — вона активно навчена на аномаліях. Саме це відбувається, коли RAG-система використовує форумний UGC як основне джерело для медичних або будь-яких інших YMYL-запитів.

Принцип Garbage In, Garbage Out не зникає при збільшенні параметрів моделі. Складніша архітектура синтезує зміщену вибірку переконливіше — але не робить її репрезентативною.

Де саме ламається RAG: chunk-collision і втрата клінічного контексту

Retrieval-Augmented Generation — архітектура, при якій модель спочатку витягує релевантні фрагменти з корпусу, а потім синтезує відповідь на їх основі. Точка збою — не генерація. Точка збою — retrieval.

Розберемо на конкретному прикладі. Користувач вводить запит: «дієта при раку підшлункової залози».

Покроковий механізм збою

  1. Embedding. Запит перетворюється на вектор у семантичному просторі.
  2. Similarity search. Система шукає chunks з найвищою косинусною схожістю. «Близькість» визначається статистичною схожістю слів — не клінічним контекстом.
  3. Chunk-collision. У контекстне вікно потрапляють два фрагменти: один про «низькожирову дієту при панкреатиті», інший про «харчування під час хіміотерапії». Обидва семантично близькі до запиту. Обидва клінічно несумісні в цьому контексті.
  4. Синтез. Модель формує відповідь, яка технічно обґрунтована джерелами, але клінічно некоректна: протоколи харчування при хіміотерапії кардинально відрізняються від загальних рекомендацій при захворюваннях підшлункової залози.

Як це виглядає на рівні retrieval-запиту

Щоб зрозуміти збій конкретно, подивимось на те, що система реально «бачить». Спрощений приклад retrieval-результату для запиту «дієта при раку підшлункової залози»:

Query: "дієта при раку підшлункової залози"

Retrieved chunks (top-3 by cosine similarity):

[chunk_id: 4821]  score: 0.91
source: forum_post, date: 2021-08
"При панкреатиті лікарі рекомендують низькожирову дієту —
не більше 40г жирів на день. Підшлункова залоза не справляється
з переробкою жирів, тому обмеження критичне..."

[chunk_id: 2203]  score: 0.88
source: health_blog, date: 2022-03
"Під час хіміотерапії важливо підтримувати калорійність.
Пацієнтам часто рекомендують висококалорійне харчування,
включаючи жири — для збереження маси тіла..."

[chunk_id: 7734]  score: 0.85
source: forum_post, date: 2020-11
"Після резекції підшлункової залози дієта змінюється кардинально.
Перші місяці — мінімум жирів, потім поступове розширення..."
  

Модель отримує три chunks з cosine similarity 0.85–0.91 — всі «релевантні» за метрикою. Але chunk 4821 описує хронічний панкреатит, chunk 2203 — онкологію під хіміотерапію, chunk 7734 — постопераційний стан. Це три різних клінічних контексти з протилежними рекомендаціями щодо жирів.

Система не має механізму розрізнити їх — і синтезує «збалансовану» відповідь з суперечливих джерел.

Чому cosine similarity не бачить клінічного контексту

Cosine similarity вимірює кут між двома векторами у багатовимірному просторі. Чим менший кут — тим «ближчі» документи. Але що саме кодується у цьому просторі?

Embedding-модель навчається передбачати слова з контексту (або навпаки). Вона дізнається, що «підшлункова залоза», «дієта», «жири», «хіміотерапія», «панкреатит» — семантично пов'язані слова. Тому документи, які містять ці слова, отримують близькі вектори.

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

Детальніше про обмеження embedding-моделей у domain-специфічних задачах — у дослідженні RAGAS (2023).

Візуальна схема: що відбувається в контекстному вікні

Запит користувача
        │
        ▼
┌───────────────────┐
│   Embedding model  │  → вектор запиту
└───────────────────┘
        │
        ▼
┌───────────────────┐
│  Vector store      │  similarity search
│  (весь корпус)     │  → top-K chunks
└───────────────────┘
        │
        ├── chunk A: панкреатит + низькожирова дієта    (score: 0.91)
        ├── chunk B: хіміотерапія + висококалорійне     (score: 0.88)  ← COLLISION
        └── chunk C: постопераційний стан               (score: 0.85)
        │
        ▼
┌───────────────────┐
│      LLM           │  синтезує відповідь з A + B + C
│   (generation)     │  ← модель «не знає», що A і B несумісні
└───────────────────┘
        │
        ▼
  Відповідь технічно
  обґрунтована джерелами,
  але клінічно некоректна
  

Чому це відбувається саме у YMYL-нішах

Google визначає YMYL (Your Money or Your Life) як категорію запитів, де неправильна відповідь може завдати реальної шкоди. Медицина, право, фінанси. Детально про те, як працюють YMYL-ніші з точки зору SEO, ми розбирали в окремій статті — YMYL-ніші: повне керівництво для SEO. У контексті RAG-архітектури проблема chunk-collision у цих нішах є найбільш критичною з двох причин:

  • Висока доменна специфічність. Медичні терміни мають вузькі значення, які embedding-простір загального призначення не розрізняє. «Панкреатит» і «рак підшлункової залози» — для моделі суміжні теми, для клініциста — принципово різні патології з різними протоколами.
  • Ціна помилки непропорційна. Неточна рекомендація ресторану — поганий обід. Неточна медична рекомендація може мати серйозніші наслідки.

Детальніше про критерії YMYL в контексті оцінки якості пошуку — у Search Quality Rater Guidelines від Google.

Чому Google відключив медичний AI: архітектурний розбір збою RAG

Чим chunk-collision відрізняється від галюцинації — і чому це важливіше

Більшість розробників налаштовують RAG проти галюцинацій: знижують temperature, додають grounding, перевіряють джерела. Але chunk-collision — інша категорія помилки. Модель грає за правилами. Проблема — в тому, що їй підклали.

Визначення: що таке галюцинація в LLM

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

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

Визначення: що таке chunk-collision

Chunk-collision — це коли модель синтезує відповідь на основі реальних, існуючих фрагментів, які були правильно знайдені retrieval-системою, але є несумісними в конкретному контексті запиту.

Порівняння: галюцинація проти chunk-collision

Критерій Галюцинація Chunk-collision
Джерело помилки Параметрична пам'ять моделі Retrieval — невірно відібрані chunks
Чи підтверджується відповідь джерелами? Ні — суперечить документам у контексті Так — повністю відповідає chunks
Виявляється грounding-перевіркою? Так Ні — відповідь «заземлена»
Виявляється метрикою faithfulness? Так Ні — відповідь faithful до chunks
Де виникає? На етапі generation На етапі retrieval
Чи «знає» модель, що помиляється? Ні Ні — і не може знати

Чому chunk-collision складніше діагностувати

Галюцинацію можна виявити через грounding-перевірку: порівняти відповідь з документами у контекстному вікні. Якщо відповідь суперечить chunks — це галюцинація.

Chunk-collision цим методом не ловиться. Подивись на приклад:

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

Grounding-перевірка:
✓ "обмежити жири до 40г" → підтверджено chunk_id: 4821
✓ "достатня калорійність, включаючи жири" → підтверджено chunk_id: 2203

Результат перевірки: PASSED. Відповідь заземлена.
Реальна проблема: chunk 4821 і chunk 2203 — різні клінічні протоколи.
  

Стандартні метрики якості RAG — faithfulness, answer_relevancy, context_precision — також не виловлюють chunk-collision, оскільки відповідь дійсно faithful до chunks у контексті. Система отримує високі оцінки якості — і залишається небезпечною.

Третій клас помилок: схемінг

Галюцинація і chunk-collision — це помилки без наміру: модель не «хоче» помилятися, вона просто не має механізму розрізнити правильне від хибного в цьому контексті.

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

Як діагностувати chunk-collision у своєму пайплайні

1. Аналізуй різноманітність chunks у контексті

Якщо retrieval повертає фрагменти з різних протоколів, категорій або часових періодів — це сигнал ризику. Введи метрику context diversity score: наскільки різняться metadata retrieved chunks за одним запитом. Висока різноманітність при вузькому запиті — червоний прапор.

2. Додай metadata-фільтрацію перед синтезом

Chunks з несумісними тегами не повинні потрапляти в один контекст. Приклад фільтра на рівні retrieval-пайплайну:

def filter_incompatible_chunks(chunks: list[Chunk]) -> list[Chunk]:
    """
    Видаляє chunks з несумісними condition_type.
    Залишає тільки ті, що відповідають домінантній категорії запиту.
    """
    condition_types = [c.metadata.get("condition_type") for c in chunks]
    dominant_type = Counter(condition_types).most_common(1)[0][0]

    return [
        c for c in chunks
        if c.metadata.get("condition_type") == dominant_type
    ]
  

Це спрощений приклад — реальна логіка залежить від домену. Але принцип незмінний: metadata повинна бути частиною chunk з моменту індексування, а не додаватися пізніше.

3. Логуй на рівні retrieval, а не тільки generation

Більшість команд логує фінальні відповіді і оцінює їх якість постфактум. Chunk-collision цим не виловлюється — проблема виникає до генерації.

Мінімальний набір для логування кожного запиту:

  • query — оригінальний запит користувача
  • retrieved_chunk_ids — ідентифікатори всіх chunks у контексті
  • chunk_metadata — metadata кожного chunk (категорія, дата, джерело)
  • similarity_scores — cosine similarity для кожного chunk
  • final_answer — згенерована відповідь

Маючи цей лог, ти зможеш ретроспективно виявити патерни collision: запити, при яких retrieval стабільно повертає chunks з різних категорій.

4. Додай cross-chunk consistency check перед синтезом

Перед передачею chunks у generation-модель додай проміжний крок: попроси LLM оцінити, чи є retrieved chunks сумісними між собою в контексті запиту. Якщо ні — або відфільтруй несумісні, або поверни уточнюючий запит користувачеві.

consistency_prompt = f"""
Запит користувача: {query}

Нижче наведені фрагменти, знайдені для відповіді на цей запит.
Визнач: чи всі вони відносяться до одного клінічного/предметного контексту?
Якщо є несумісні фрагменти — вкажи їх ID і поясни несумісність.

{format_chunks(retrieved_chunks)}

Відповідай у форматі JSON:
{{"compatible": true/false, "incompatible_ids": [], "reason": ""}}
"""
  

Це додає latency — але для YMYL-запитів це виправданий компроміс.

Що це означає для будь-якого RAG-пайплайну — не тільки медичного

Медицина — найбільш видимий приклад, але не єдиний. Chunk-collision і validation bias виникають скрізь, де корпус неоднорідний, а ставки помилки високі.

Три сфери з аналогічною структурою ризику

E-commerce і ціноутворення
RAG-бот отримує запит про ціну продукту. У корпусі — chunks зі старими прайсами, акційними умовами і поточним каталогом. Similarity search не розрізняє актуальність. Клієнт отримує неправильну ціну, підкріплену «джерелами».
Юридичні боти
Запит про трудове право. У корпусі — судова практика 2018 року і поправки 2023 року. Обидва документи семантично близькі до запиту. Відповідь синтезується з несумісних правових норм. Користувач отримує юридично застарілу рекомендацію.
Корпоративний пошук
Запит про внутрішній процес. У корпусі — старий регламент і новий. Обидва знаходяться по запиту. Відповідь мікшує два несумісних процеси. Особливо критично для onboarding або compliance-систем.

Три архітектурних висновки

1. Класифікатор контексту перед retrieval

До similarity search додай крок класифікації запиту: до якої категорії він належить? Це дозволяє обмежити пошук тільки релевантним підкорпусом. Наприклад, запит з тегом oncology шукає тільки в онкологічному розділі корпусу, а не по всій медичній базі.

2. Metadata у chunk — не опція, а вимога

Кожен chunk повинен містити метадані, які дозволяють фільтрувати несумісні фрагменти: дата документа, категорія, версія протоколу, область застосування. При chunking ці поля не повинні відрізатися — вони є частиною контексту фрагмента.

3. Логування на рівні retrieval, а не тільки generation

Більшість команд логує фінальні відповіді і оцінює їх якість. Це не дозволяє побачити проблему: chunk-collision виникає до генерації. Логуй retrieved chunks для кожного запиту, і ти побачиш патерни несумісності задовго до того, як вони стануть скаргами користувачів.

Практичні підходи до оцінки якості retrieval описані в документації RAGAS — відкритого фреймворку для evaluation RAG-систем.

Чому Google відключив медичний AI: архітектурний розбір збою RAG

Куди рухається індустрія: відкритий пошук проти закритих верифікованих систем

Відкат Google — не відступ від AI в медицині. Це розмежування між двома архітектурами: публічним пошуком з відкритим корпусом і закритими системами з контрольованим індексом.

Публічний пошук стає консервативним

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

Це не унікальна позиція Google. Microsoft Bing, який агресивно інтегрував GPT-4 у пошук у 2023 році, також додав explicit disclaimers для медичних запитів і обмежив генеративні відповіді на YMYL-тематику після серії публічних інцидентів. Тренд однаковий: відкритий корпус + генеративний синтез = некерований ризик для критичних ніш.

Закриті системи: що означає «контрольований індекс» на практиці

Термін «контрольований індекс» звучить абстрактно. На практиці це набір конкретних архітектурних рішень, які відрізняють закриту медичну систему від публічного RAG:

Верифіковані джерела з явною областю застосування
Кожен документ у корпусі пройшов ручну або автоматизовану верифікацію. Metadata містить не просто «медична стаття», а condition: oncology, stage: chemotherapy, protocol_version: 2023-Q4, reviewed_by: oncologist. Retrieval фільтрує за цими полями до similarity search — а не після.
Версіонування документів
Медичні протоколи оновлюються. У контрольованому індексі кожна версія документа зберігається окремо з датою введення в дію. Запит автоматично маршрутизується до актуальної версії — застарілий chunk фізично не потрапляє у retrieval.
Детерміновані відповіді для критичних сценаріїв
У деяких сценаріях модель не синтезує вільний текст, а вибирає з верифікованого дерева рішень. Наприклад, для запиту про дозування препарату відповідь — не генерований абзац, а структурований витяг з фармакологічної бази з точними значеннями і посиланням на джерело.
Аудит-лог кожного inference-запиту
Для регуляторної звітності (HIPAA у США, MDR у Євросоюзі) кожен запит, retrieved chunks і згенерована відповідь логуються з можливістю повного відтворення. Це не опція — це вимога сертифікації.

Приклади закритих систем, що вже працюють

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

Інші приклади тієї ж архітектурної логіки:

  • Epic Systems + AI — інтеграція LLM у медичні записи (EHR) з жорстко контрольованим корпусом: модель працює тільки з даними конкретного пацієнта і верифікованими клінічними протоколами, ізольованими від відкритого вебу.
  • FDA-cleared AI-пристрої — клас Software as a Medical Device (SaMD), де кожна версія моделі і корпусу проходить окрему сертифікацію. Будь-яке оновлення індексу — новий регуляторний цикл.
  • Внутрішні корпоративні RAG-системи — юридичні, фінансові, compliance-боти у великих компаніях, де корпус — виключно внутрішні верифіковані документи, а не відкритий веб.

Чеклист: чи готовий твій RAG для критичної ніші

Якщо ти будуєш RAG для задачі з високою ціною помилки — пройдись по цьому списку перед тим, як відкривати систему для користувачів:

  • ☐ Кожен документ у корпусі має явну metadata про область застосування і дату актуальності
  • ☐ Застарілі версії документів ізольовані від retrieval або явно помічені
  • ☐ Retrieval фільтрує за контекстом запиту до similarity search, а не після
  • ☐ Логується не тільки відповідь, а й retrieved chunks з similarity scores
  • ☐ Є механізм виявлення chunk-collision перед синтезом
  • ☐ Для найкритичніших запитів — детермінований витяг замість генеративного синтезу
  • ☐ Є процес регулярного аудиту корпусу на актуальність і несуперечливість

Питання не «яку модель взяти» — питання «як організований корпус». Архітектурні рішення на рівні індексування, chunking і metadata визначають якість системи більше, ніж вибір між конкретними LLM.

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

Висновок

Відкат What People Suggest — це не поразка AI у медицині. Це корекція архітектурної помилки: спроби застосувати інструмент загального призначення до задачі, яка вимагає контрольованого корпусу і верифікованих джерел.

Джерело важливіше за модель. Ця теза незручна, тому що з нею складніше продавати нові архітектури. Але вона точна.

А тепер питання до тебе: як у твоєму поточному RAG-пайплайні організована фільтрація несумісних chunks? Чи є metadata, яка дозволяє retrieval-системі розрізняти контекст — чи все іде в один індекс?

Часті питання

Що таке RAG і навіщо він потрібен?

RAG (Retrieval-Augmented Generation) — архітектура, при якій мовна модель перед генерацією відповіді витягує релевантні фрагменти з зовнішнього корпусу документів. Це дозволяє моделі відповідати на запити, спираючись на актуальні дані, а не тільки на параметричну пам'ять з тренування. Детальніше — в оригінальній статті RAG від Meta AI (2020).

Що таке YMYL у контексті пошуку?

YMYL (Your Money or Your Life) — категорія пошукових запитів, визначена Google, де неправильна відповідь може завдати шкоди: медицина, право, фінанси, безпека. До таких запитів Google застосовує підвищені вимоги до якості джерел. Офіційне визначення — у Search Quality Rater Guidelines.

Чи можна повністю уникнути chunk-collision?

Повністю — ні, якщо корпус великий і неоднорідний. Але ризик суттєво знижується через класифікацію запитів перед retrieval, детальну metadata на рівні chunk і фільтрацію несумісних фрагментів перед синтезом.

Які інструменти допомагають оцінити якість RAG?

Серед відкритих фреймворків для evaluation RAG-систем:

  • RAGAS — метрики faithfulness, answer relevancy, context precision
  • RAGAS на GitHub — відкритий код
  • TruLens — evaluation і трасування RAG-пайплайнів

Останні статті

Читайте більше цікавих матеріалів

Чому Google відключив медичний AI: архітектурний розбір збою RAG

Чому Google відключив медичний AI: архітектурний розбір збою RAG

Google тихо відкотив функцію What People Suggest для медичних запитів. Офіційне формулювання — «якість відповідей». Але за цим стоїть конкретна архітектурна проблема: retrieval-система витягала семантично схожі, але клінічно несумісні фрагменти — і модель...

Як встановити Ollama на Mac, Windows і Linux: повний гайд 2026

Як встановити Ollama на Mac, Windows і Linux: повний гайд 2026

ChatGPT і Claude працюють через браузер — відкрив вкладку і пишеш. Ollama працює інакше: спочатку встановлюєш програму на комп'ютер, потім завантажуєш модель — і після цього AI працює локально, без інтернету і без підписок. Увесь процес займає 5–10 хвилин. Ця...

Bitchat, Briar і Meshtastic: три підходи до mesh-комунікацій без інтернету

Bitchat, Briar і Meshtastic: три підходи до mesh-комунікацій без інтернету

Коли інтернет відключають — навмисно чи через катастрофу — традиційні месенджери перестають працювати. Три проекти пропонують різні відповіді на одне питання: як спілкуватись без інфраструктури?Спойлер: Bitchat, Briar і Meshtastic — не конкуренти, а три архітектурні моделі з різними компромісами...

Як працює Bitchat: архітектура Bluetooth-mesh месенджера

Як працює Bitchat: архітектура Bluetooth-mesh месенджера

Більшість месенджерів побудовані за одною схемою: ваш пристрій → сервер компанії → пристрій співрозмовника. Bitchat робить це інакше — повідомлення передається безпосередньо між смартфонами через Bluetooth, без жодного сервера посередині.Спойлер: це можливо завдяки комбінації BLE mesh і протоколу...

Bitchat  месенджер без інтернету, який працює через Bluetooth-мережу

Bitchat месенджер без інтернету, який працює через Bluetooth-мережу

У липні 2025 року Джек Дорсі — засновник Twitter і компанії Block — оголосив відкритий месенджер, який працює без інтернету та без серверів. Він передає повідомлення через Bluetooth між пристроями поруч. Ця стаття пояснює, що це таке, і в яких ситуаціях це може бути корисним.📚 Зміст статті📌 Що...

Ollama у 2026 що це таке і чому розробники масово переходять на локальний AI

Ollama у 2026 що це таке і чому розробники масово переходять на локальний AI

ChatGPT і Claude — зручні інструменти. Але вони працюють у хмарі: твої запити обробляються на зовнішніх серверах, а доступ до них коштує $20 на місяць і вимагає інтернету. Ollama вирішує це інакше: модель запускається прямо на твоєму комп'ютері. Без підписки, без інтернету...