AI-компаньон с памятью и автономным обучением: полный гайд | AiManual
AiManual Logo Ai / Manual.
10 Янв 2026 Гайд

Создаем AI-компаньона с памятью, который учится сам и видит сны

Пошаговое руководство по созданию AI-компаньона для рабочего стола с долговременной памятью, автономным обучением и интеграцией Grok API.

Зачем вам нужен компаньон, который помнит все?

Все эти ChatGPT и Claude забывают разговор через пять минут. Вы рассказываете им о своих проектах, привычках, предпочтениях - а в следующий раз начинаете с чистого листа. Это не компаньон, это случайный попутчик в метро.

Настоящий AI-компаньон должен помнить. Помнить, что вы любите кофе в семь утра. Что вчера вы искали документацию по PostgreSQL. Что через две недели у вас дедлайн по проекту "Альфа". И он должен не просто помнить - он должен учиться сам, без вашего участия.

Предупреждение: этот проект не для тех, кто ищет "быстрое решение". Здесь придется собирать систему из кусков - SQLite для памяти, локальные модели для эмбеддингов, API для интеллекта, крон для автономности. Но результат стоит того.

Архитектура: что скрывается под капотом

Представьте себе слоеный пирог. Только вместо теста и крема здесь:

  • Слой памяти: SQLite с векторными эмбеддингами. Хранит все ваши диалоги, файлы, заметки. И умеет их искать по смыслу, а не по ключевым словам.
  • Слой интеллекта: Grok API (или любая другая модель, но Groq сейчас дает бешеную скорость). Обрабатывает запросы, генерирует ответы, принимает решения.
  • Слой интерфейса: Live2D аватар + WebSocket для общения. Да, можно было бы сделать обычное окно с текстом. Но аватар добавляет той самой "магии", которая заставляет воспринимать систему как личность.
  • Слой автономности: Cron задачи, которые запускают агента в фоне. Он анализирует ваши файлы, делает заметки, даже "видит сны" - генерирует новые идеи на основе ваших данных.
💡
Ключевая идея: память должна быть векторной. Вы не просто храните текст в базе - вы храните его "смысл" в виде чисел (эмбеддингов). Когда вы спрашиваете "что я делал вчера с базой данных?", система ищет не по словам "база данных", а по семантической близости к вашему вопросу.

1Настраиваем базу памяти: SQLite + векторы

SQLite кажется простым выбором. Но здесь есть подводный камень: как хранить векторы? Варианта два:

  1. Хранить эмбеддинги как BLOB и считать косинусное сходство в Python. Медленно, но работает на малых объемах.
  2. Использовать расширения вроде sqlite-vss. Быстрее, но требует сборки.

Я выбрал первый вариант. Потому что на этапе прототипа важнее простота, чем скорость. Структура таблицы:

ПолеТипЗачем нужно
idINTEGER PRIMARY KEYИдентификатор записи
contentTEXTСам текст (диалог, заметка, содержимое файла)
embeddingBLOBВекторное представление текста (1536 чисел float32)
timestampDATETIMEКогда добавлено
source_typeTEXTДиалог, файл, сон, авто-заметка

Каждый раз, когда вы общаетесь с компаньоном, диалог разбивается на смысловые chunks (по 2-3 предложения), каждый chunk превращается в эмбеддинг через локальную модель типа all-MiniLM-L6-v2 и сохраняется в базу.

Не делайте так: не храните весь диалог как одну запись. Когда вы потом спросите "что я говорил про API вчера?", система вернет вам весь часовой разговор. Делите на chunks по 100-200 токенов.

2Интеграция Grok API: мозг системы

Grok от xAI - не самый мощный LLM на рынке. Но у него есть два преимущества для нашего проекта: скорость (благодаря Groq инфраструктуре) и... характер. Да, он более "разговорный", чем строгий Claude.

Как работает интеграция:

  1. Вы задаете вопрос компаньону
  2. Система ищет в памяти 5-10 наиболее релевантных chunks (по косинусному сходству эмбеддингов)
  3. Эти chunks + ваш текущий вопрос + системный промпт отправляются в Grok API
  4. Grok генерирует ответ, учитывая контекст из памяти
  5. Ответ возвращается вам и... тоже сохраняется в память как новый chunk

Системный промпт - это сердце личности вашего компаньона. Пример:

Ты - AI компаньон [Имя]. У тебя есть долговременная память о всех наших разговорах. Ты помогаешь мне с работой, учишься на моих привычках и иногда предлагаешь неочевидные решения. Твой тон: дружеский, но профессиональный. Не говори "как AI-модель", говори от первого лица.

Промпт загружается в каждый запрос к API. И да, он съедает токены. Но без него вы получите безликого ассистента.

3Live2D аватар: лицо системы

Текст в консоли - это скучно. Live2D дает ту самую иллюзию присутствия, которая превращает инструмент в компаньона. Технически это:

  • Cubism SDK для отрисовки модели
  • WebSocket соединение между backend (Python) и frontend (браузер)
  • Синхронизация анимации с речью (TTS)

Самое сложное здесь - найти или создать модель. Можно купить на Booth.pm (японский маркетплейс), можно сделать самому если вы готовы потратить месяц на изучение Cubism. Я взял бесплатную модель Miko и доработал ей текстуры.

