Как подключиться к Milvus Lite с помощью LangChain и LlamaIndex
Milvus Lite, выпущенный всего неделю назад, 31 мая, теперь является методом по умолчанию для сторонних коннекторов, таких как LangChain и LlamaIndex, для подключения к Milvus, популярной векторной базе данных с открытым исходным кодом.
| Метод | Уровень контроля процесса извлечения | Время (секунды) |
| LlamaIndex | Нет контроля | 2156 |
| LangChain | Полный контроль | 8 |
| Milvus Lite API | Полный контроль | 28 |
Таблица: Временные показатели с использованием одной и той же модели эмбеддингов HuggingFace (BAAI/bge-large-en-v1.5) и одних и тех же HTML-файлов данных.
Результат? Если вы ищете лучший баланс между высоким уровнем контроля над настройками Milvus и быстрой настройкой, прямое использование API Milvus Lite — оптимальный выбор. Полный код и временные показатели доступны на моем GitHub.
В следующих разделах мы рассмотрим:
Подключение к Milvus Lite с использованием LlamaIndex
Подключение к Milvus Lite с использованием LangChain
Подключение к Milvus Lite с использованием Milvus APIs
Подключение к Milvus Lite с использованием LlamaIndex
Начать работу с LlamaIndex легко. Подключение и создание коллекции занимает около 2000 секунд.
from pymilvus import MilvusClient
from llama_index.core import (
Settings,
ServiceContext,
StorageContext,
VectorStoreIndex,
)
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.vector_stores.milvus import MilvusVectorStore
# 1. Define the embedding model.
service_context = ServiceContext.from_defaults(
# LlamaIndex local: translates to the same location as default HF cache.
embed_model="local:BAAI/bge-large-en-v1.5")
# LlamaIndex hides this but we need it to create the vector store!
EMBEDDING_DIM = 1024
# 2. Create a Milvus collection from the documents and embeddings.
milvus_client = MilvusClient()
vector_store = MilvusVectorStore(
client=milvus_client,
dim=EMBEDDING_DIM,
overwrite=True
)
storage_context = StorageContext.from_defaults(
vector_store=vector_store
)
llamaindex = VectorStoreIndex.from_documents(
# Chunk, embed, insert too slow! Just use one document.
docs[:1],
storage_context=storage_context,
service_context=service_context
)
Подключение к Milvus Lite с использованием LangChain
Начать работу с LangChain легко. Подключение и создание коллекции занимает около 8 секунд.
from langchain_milvus import Milvus
from langchain_huggingface import HuggingFaceEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 1. Define the embedding model.
model_name = "BAAI/bge-large-en-v1.5"
model_kwargs = {'device': 'cpu'}
encode_kwargs = {'normalize_embeddings': True}
embed_model = HuggingFaceEmbeddings(
model_name=model_name,
model_kwargs=model_kwargs,
encode_kwargs=encode_kwargs)
EMBEDDING_DIM = embed_model.dict()['client'].get_sentence_embedding_dimension()
# 2. Create a Milvus collection from the documents and embeddings.
start_time = time.time()
vectorstore = Milvus.from_documents(
documents=docs,
embedding=embed_model,
connection_args={
"uri": "./milvus_demo.db",},
# Override LangChain default values for Milvus.
consistency_level="Eventually",
drop_old=True,
index_params = {
"metric_type": "COSINE",
"index_type": "AUTOINDEX",
"params": {}}
)
Подключение к Milvus Lite с использованием API Milvus Lite
Но что происходит за кулисами? Давайте разберем фактические шаги и сделаем значения по умолчанию более явными:
Запустите сервер Milvus Lite и подключитесь.
Выберите модель эмбеддингов.
Создайте коллекцию базы данных Milvus.
Определите схему.
Выберите индекс (структуру данных для поиска Approximate Nearest Neighbor).
Выберите метрику расстояния (определение «близости» в векторном пространстве).
Выберите уровень согласованности для вставки данных.
Выберите стратегию разбиения на фрагменты.
Преобразуйте фрагменты данных в векторы с помощью инференса модели эмбеддингов.
Вставьте векторные данные в Milvus.
Вот Python-код, напрямую использующий API Milvus Lite. Подключение и создание коллекции занимает около 28 секунд.
import pymilvus
# STEP 1. CONNECT A CLIENT TO LIGHT MILVUS PYTHON SERVER.
from pymilvus import MilvusClient
mc = MilvusClient("milvus_demo.db")
# STEP 2. DOWNLOAD AN OPEN SOURCE EMBEDDING MODEL.
from sentence_transformers import SentenceTransformer
model_name = "BAAI/bge-large-en-v1.5"
encoder = SentenceTransformer(model_name, device=’cpu’)
# STEP 3. CREATE A MILVUS COLLECTION AND DEFINE THE DATABASE INDEX.
# Uses Milvus AUTOINDEX, which defaults to HNSW.
COLLECTION_NAME = "MilvusDocs"
mc.create_collection(COLLECTION_NAME,
EMBEDDING_DIM,
consistency_level="Eventually",
auto_id=True,
overwrite=True,)
# STEP 4. CHUNK DATA INTO VECTORS.
from langchain_community.document_transformers import BeautifulSoupTransformer
from langchain.text_splitter import RecursiveCharacterTextSplitter
# Define chunk size and overlap.
chunk_size = 512
chunk_overlap = np.round(chunk_size * 0.10, 0)
# Split the documents into recursive, overlapping chunks.
child_splitter = RecursiveCharacterTextSplitter(
chunk_size = chunk_size,
chunk_overlap = chunk_overlap,
length_function = len, # use built-in Python len function)
chunks = child_splitter.split_documents(docs)
# STEP 5. TRANSFORM CHUNKS INTO VECTORS USING EMBEDDING MODEL INFERENCE.
list_of_strings = [doc.page_content for doc in chunks if hasattr(doc, 'page_content')]
embeddings = torch.tensor(encoder.encode(list_of_strings))
# STEP 6. INSERT CHUNK LIST INTO MILVUS.
# First, create chunk_list and dict_list.
dict_list = []
for chunk, sparse, dense in zip(chunks, embeddings["sparse"], embeddings["dense"]):
chunk_dict = {
'chunk': chunk.page_content,
'source': chunk.metadata.get('source', ""),
'vector': dense
}
dict_list.append(chunk_dict)
mc.insert(
COLLECTION_NAME,
data=dict_list,
progress_bar=True)
Выбор подходящего метода Milvus Light
Хотя различные API Milvus Lite предлагают удобства, они имеют компромиссы с точки зрения контроля над методами извлечения и разбиения на фрагменты, а также скорости.
Прямое использование API Milvus Lite обеспечивает максимальный контроль над настройками извлечения Milvus в сочетании с самой высокой скоростью создания коллекции.
Ресурсы и дополнительное чтение
Документация Milvus Lite LlamaIndex
Документация Milvus Lite LangChain
Читать далее

Will Amazon S3 Vectors Kill Vector Databases—or Save Them?
AWS S3 Vectors aims for 90% cost savings for vector storage. But will it kill vectordbs like Milvus? A deep dive into costs, limits, and the future of tiered storage.

Announcing the General Availability of Zilliz Cloud BYOC on Google Cloud Platform
Zilliz Cloud BYOC on GCP offers enterprise vector search with full data sovereignty and seamless integration.

Optimizing Embedding Model Selection with TDA Clustering: A Strategic Guide for Vector Databases
Discover how Topological Data Analysis (TDA) reveals hidden embedding model weaknesses and helps optimize vector database performance.



