46.6kЗаказать демоВойтиНачать бесплатно

Как подключиться к Milvus Lite с помощью LangChain и LlamaIndex

Jun 08, 20244 min read

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.

В следующих разделах мы рассмотрим:

  1. Подключение к Milvus Lite с использованием LlamaIndex

  2. Подключение к Milvus Lite с использованием LangChain

  3. Подключение к 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

Но что происходит за кулисами? Давайте разберем фактические шаги и сделаем значения по умолчанию более явными:

  1. Запустите сервер Milvus Lite и подключитесь.

  2. Выберите модель эмбеддингов.

  3. Создайте коллекцию базы данных Milvus.

    1. Определите схему.

    2. Выберите индекс (структуру данных для поиска Approximate Nearest Neighbor).

    3. Выберите метрику расстояния (определение «близости» в векторном пространстве).

    4. Выберите уровень согласованности для вставки данных.

  4. Выберите стратегию разбиения на фрагменты.

  5. Преобразуйте фрагменты данных в векторы с помощью инференса модели эмбеддингов.

  6. Вставьте векторные данные в 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

Документация Milvus Lite LlamaIndex

Документация Milvus Lite LangChain

Документация LangChain Milvus

Документация LlamaIndex Milvus

Обновлено Jul 09, 2026