Векторная база данных что это: хранить смысл, а не текст
Векторная база хранит смысл записей в виде векторов, поэтому ИИ ассистент находит факт, даже когда слова вопроса не совпадают с записью. Разбор без кода.
Алекс, руководитель команды, поздним вечером сидит один в стеклянной переговорке, лоток входящих завален перепиской за полгода, и найти в ней нужную мысль поиском по словам не получается: он помнит суть разговора, а не точную фразу. Векторная база данных что это: хранилище, в котором записи лежат не только как текст, но и как векторы, числовые отпечатки смысла. Обычная база отвечает на вопрос «где встречается это слово», векторная на вопрос «где говорится о похожем». ИИ-ассистенту она нужна как долговременная память: языковая модель сама ничего не хранит между разговорами, а векторная база хранит факты о Вашем деле и отдаёт их по смыслу вопроса, даже если слова не совпадают ни в одной букве. Спросите «кто хотел смотреть уроки в записи», и база найдёт фразу «Галина уточняла, можно ли проходить курс не в прямом эфире». Обычной базе для этого понадобилось бы совпадение слов, векторной достаточно совпадения смысла. Ниже разберём без кода и формул, как такая база устроена, как она ищет и почему в итоге всё упирается в вопрос, который у Алекса пока висит без ответа: на чьём сервере она стоит.
Чем векторная база отличается от обычной
Обычная база данных хранит текст как последовательность символов и ищет точные совпадения. Спросите её «рассрочка», и она честно найдёт все записи со словом «рассрочка». Запись «клиентка просила разбить платёж на три части» она пропустит: совпадений нет. Для бухгалтерии и складского учёта это правильное поведение: номер счёта нельзя находить «примерно», там нужна точность, а не догадливость.
Рабочая переписка устроена иначе. Одну и ту же мысль Вы формулируете десятью способами и через месяц не вспомните, какими словами говорили. Вернёмся к примеру из начала статьи, он из практики онлайн-школы. В базе лежит фраза: «Галина уточняла, можно ли проходить курс не в прямом эфире». Через два месяца Вы спрашиваете ассистента: «кто хотел смотреть уроки в записи?» Общих слов в этих двух фразах нет вообще. Поиск по буквам вернёт пустоту, и это будет честная пустота: с его точки зрения искать нечего. У Алекса в переговорке та же картина: он ищет обещание, которое сам дал две недели назад, а поиск по словам этого обещания в собственном лотке входящих ничего не находит, потому что тогда он сформулировал мысль иначе.
Векторная база ищет не совпадение слов, а близость смысла. Вопрос про «уроки в записи» и фраза про «курс не в прямом эфире» лежат в ней рядом, потому что рядом их смыслы, и запись про Галину найдётся. Именно так ищет по своей памяти Хермес: её база с векторами стоит на сервере клиента в РФ, а не в чужом облаке.
Что лежит внутри: текст плюс его числовой отпечаток
Каждая запись в векторной базе хранится в двух видах сразу. Первый: сам текст, как он был сказан или написан. Второй: вектор, ряд из сотен или тысяч чисел, который описывает смысл этого текста. Вектор считает языковая модель, и у близких по смыслу фраз ряды чисел получаются близкими. Это похоже на то, как парфюмер переводит запах в координаты формулы: у двух непохожих по названию ароматов координаты могут оказаться рядом, если рядом их запах. Как именно смысл превращается в числа, мы разбираем в обзоре темы память ИИ-ассистента; для понимания базы достаточно самого факта: у каждой записи появляется числовой адрес в пространстве смыслов.
Зачем хранить оба вида? Вектор нельзя прочитать: из ряда чисел не восстановить исходную фразу. Поэтому роли разделены: вектор работает указателем, по которому запись находят, а текст остаётся источником, который ассистент читает и цитирует.
В остальном это обычная таблица на обычном диске. Рядом с текстом и вектором лежат привычные поля: дата, источник, к какому клиенту или проекту запись относится. Никакой отдельной «нейросетевой субстанции» в базе нет, и эта прозаичность нам ещё пригодится.
Как база ищет: ближайшие соседи вместо совпадений
Когда Вы задаёте вопрос, он тоже превращается в вектор. Дальше задача звучит геометрически: найти записи, чьи векторы лежат ближе всего к вектору вопроса, примерно как двое показывают пальцем в небо: важно не откуда они стоят, а в одну ли сторону смотрят пальцы. Такой поиск называют поиском ближайших соседей.
Перебирать все записи подряд можно, пока их сотни. Но память рабочего ассистента за год набирает сотни тысяч фрагментов, и отвечать на каждый вопрос полным перебором слишком долго. Поэтому векторные базы используют приближённый поиск: он согласен изредка пропустить идеального соседа ради скорости в тысячи раз выше.
Самый распространённый алгоритм такого поиска называется HNSW. Юрий Малков и Дмитрий Яшунин предложили строить из векторов многослойную структуру наподобие карты: верхние слои разреженные, как карта страны с одними магистралями, нижние подробные, как план квартала. Поиск спускается сверху вниз, на каждом шаге приближаясь к цели, и по оценке авторов сложность поиска растёт логарифмически: база может вырасти вдесятеро, а путь до нужной записи удлинится лишь на несколько шагов. Для Вас это означает простую вещь: ассистент находит факт среди сотен тысяч записей за доли секунды, и с ростом архива это свойство не теряется.
pgvector: векторная база внутри обычного Postgres
По слову «векторная» легко представить что-то экзотическое, доступное только большим лабораториям. Реальность скромнее. Один из самых распространённых инструментов, pgvector, это расширение PostgreSQL, обычной открытой базы данных, на которой десятилетиями работают банки и интернет-магазины. Расширение добавляет в знакомую базу новый тип колонки, вектор, и умение искать по близости смысла: точным перебором или приближённо, через тот самый HNSW.
Из этой обыденности следуют практические свойства. Векторная память наследует всё, что умеет Postgres: резервные копии, восстановление на момент времени, строгие гарантии сохранности транзакций. Векторы лежат в той же базе, что и остальные данные, рядом с текстами и датами. Документация pgvector называет и предел размерности: до 16 000 чисел в одном векторе. Код проекта открыт и опубликован на GitHub: его можно проверить и развернуть на любом своём сервере.
Для непрограммиста отсюда важен один вывод: векторная база это не закрытая магия провайдера, а проверяемая программа на конкретном сервере. Файлы такой базы можно скопировать, перенести на другой сервер и забрать с собой.
Зачем всё это ИИ-ассистенту
Соберём картину. Языковая модель между разговорами не хранит ничего: закрыли сессию, и сказанное исчезло. Долговременная память появляется как внешний слой рядом с моделью, и векторная база в этом слое главное хранилище, библиотекарь, который помнит смысл разговора, а не полку, где он лежал. Ассистент записывает туда факты из разговоров и документов, а при новом вопросе достаёт близкие по смыслу фрагменты и подкладывает их модели. Модель отвечает так, будто помнит, хотя читает подсказку, собранную из Вашей же базы.
Обычная база для этой роли не годится: она нашла бы прошлогоднюю договорённость, только если Вы дословно повторите тогдашнюю формулировку. Векторная снимает это требование, и разговор с памятью становится естественным: спрашивайте как удобно, а не как было записано.
Остаётся вопрос, который стоит задать раньше всех технических: где эта база стоит? Векторная база с памятью о Ваших клиентах, ценах и решениях это файлы на конкретном диске. Если диск принадлежит провайдеру, при уходе Вы оставите накопленное ему. Если сервер Ваш, база уезжает вместе с Вами. У Хермес память устроена по второму принципу: сервер с базой принадлежит клиенту и стоит в РФ.
Обычная база ищет точное слово, векторная ищет похожий смысл. Но главный выбор лежит не между ними, а между своей базой и чужой. Проверка простая: спросите поставщика ассистента, можете ли Вы получить файлы своей векторной базы. Ответ скажет о продукте больше любой презентации.
Чем векторная база данных отличается от обычной?
Обычная база хранит текст и ищет точные совпадения слов: запрос «рассрочка» найдёт только записи со словом «рассрочка». Векторная база хранит рядом с текстом его числовой отпечаток смысла и ищет близкие смыслы: запрос «кто просил разбить платёж» найдёт запись о рассрочке, хотя слова не совпадают ни разу. Для бухгалтерии и учёта точность обычной базы незаменима, а для памяти о живых разговорах нужен именно поиск по смыслу.
Зачем ИИ ассистенту нужна векторная база данных?
Языковая модель сама ничего не хранит между разговорами. Долговременная память ассистента живёт во внешней базе, и векторная база подходит для этой роли лучше всего: она находит записи по смыслу вопроса, а не по точным словам. Вы спрашиваете как удобно, другими словами, чем говорили месяц назад, а ассистент достаёт нужный факт из сотен тысяч записей за доли секунды и подкладывает его модели в момент ответа.
Что такое pgvector простыми словами?
pgvector это открытое расширение для PostgreSQL, обычной проверенной базы данных. Оно добавляет тип «вектор» и поиск по близости смысла, точный и приближённый. Векторная память на pgvector наследует свойства Postgres: резервные копии, восстановление на момент времени, надёжность транзакций. Код проекта опубликован на GitHub, базу можно развернуть на собственном сервере и забрать целиком: именно так устроена память Хермес.
источники (2)
- pgvector: open-source vector similarity search for Postgres · GitHub, pgvector
- Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs · arXiv, Malkov, Yashunin · 2016