Supabase для ИИ-агентов: память и векторный поиск
Как хранить состояние агента, зачем нужен векторный поиск и как он устроен, что держать в базе, а что нет, и какие ошибки повторяются чаще всего.
Все статьи гида Supabase · 7
Агенту нужна память снаружи: модель не помнит ничего между вызовами, а контекст кончается быстрее, чем кажется. Supabase закрывает эту задачу без отдельной инфраструктуры.
Хранение состояния агента
Три вещи, которые обязательно живут в базе:
Что уже сделано. Основа идемпотентности. Агент перезапустился - он должен узнать, что письмо уже отправлено, а не отправить второе. Без этого повторный запуск создаёт двойные эффекты - см. идемпотентные пайплайны.
Результаты работы. Извлечённые факты, принятые решения, созданные объекты. Держать их только в разговоре - значит потерять при первой компакции контекста.
Логи шагов. Что было на входе, какой инструмент вызван, что вернулось. Без этого разбор инцидента невозможен: вы видите результат и не видите, почему он такой.
Практическая деталь: логи растут быстро. Ограничивайте срок хранения сразу, иначе они станут основной таблицей в базе.
Развёрнуто про то, что и как агент помнит, - память ИИ-агента.
Векторный поиск
Задача: найти релевантное среди многого, когда точного совпадения по словам нет. Пользователь спрашивает своими словами, а в документах написано иначе.
Как это работает: текст превращается в набор чисел, отражающий смысл, и поиск идёт по близости этих наборов. Тексты о похожем оказываются рядом, даже если слова разные.
В PostgreSQL это делается расширением для векторов: отдельная система не нужна. Практические преимущества такого варианта:
- Данные и векторы вместе. Не нужно синхронизировать два хранилища.
- Обычные фильтры работают. Можно искать похожее среди документов конкретного пользователя - в отдельном векторном движке это сложнее.
- Права доступа работают. Те же политики, что и на остальных таблицах, - см. авторизацию и RLS.
Когда нужен отдельный движок: на больших объёмах и высокой частоте запросов. Для MVP и для внутренних инструментов это преждевременно.
Что учесть на практике:
Индекс обязателен. Без него поиск идёт перебором по всей таблице и на десятках тысяч записей становится неприемлемо медленным.
Размер фрагмента. Слишком большие куски текста дают размытый результат, слишком мелкие теряют контекст. Настраивается опытным путём на ваших данных.
Гибридный поиск. Сочетание векторного и обычного текстового поиска обычно даёт лучший результат, чем любой из них по отдельности.
Смена модели векторизации ломает индекс. Векторы, посчитанные разными моделями, несравнимы. Смена модели означает пересчёт всего.
Что держать в базе, а что нет
В базе:
- Состояние и отметки о выполненном.
- Извлечённые факты и результаты.
- Векторы и документы для поиска.
- Логи шагов с ограниченным сроком хранения.
- Метрики: число шагов, стоимость, доля неудач.
Не в базе:
- Сырые ответы моделей целиком. Занимают много, переиспользуются почти никогда.
- Полный контекст каждого шага. То же самое.
- Секреты. Ключи от моделей и внешних сервисов - в переменных окружения функций, а не в таблицах.
- Персональные данные без необходимости. Если их можно не хранить, лучше не хранить.
Типовые ошибки
- Нет проверки на повтор. Агент перезапустился и выполнил действие дважды.
- Нет индекса на векторах. Работает на сотне записей, встаёт на десяти тысячах.
- Логи без ограничения срока. Через месяц они занимают больше, чем данные.
- Служебный ключ в клиенте. Агент, работающий в браузере с полным доступом к базе, - это открытая база.
- Векторизация при каждом запросе. Пересчитывать векторы документов надо один раз при загрузке, а не при каждом поиске.
Общая теория - гид по ИИ-агентам. Общая картина по инструменту - гид по Supabase.
Вопросы и ответы
Зачем агенту база данных?
Чтобы помнить, что уже сделано, и переживать перезапуск. Модель не помнит ничего между вызовами, а контекст кончается: всё, что должно сохраниться, живёт снаружи. Плюс состояние в базе - это защита от повторного выполнения действия при перезапуске.
Нужен ли отдельный векторный движок?
На типичных объёмах MVP - нет. PostgreSQL с расширением для векторов справляется, и это заметно проще, чем отдельная система: данные и векторы лежат вместе, фильтры и права работают как обычно. Отдельный движок нужен на больших объёмах и высокой нагрузке.
Что не стоит хранить в базе для агента?
Сырые ответы моделей целиком и полный контекст каждого шага. Они занимают много места и почти никогда не переиспользуются. Хранить надо извлечённые факты и результаты; логи шагов - отдельно и с ограниченным сроком жизни.
Ещё по теме
- Supabase: что это и с чего начатьГид
- Авторизация и RLS в Supabase: роли и доступКак устроена авторизация, что такое политики доступа на уровне строк, какие политики нужны в типовом проекте и где чаще всего ломаются MVP.
- Edge-функции Supabase: логика без своего сервераКогда нужны серверные функции, какие у них ограничения, как работать с секретами и как устроены деплой, логи и отладка.
- Supabase против Firebase: что выбрать под MVPЧем отличаются модели данных, как ведёт себя цена на росте, насколько сильна привязка к поставщику и как выбрать под конкретный проект.
Сделаю под ключ
Соберу MVP на Supabase
Авторизация, база с RLS, хранилище, функции и оплата, настроенные правильно с первого раза.
от 1 500 $ · 1-2 недели