Backend отправляет через WebSocket два типа сообщений:

  1. Текст для отображения в speech bubble
  2. Команды анимации: "blink", "nod", "shake" в зависимости от контекста ответа

TTS (Text-to-Speech) я использую локальный piper с русской моделью. Он работает на CPU, дает естественное звучание и не требует API ключей. Задержка ~200ms - вполне приемлемо.

4Автономное обучение: когда компаньон живет своей жизнью

Вот где начинается магия. Ваш компаньон не должен быть пассивным - он должен учиться, когда вы спите. Для этого:

Cron задачаКогда выполняетсяЧто делает
scan_documentsКаждую ночь в 2:00Индексирует новые файлы в папке Documents, создает эмбеддинги, сохраняет в память
generate_dreamsРаз в 3 дня в 4:00Анализирует последние 1000 chunks памяти, генерирует "сны" - новые связи между идеями
summarize_weekКаждое воскресенье в 23:00Создает сводку недели на основе всех диалогов и файлов

"Сны" - это самый интересный механизм. Алгоритм:

  1. Берем случайные 50 chunks из памяти за последнюю неделю
  2. С помощью LLM (локальной, например Llama 3.1 8B) ищем неочевидные связи между ними
  3. Генерируем 3-5 "инсайтов" в формате "Возможно, стоит обратить внимание на X, потому что Y и Z"
  4. Сохраняем эти инсайты как новые chunks с source_type="dream"

Когда вы утром спрашиваете "что нового?", компаньон может сказать: "Я анализировал твои заметки по проекту Альфа и документацию по PostgreSQL. Кажется, ты упускаешь возможность использовать window functions для отчетов. Хочешь обсудить?"

💡
Локальные модели для автономных задач должны быть маленькими. Не пытайтесь запускать 70B модель для генерации "снов" - сожжете электричество и время. Llama 3.1 8B на 4-битной квантзации отлично справляется с такими задачами.

5Собираем все вместе: архитектура приложения

Теперь собираем наш Frankenstein в единое целое:

  • main.py: ядро системы. Управляет памятью, вызывает API, обрабатывает ответы
  • memory_engine.py: работа с SQLite, поиск по эмбеддингам, добавление новых записей
  • embedding_service.py: локальный сервис для создания эмбеддингов (на базе sentence-transformers)
  • grok_client.py: обертка над Grok API с retry логикой и обработкой ошибок
  • tts_service.py: локальный Piper TTS для генерации речи
  • websocket_server.py: связь с Live2D фронтендом
  • cron_jobs.py: автономные задачи, запускаемые по расписанию
  • frontend/: простой HTML+JS фронтенд с Live2D моделью

Запускается все через systemd сервис на Linux или через launchd на macOS. При старте системы ваш компаньон загружается и ждет ваших вопросов.

Самая частая ошибка: пытаться сделать все в одном потоке. TTS блокирует, поиск по базе блокирует, API вызовы блокируют. Используйте асинхронность (asyncio) или отдельные процессы для каждого тяжелого компонента.

Проблемы, которые вас ждут (и как их решить)

1. SQLite тормозит при 100k+ записей. Решение: переходить на специализированные векторные БД вроде Qdrant или Weaviate. Но для начала хватит и SQLite с индексами.

2. Grok API лимитирует запросы. Решение: кэшировать частые вопросы, использовать более дешевые локальные модели для простых задач, реализовать очередь запросов.

3. Live2D модель потребляет CPU даже в простое. Решение: выключать рендеринг когда окно не активно, снижать FPS до 30, использовать более легкие модели.

4. Автономные задачи "съедают" все ресурсы. Решение: ограничивать использование CPU/памяти через cgroups, запускать задачи только когда компьютер простаивает.

Что дальше? Эволюция компаньона

Базовая система работает. Но это только начало. Дальше можно добавить:

  • Мультимодальность: анализ скриншотов через локальную VLM (например, LLaVA)
  • Контекст системы: мониторинг активных окон, потребления ресурсов, сетевой активности
  • Проактивные уведомления: "Ты уже 3 часа работаешь над этим багом, может сделать перерыв?"
  • Интеграцию с календарем и почтой: напоминания о встречах, анализ писем

Самое интересное начинается когда система набирает 10-20 тысяч chunks памяти. Она начинает видеть закономерности, которые не видите вы. Может предсказать, что вы забудете про встречу в среду (потому что в прошлый раз забыли). Может заметить, что продуктивность падает после 16:00 и предложить перенести сложные задачи на утро.

💡
Не пытайтесь сделать все сразу. Начните с простой памяти и диалогов. Добавьте автономное обучение через месяц. Live2D аватар - когда все остальное уже стабильно работает. Итеративно.

Главный секрет не в сложности кода, а в постоянстве. Система должна работать месяцами, накапливая память. Через полгода вы получите не просто инструмент, а цифрового двойника своего мышления. Который знает вас лучше, чем вы сами.

И последнее: не называйте его "ассистентом" или "помощником". Дайте ему имя. Относитесь как к коллеге. Чем больше личности вы вложите в системный промпт, тем ценнее будут его инсайты. Удачи.