Долгосрочная векторная память для AI агентов

У AI агентов обычно 2 вида памяти: краткосрочная и долгосрочная. Иногда ещё, бывает, выделяют рабочую память - это та, которая внутри самой нейросети на короткое время возникает, пока происходит генерация - активные нейроны, но это редко вспоминают в контексте именно памяти. Ещё бывает, “среднесрочная” - это суммаризация от сейчас и до некоторого порога в прошлое. Тоже хорошо работает если это грамотно заложить в архитектуру. Но чаще всего: либо только сессию используют для памяти (список прошлых сообщений), либо к сессии добавляют долгосрочную память, которая хранится в базе данных.

Долгосрочная векторная память для AI агентов

Векторные базы данных

Их много разных. Я загуглю и перечислю огромный список, чтобы насладиться многообразием решений и красотой их названий.

  • Weaviate
  • Milvus
  • Pinecone
  • Qdrant
  • Vespa
  • Redis Vector Search
  • Vald
  • Chroma
  • Typesense
  • Vearch
  • pgvector
  • LanceDB
  • MyScale
  • OpenSearch
  • sqlite-vec

Это всё прекрасные решения с центральной идеей из линейной алгебры: размещение неких точек в многомерном пространстве смыслов для последующих операций с этими точками. Результаты этих операций - это результаты работы со смыслами с помощью математики. Только вдумайтесь! Это ли не прекрасно? Я большой фанат многомерных пространств смыслов, поэтому эта тема мне близка и интересна.

Обсидиан

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

Но обсидиан не способен эффективно работать с большими наборами воспоминаний. Агенту приходится всякий раз снова и снова читать все заметки, чтобы найти то, что ему нужно. А если заметок много, то это становится проблемой. Векторные базы данных решают эту проблему, позволяя быстро находить нужные воспоминания без необходимости читать все заметки. Даже если заметок нереально много.

Неточный поиск

Но главное - Обсидиан не позволяет искать по смыслу. Он ищет по ключевым словам. А векторные базы данных позволяют искать по смыслу, что гораздо эффективнее. Например, если вам надо вспомнить, про какой итальянский десерт мы говорили, то в Обсидиане вы должны помнить ключевое слово “десерт” или “итальянский” - а из там может не быть. Там может быть только “тирамису”. Карпатый всех проклял с идеей про Обсидиан. Я уверен, он уже 1000 раз пожалел об этом. А ещё токенов с постоянным перечитыванием агентом всей памяти из обсидиана - это огромная трата токенов. А векторные базы данных позволяют искать по смыслу и подгружать в мозг агента только то, что близко по смыслу запроса. Это экономит токены и ускоряет работу агента. И это очень быстро происходит, потому что векторные базы данных оптимизированы для таких операций.

Как

Самый простой метод подключения семантической векторной памяти - это взять небольшую коллекцию в облаке через сервис recall.select и отдать её на подключение своему агенту. Там буквально в 3 клика всё делается.

Или как вариант, даже под SQLite есть векторные расширения - уже лучше, чем в файлах хранить или в Обсидиане.