Как подключиться к 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
Читать далее

Zilliz Cloud BYOC Now Available Across AWS, GCP, and Azure
Zilliz Cloud BYOC is now generally available on all three major clouds. Deploy fully managed vector search in your own AWS, GCP, or Azure account — your data never leaves your VPC.

What Exactly Are AI Agents? Why OpenAI and LangChain Are Fighting Over Their Definition?
AI agents are software programs powered by AI that can perceive their environment, make decisions, and take actions to achieve a goal—often autonomously.

Vector Databases vs. Hierarchical Databases
Use a vector database for AI-powered similarity search; use a hierarchical database for organizing data in parent-child relationships with efficient top-down access patterns.



