Восем бясплатных вектарных баз для 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-вымярных вектароў, пры чым адстань перад Milvus і Qdrant Local на там самай апаратазе становіць 22 разы. Гэта трэба спрыятаць як тверджэнне віробніка: ёно апісвае платную версію з 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 ГБ памяці RAM. Адкрытыя рашэннія паўніста скасоўваюць гэтыя меры, але дадаюць додатковыя труднасці з адпрацоўкай і стэжэннем за сабой кластэрам. Час адпрацоўкі запытоў таксама зменшаецца або збільшаецца залежна ад размеру набора дадзеных і складнасці фільтраў, таму неабходна тэставаць на рэальныя навантажэння агента.
# 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, а дзвойная база дадзеных толькі для памяці была б небажанаю.
Шаблон памяці. Пастойная памяць зберагаецца ўнутрь галоўной базы дадзеных. Яго прынцыпавая перадчыннасць над спецыяльным двігунам — гэта транзакцыйная адпаведнасць, каліколькі змены ў памяці фіксуюцца разам з рэляцыйнымі радкамі прыкладнэца.
Недзеянне. Спецыяльна створаныя вектарныя базы дадзеных параджуць яму у большых запытках з фільтрацыяй, і ў разлучаных або перыферыйных сцэнарах ўжыццё нея рэалістычна, калі толькі вы не гатовы запускаць там таксама цэлую інстанцыю 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; выбір між ямі залежыць ад масштаба, патрэб у канкуранцыі і ад таго, сколькі аператывнай працы можа выконваць ваша команда.
Супакульна літэратура
- Як працюе RAG: Эмбеддынгі, базы вектарных дадзеных і чанкаванне — Адступіце за адным фрагментам тэксту ад токенізацыі праз пулінг да пошуку за косайным сяродзець, і пазнакайце, чаму самэ чанкаванне і мадэлі эмбеддынга вялікага значэння адначынае якасць RAG.
- Значэнне як коордынаты: Ад эмбеддынгаў да баз вектарных дадзеных і RAG — Простыя пояснэнні ўтварэння эмбеддынгаў аб’ектаў, косайнага сяродзець, баз вектарных дадзеных і цыклу RAG, з чатырма маленькімі рэчамі пра сябеў, кацоў і Парыж, якія паказвают, як працуе пошук за значэннем.