Порівняння восьми безкоштовних баз даних векторів для AI-агентів: обмеження, придатність та компроміси.
Вісім баз даних векторів із безкоштовними тарифами порівнюються з точки зору пам’яті агента: жорсткі обмеження, можливості впровадження, конкурентоспроможність та те, яка з них підходить для AI-агентів у вашому середовищі.
Вісім векторних баз даних знову і знову згадуються, коли люди створюють агентів з обмеженим бюджетом: VectorAI DB Community Edition, Qdrant, Weaviate, Milvus, ChromaDB, LanceDB, pgvector та Pinecone. Кожна з них спочатку є безкоштовною. Це не те саме, що безкоштовна послуга у великих масштабах, і ще не те саме, що можливість розгортання будь-де, де має працювати агент.
Агенти значно більше покладаються на векторний сховище, ніж будь-яка окрема система типу RAG. Їхня пам’ять постійно записується та читається протягом багатьох сеансів. Тож потрібно знати, чи залишиться ця пам’ять при рестарті, як будуть поводитися часи відповіді, коли виклики накладаються один на одного, та чи може двигун працювати поруч із агентом, навіть на пристрої з нестабільним або відсутнім з’єднанням.
Безкоштовний тариф не може забезпечити все це. Щоб перевірити рівень затримки під справжньою одночасною навантаженістю, зазвичай потрібен платний план достатньої ємності для створення такого навантаження. Проте безкоштовні тарифи все ж таки показують, де кожен постачальник встановлює свої обмеження, і деякі з цих обмежень виключають певний варіант ще до написання коду. Одна служба видаляє неактивний кластер через 14 днів. Інша не має версії для самостійного розміщення, що виключає її у випадку, коли дані не можуть покинути вашу інфраструктуру. Кожен з описаних нижче варіантів чітко вказує свої обмеження, щоб ви могли підібрати базу даних до своєї системи та зрозуміти, що доведеться відмовитися. Обмеження, ліміти та ціни часто змінюються, тому перед прийняттям рішення перевірте актуальні цифри на сторінці з ціноутворенням кожного постачальника.
Критерії
Було порівняно вісім баз даних за п’ятьма критеріями, які мають значення саме для агентів.
- Тип безкоштовного тарифу. Повністю самостійне хостинг без обмежень щодо векторних даних, або керований безкоштовний план із обмеженнями щодо простору зберігання чи векторних даних, або бібліотека замість бази даних.
- Патерн використання пам’яті. Який дизайн пам’яті агента забезпечує база даних.
- Затримка під навантаженням. Як система поводиться, коли одночасно надходять кілька запитів від агентів.
- Можливість роботи локально. Чи може система працювати повністю на власних серверах без залежності від хмари.
- Що ламається після досягнення безкоштовного тарифу. Момент, коли щось починає не працювати або з’являються витрати.
Більшість опублікованих порівнянь стосуються завдань типу RAG чи рекомендацій, у яких база даних відповідає на запити без збереження стану та будується з фіксованого набору документів. Агенти відрізняються тим, що накопичують пам’ять протягом сеансів. Сховище має зберігати стан, а не лише відповідати на запити, що змінює перелік прийнятних компромісів.
Вісім варіантів, по одному
1. VectorAI DB Community Edition
VectorAI DB — це векторна база даних, яку можна запускати самостійно; вона розроблена для однакової роботи як на ноутбуці розробника, так і в автономному продакшн-середовищі.
Безкоштовний тариф. Community Edition працює на власному сервері та має обмеження у 5 000 векторів, що є найнижчим жорстким лімітом. За повідомленнями, окремий 30-денний пробний період підвищує цей ліміт до одного мільйона. Він постачається у вигляді одного Docker-контейнера без зовнішніх залежностей, таких як Kubernetes, etcd чи системи зберігання об’єктів. Його розробник оприлюднив результати тестування, згідно з якими на комп’ютері з 64 ГБ можна виконувати близько 745 запитів на секунду для 10 мільйонів 768-вимірних векторів, що на 22 рази краще, ніж у Milvus та Qdrant Local на такому ж обладнанні. Вважайте це твердженням виробника: воно стосується платної версії з 10 мільйонами векторів, а не безкоштовної версії з 5 000 векторів.
Підходить для агентів тоді, коли агент мусить працювати там, де знаходяться дані, а не там, де розташований центр обробки даних у провайдера хмарних послуг: на об’єктах із відокремленим зв’язком, де діють суворі правила резидентності даних, з використанням обладнання типу NVIDIA Jetson та Raspberry Pi, або в будь-яких ситуаціях, коли сам вихід даних у хмару є проблемою. Виробник пропонує конфігурації, готові до дотримання вимог, для додатків, створених на їхній основі, що не є тим самим, що й сертифікація, яка постачається з безкоштовною версією.
Шаблон пам’яті. Пам’ять для агентів, що працюють на периферії чи офлайн, а також міцна пам’ять взагалі. Дані зберігаються на диску та повертаються після перезавантаження, а наявність лише одного контейнера для виконання роботи робить офлайн- та відокремлені сценарії використання практичними, коли Kubernetes недоступний.
Недолік. Ви самі його хостите, крапка. Не існує безкоштовних планів з керованими хмарними сервісами, на відміну від Pinecone чи Qdrant Cloud, тому команда, яка не хоче, щоб хтось керував серверами, повинна обрати інший варіант.
# VectorAI DB -- basic similarity search.
from actian_vectorai import VectorAIClient, VectorParams, Distance
with VectorAIClient("localhost:6574") as client:
client.collections.create(
"agent_memory",
vectors_config=VectorParams(size=768, distance=Distance.Cosine),
)
client.points.upsert(
"agent_memory",
points=[{"id": 1, "vector": [0.1] * 768, "payload": {"text": "example memory"}}],
)
results = client.points.search(
"agent_memory",
query_vector=[0.1] * 768,
limit=5,
)
2. Qdrant
Qdrant — це база даних векторів з відкритим кодом, написана на мові Rust. Ви можете самостійно розмістити її без обмежень щодо кількості векторів або запустити на Qdrant Cloud.
Безкоштовний тариф. Запустіть її на власному обладнанні — Qdrant не коштує нічого та не має обмежень (лицензія Apache 2.0). На Qdrant Cloud безкоштовний план надає один вузол з піввідповідною кількістю vCPU, 1 ГБ пам’яті та 4 ГБ простору зберігання, що приблизно достатньо для мільйона векторів з 768 вимірами.
Підходить для агентів, коли вам потрібен швидкий фільтрований пошук у продакшні та потрібні клієнтські бібліотеки для Python, TypeScript, Rust, Go, Java та .NET.
Модель пам’яті. Постійна пам’ять агента. Фільтрація вантажу у поєднанні з пошуком векторів дозволяє агенту зберігати дані з метаданими, такими як ідентифікатор користувача, сеанс та час створення, а потім отримувати фільтровану частину даних під час запиту.
Недолік. Безкоштовний хмарний план працює, але має обмеження у 1 ГБ оперативної пам’яті. Самостійне розміщення скасовує це обмеження, але додає обов’язки з керуванням та моніторингом власного кластера. Затримка запитів також змінюється залежно від розміру набору даних та складності фільтрів, тому необхідно тестувати на реальному навантаженні агента.
# Qdrant -- basic similarity search.
from qdrant_client import QdrantClient
from qdrant_client.models import VectorParams, Distance, PointStruct
client = QdrantClient(url="http://localhost:6333")
client.create_collection(
collection_name="agent_memory",
vectors_config=VectorParams(size=768, distance=Distance.COSINE),
)
client.upsert(
collection_name="agent_memory",
points=[PointStruct(id=1, vector=[0.1] * 768, payload={"text": "example memory"})],
)
results = client.query_points(
collection_name="agent_memory",
query=[0.1] * 768,
limit=5,
)
Самостійне розміщення агента з пам’яттю у Qdrant сьогодні є перевіреним рішенням. Однак для систем у ізольованому середовищі проблема полягає у тому, що ви все одно повинні самостійно керувати всією інфраструктурою.
3. Weaviate
Weaviate — це база даних векторів з відкритим кодом, у якій кожен запит містить гібридний пошук, що поєднує щільні вектори зі збігом ключових слів за алгоритмом BM25.
Безкоштовний тариф. Самостійне розміщення Weaviate є безкоштовним та необмеженим за ліцензією BSD-3. Його хмарна версія наразі пропонує 14-денну пробну версію у сандбоксі, після чого — платні тарифи, тож перевірте сторінку з цінами для отримання актуальної інформації.
Підходить для агентів, коли один запит має поєднувати збіг ключових слів із семантичною схожістю. Прикладом є агент, який знаходить пам’ять, що має відповідати як точній назві елемента, так і нечіткому поняттю одночасно. Weaviate пропонує такі гібридні сценарії роботи через API REST та GraphQL.
Шаблон пам’яті. Гібридна пам’ять для пошуку. Поєднання BM25 з векторами — основна причина обрання Weaviate замість чистого векторного двигуна для відтворення інформації, особливо коли пам’ять залежить як від концепції, так і від точного терміна.
Недолік. Для хостингу безкоштовна пропозиція закінчується: це короткий пробний період, а не постійна підписка. Якщо хостувати систему самостійно, цю проблему можна уникнути, хоча витрати на пам’ять зростають з розміром даних, оскільки граф HNSW зберігається повністю в RAM.
# Weaviate -- basic similarity search.
import weaviate
from weaviate.classes.config import Configure
from weaviate.classes.query import MetadataQuery
client = weaviate.connect_to_local()
memories = client.collections.create(
name="AgentMemory",
vector_config=Configure.Vectors.self_provided(),
)
memories.data.insert(
properties={"text": "example memory"},
vector=[0.1] * 768,
)
response = memories.query.near_vector(
near_vector=[0.1] * 768,
limit=5,
return_metadata=MetadataQuery(distance=True),
)
client.close()
Агент, який мусить працювати на обмеженому апаратному забезпеченні на краю мережі, а не у завжди підключеному хмарному кластері, буде мати труднощі з розміщенням індексу, який повністю знаходиться у RAM.
4. Milvus
Milvus — це безкоштовний, розподілений двигун, призначений для колекцій, що містять сотні мільйонів векторів.
Безкоштовний тариф. Ви можете самостійно завантажити та запустити його без обмежень щодо кількості векторів (Apache 2.0). Існують два легші режими: Milvus Lite для локальної роботи та Standalone для одного вузла. Для високодоступних промислових кластерів потрібна розподілена архітектура, що включає Kubernetes, etcd та сховище об’єктів на кшталт MinIO. Також підтримується індексування з використанням GPU для дуже великих наборів даних.
Підходить для агентів, коли база знань міститиме сотні мільйонів або більше векторів, і ви хочете мати можливість вибору з одинадцяти або більше типів індексів, щоб налаштувати швидкість та ефективність пошуку для кожної колекції.
Шаблон пам’яті. Міцна пам’ять у дуже великих масштабах. Він стає доцільним тоді, коли обсяг даних є причиною уповільнення роботи системи зберігання пам’яті, але не підходить у ситуаціях, коли тиск походить від багатьох сеансів чи розгортання на периферійних пристроях.
Недолік. Вимоги до обладнання високі. Розподілений режим — це не те, що можна використовувати для побічних проектів; масштабування кількома вузлами створює справжню складність, а також цей підхід не підходить для периферійних пристроїв чи обладнання з обмеженими можливостями.
# Milvus -- basic similarity search.
from pymilvus import MilvusClient
client = MilvusClient(uri="http://localhost:19530", token="root:Milvus")
client.create_collection(collection_name="agent_memory", dimension=768)
client.insert(
collection_name="agent_memory",
data={"id": 1, "vector": [0.1] * 768, "text": "example memory"},
)
results = client.search(
collection_name="agent_memory",
data=[[0.1] * 768],
limit=5,
)
Якщо ви шукаєте більш легку альтернативу, уважно оцініть конфігурацію, засновану на Kubernetes, перш ніж використовувати її для векторного пошуку.
5. ChromaDB
ChromaDB — це відкритий векторний сховище, яке можна інтегрувати у власний процес майже без жодної налаштування.
Безкоштовний тариф. Він є безкоштовним без обмежень щодо кількості векторів, незалежно від того, чи використовується він у процесі Python, чи як окремий контейнер Docker. У офіційній інформації зазначено, що проект не пропонує оброблених хмарних послуг, хоча наразі може існувати хостована версія, тому перевірте сайт проекту.
Підходить для агентів, коли метою є швидкі експерименти з рівнем пам’яті, тестування розмірів блоків, налаштувань пошуку та запитів ще до створення інфраструктури.
Шаблон пам’яті. Робоча пам’ять. Підходить для короткочасної або етапної пам’яті всередині одного процесу агента, проте є менш ефективною як довготривалий сховище, яке використовують одночасно багато екземплярів агентів.
Недолік. Її ефективність не була доведена у великих промислових масштабах. Видалення елементів не зменшує розмір індексу, оскільки видалення елементів з графа є ресурсоємним, а структура HNSW лише зростає; фрагментація зберігається до тих пір, поки індекс не буде стиснутий або відновлений. Агент, який постійно додає та видаляє дані з пам’яті, змушений самостійно займатися їх очищенням, а також стикатися з обмеженнями одного вузла та необхідністю ручного відновлення.
# ChromaDB -- basic similarity search.
import chromadb
client = chromadb.PersistentClient(path="./agent_memory")
collection = client.get_or_create_collection(name="agent_memory")
collection.add(
ids=["1"],
embeddings=[[0.1] * 768],
documents=["example memory"],
)
results = collection.query(
query_embeddings=[[0.1] * 768],
n_results=5,
)
Коли кілька екземплярів агента потребують спільного використання одного сховища пам’яті, спочатку вичерпується ресурс вбудованої моделі. Зазвичай вирішенням є окремий сервер, до якого підключаються кілька процесів, а не щось, що існує всередині одного процесу Python.
6. LanceDB
LanceDB є програмним забезпеченням з відкритим кодом та вбудованим форматом: він працює з файлами в об’єктному сховищі та зовсім не потребує процесу сервера.
Безкоштовний тариф. Самостійно розгорнутий або вбудований LanceDB є безкоштовним, без обмежень щодо кількості векторів, під ліцензією Apache 2.0. Керований безсерверний варіант LanceDB Cloud перебував у приватному бета-тестуванні, і на момент написання документа вимагав наявності додатку, тому єдиним надійним варіантом є самостійне розгортання.
Підходить для агентів, коли вони працюють на периферії або всередині робочого процесу з науками про дані, де мережевий перехід до окремої бази даних є неприйнятним, і ви хочете, щоб сховище знаходилось у тому ж файловій системі, що й решта елементів конвеєра обробки даних.
Шаблон пам’яті. Периферійна та відокремлена пам’ять. Вбудована, безсерверна архітектура ідеально підходить для агента, який не може гарантувати стабільне з’єднання з процесом бази даних.
Недолік. Саме вбудована модель, яка робить її ефективною на периферії, також обмежує її при одночасній роботі. У багатоагентних системах часто кілька процесів одночасно записують дані в одну таблицю, що є найскладнішим завданням для внутрішнього сховища даних. Перевірте цей сценарій перед тим, як приймати рішення.
# LanceDB -- basic similarity search.
import lancedb
db = lancedb.connect("./agent_memory")
table = db.create_table(
"agent_memory",
data=[{"id": 1, "vector": [0.1] * 768, "text": "example memory"}],
)
results = table.search([0.1] * 768).limit(5).to_list()
7. pgvector
pgvector — це розширення для PostgreSQL, яке надає базі даних, якою ви вже керуєте, можливість пошуку за схожістю векторів, тож не потрібно додавати нову систему.
Безкоштовний тариф. Це розширення є безкоштовним та має відкритий код. Усі, хто вже платить за Postgres, отримують його безкоштовно. Ті, у кого немає Postgres, змушені використовувати цілу реляційну базу даних лише для пошуку векторів.
Підходить для агентів, коли додаток вже працює на Postgres, а окремий сховище даних лише для пам’яті було б небажаним.
Модель пам’яті. Постійна пам’ять зберігається всередині основної бази даних. Перевагою над спеціалізованим двигуном є транзакційна послідовність, оскільки записи в пам’ять зберігаються разом із рядками реляційної бази даних додатку.
Недолік. Спеціально створені векторні бази даних перевершують його у виконанні складних фільтрованих запитів, а їх використання у сценаріях із ізольованим зв’язком чи на периферійних пристроях є нереалістичним, якщо ви не готові також запускати там повну інстанцію Postgres.
# pgvector -- basic similarity search.
import psycopg
from pgvector.psycopg import register_vector
conn = psycopg.connect("dbname=agent_memory")
register_vector(conn)
conn.execute("CREATE EXTENSION IF NOT EXISTS vector")
conn.execute(
"CREATE TABLE IF NOT EXISTS memories (id bigserial PRIMARY KEY, "
"text text, embedding vector(768))"
)
conn.execute(
"INSERT INTO memories (text, embedding) VALUES (%s, %s)",
("example memory", [0.1] * 768),
)
results = conn.execute(
"SELECT text FROM memories ORDER BY embedding <-> %s LIMIT 5",
([0.1] * 768,),
).fetchall()
Якщо ваш обсяг роботи вимагає таких показників продуктивності, яких pgvector не може досягти, вам доведеться повністю відмовитися від моделі Postgres, і це той компроміс, який потрібно врахувати.
8. Pinecone
Pinecone працює як керований безсерверний сервіс, і ви не можете розмістити його самостійно.
Безкоштовний тариф. Тариф Starter надає 2 ГБ простору для зберігання індексів, максимум п’ять індексів, два мільйони одиниць запису та один мільйон одиниць читання щомісяця, усе це в одному регіоні AWS (us-east-1) та для одного проєкту. Жодних ограничень щодо кількості векторів не встановлено, тож спочатку буде обмежений простір для зберігання.
Підходить для агентів, коли ви не хочете, щоб щось працювало під час створення прототипу, та готові до того, що пам’ять агента буде розташована повністю на чужій інфраструктурі.
Шаблон пам’яті. Пам’ять обмежена під час створення прототипів. Безкоштовний план призначений для тестування та невеликих проектів, і він не підходить для поступового збільшення обсягу даних агента в умовах реальної роботи.
Недолік. Обмеження щодо обсягу зберігання — це не головна проблема для агентів. Справжньою проблемою є відсутність можливості самостійного розміщення серверів. Якщо дані мають залишатися в вашій інфраструктурі, Pinecone є непридатним варіантом, яким би щедрим не був безкоштовний план.
# Pinecone -- basic similarity search.
from pinecone import Pinecone, ServerlessSpec
import os
pc = Pinecone(api_key=os.environ["PINECONE_API_KEY"])
pc.create_index(
name="agent-memory",
dimension=768,
metric="cosine",
spec=ServerlessSpec(cloud="aws", region="us-east-1"),
)
while not pc.describe_index("agent-memory").status["ready"]:
pass
index = pc.Index("agent-memory")
index.upsert(vectors=[("1", [0.1] * 768, {"text": "example memory"})])
results = index.query(vector=[0.1] * 768, top_k=5)
База даних, яка існує виключно в хмарі, просто не є варіантом для розгортання, де обмеження повністю виключають використання хмарних послуг.
Як прийняти рішення
Приймайте рішення в такому порядку: де буде здійснюватися розгортання, що ви вже використовуєте та наскільки великою стане система.
Спочатку потрібно визначити місце розгортання, адже саме цей фактор може повністю заборонити певний варіант. База даних, яка існує лише в хмарі, не може бути розміщена на серверах у ізольованому середовищі, а коли правила вимагають залишати дані на місці, жоден безкоштовний план не змінює цього рішення. Ліміт зберігання — це лише цифра, за яку потрібно платити, щоб згодом його підвищити.
Є два фактори, які не входять до цього порядку. Якщо Postgres вже є частиною вашої інфраструктури, pgvector дозволяє уникнути необхідності створення додаткової бази даних під час її розгортання. Якщо ви плануєте працювати з мільярдами векторів, Milvus — це рішення, створене спеціально для цього з самого початку. А якщо ви лише створюєте прототип, почніть з ChromaDB локально та перейдіть на хостований ендпоїнт, коли у вас справді з’явиться така потреба.
Для розгортання на власному обладнанні, у ізольованих середовищах чи на периферії реалістичним варіантом є самохостовані рішення, а саме VectorAI DB, Qdrant, Milvus, LanceDB та pgvector. Вибір між ними залежить від потреб у масштабуванні, кількості одночасних операцій та обсягу операційної роботи, яку може виконувати ваша команда.