Главная / Статьи / Приватный ИИ-дневник на 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-деплоем — и всё это вокруг приватности. Самое интересное здесь не то, что ИИ пишет размышление. А то, что можно оглянуться на собственные воспоминания и заметить закономерности, которые сами вы бы не уловили.