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

How to Install and Run OpenClaw (Previously Clawdbot/Moltbot) on Mac
Turn your Mac into an AI gateway for WhatsApp, Telegram, Discord, iMessage, and more — in under 5 minutes.

Zilliz Cloud Enterprise Vector Search Powers High-Performance AI on AWS
Zilliz Cloud on AWS powers secure, scalable, ultra-fast vector search for enterprise AI apps, with BYOC, sub-10ms latency, and zero-DevOps simplicity.

Similarity Metrics for Vector Search
Exploring five similarity metrics for vector search: L2 or Euclidean distance, cosine distance, inner product, and hamming distance.



