Головна / Статті / Приватний ШІ-щоденник на Gemini та Firebase: запитання до власних записів

Приватний ШІ-щоденник на Gemini та Firebase: запитання до власних записів

Як щоденник із Gemini відповідає на запитання за вашими ж записами, ізолює дані кожного користувача правилами Firebase і ховає API-ключ на сервері.

1321 слів

Щоденник, який уміє відповідати

Більшість щоденників просто зберігають текст. А тепер уявіть, що через кілька тижнів чи місяців ви повертаєтеся і питаєте його, які закономірності видно у ваших роздумах, які цілі спливають знову і знову, як змінився хід ваших думок або про що ви писали в певний період. На цій ідеї побудовано приватний застосунок-щоденник зі ШІ на Gemini, Firebase і Google Cloud, задуманий як захищений «особистий щоденник із Gemini».

Застосунок поєднує звичайний щоденник із роздумами за підтримки ШІ. Головна думка: пам'ятати події — лише половина справи, щоденник має ще й допомагати їх розуміти. Ви пишете записи, позначаєте настрій, за бажання вказуєте місце, а Gemini допомагає осмислити написане.

Найпомітніша функція — режим запитань і відповідей за власною історією. Замість того щоб вважати кожен запис окремим документом, він дає змогу запитати, наприклад, «які теми повторюються в моїх останніх записах?» і отримати відповідь, зібрану зі збережених записів.

Можливості

Режими роздумів

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

Запитання до своїх спогадів

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

Стрічка спогадів

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

Читання для роздумів

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

Місця, які ви обираєте самі

До запису можна прив'язати місце, але застосунок не визначає ваше поточне розташування автоматично. Місце шукається вручну, тож ви самі вирішуєте, які саме дані про локацію потраплять до щоденника.

Приватність і безпека

Щоденник — річ особиста, тому безпеку закладають у дизайн із першого дня, а не латають наприкінці. Особу користувача підтверджує Firebase Authentication, а дані кожної людини розділено за її Firebase UID. У Firestore структура відповідає такій концептуальній схемі:

users/
  {userId}/
    entries/
      {entryId}

Правила безпеки Firestore обмежують користувача, що увійшов, даними під його власним ID. Принцип жорсткий: користувач A за жодних умов не повинен прочитати спогади користувача B. До того ж бекенд ще раз перевіряє автентифікацію Firebase, перш ніж обробити будь-який запит у режимі запитань і відповідей. У підсумку маємо кілька шарів захисту:

User
  ↓
Firebase Authentication
  ↓
Authenticated UID
  ↓
User-scoped Firestore data
  ↓
Relevant memories
  ↓
Gemini
  ↓
Grounded response

Як використовується Gemini

Gemini виступає шаром міркувань і осмислення. Застосунок не надсилає голе запитання — він передає в Gemini API структурований контекст. Для запитань до спогадів потік виглядає приблизно так:

User asks a question
        ↓
Firebase authentication
        ↓
Verify user identity
        ↓
Retrieve user's memories
        ↓
Select relevant/recent entries
        ↓
Build grounded Gemini context
        ↓
Gemini analyzes the memories
        ↓
Return response to user

Системний промпт велить Gemini:

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

Це обмеження важливе: особистий асистент зі спогадів у жодному разі не повинен вигадувати чужу історію.

API-ключ не потрапляє на клієнт

Ще одне рішення — тримати облікові дані Gemini подалі від фронтенда. Ключ зберігається в серверній змінній середовища:

GEMINI_API_KEY

Браузер ніколи не бачить справжнього ключа: його читає бекенд, коли створює клієнт Gemini. Правило просте: секретам місце на сервері, а не в клієнтському JavaScript.

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

Огляд архітектури

Загалом частини складаються так:

                 ┌───────────────────┐
                 │      User         │
                 └─────────┬─────────┘
                           │
                           ▼
                 ┌───────────────────┐
                 │   React Frontend  │
                 └─────────┬─────────┘
                           │
             ┌─────────────┴─────────────┐
             │                           │
             ▼                           ▼
   ┌──────────────────┐       ┌──────────────────┐
   │ Firebase Auth     │       │ Express Backend  │
   └──────────────────┘       └────────┬─────────┘
                                       │
                           ┌───────────┴───────────┐
                           │                       │
                           ▼                       ▼
                 ┌──────────────────┐    ┌─────────────────┐
                 │ Cloud Firestore  │    │ Gemini API      │
                 └──────────────────┘    └─────────────────┘

Фронтенд відповідає за користувацький досвід. Firebase займається автентифікацією і зберіганням даних кожного користувача. Бекенд слугує контрольованим шлюзом до Gemini.

Чому саме так

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

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

Чим він відрізняється

Крізь увесь проєкт проходять чотири ідеї:

  • Особиста пам'ять: щоденник стає вашою власною базою знань, у якій можна шукати.
  • ШІ з опорою на факти: Gemini працює з реальними записами користувача і не вигадує його історії.
  • Приватність в основі дизайну: автентифікація Firebase і правила безпеки Firestore ізолюють дані кожного користувача.
  • Осмислення важливіше за генерацію: мета не в тому, щоб нагенерувати більше тексту, а в тому, щоб допомогти людині зрозуміти вже написане.

Чого навчила розробка

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

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

Що далі

Можливі напрями: точніший пошук спогадів, семантичний пошук щоденником, виявлення довгострокових закономірностей, персональні зведення роздумів, насиченіша стрічка, кращі висновки ШІ, більше налаштувань приватності, а також кращий деплой і спостережуваність. Довгострокова мета — інструмент, що відчувається не як класичний щоденник, а як приватний шар пам'яті.

Наостанок

Усе почалося із запитання: чи може щоденник допомогти згадати, чого вас навчили події, а не просто що сталося? У проєкті довелося попрацювати з Gemini, автентифікацією Firebase, Firestore, зберіганням ключів, прив'язкою відповідей до даних і full-stack-деплоєм — і все це довкола приватності. Найцікавіше тут не те, що ШІ пише роздум. А те, що можна озирнутися на власні спогади й помітити закономірності, яких самі ви б не вловили.