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

Начало работы с подключением Milvus

Nov 25, 20233 min read

Milvus — это векторная база данных с открытым исходным кодом для создания AI-приложений с эмбеддингами неструктурированных данных. В ней уже встроено всё необходимое для начала работы, и она запускается на вашем локальном компьютере или размещается в Zilliz Cloud (см. блокнот connect to Zilliz Free Tier).

У Milvus есть четыре SDK: Java, Python, React и Ruby. Ниже мы покажем шаги для Python.

  1. Установите и запустите сервер Milvus

pip install milvus pymilvus #pymilvus is the python sdk

from milvus import default_server
default_server.start()

Примечание: Если вы подключаетесь к Zilliz, вы можете пропустить установку Milvus и вместо этого запустить кластер из консоли.

  1. Получите клиент Milvus (подключение)

from pymilvus import connections

connections.connect(
   host=’127.0.0.1’,
   port=default_server.listen_port)

Примечание: Чтобы подключиться к serverless Milvus, работающему в Zilliz Cloud, вместо localhost, вам нужно получить endpoint uri и token из консоли.

from pymilvus import connections

ENDPOINT=”https://endpoint.api.region.zillizcloud.com:443”
connections.connect(
   uri=ENDPOINT,
   token=TOKEN)
  1. Создайте коллекцию

Коллекцию можно представить как таблицу базы данных. Это место, где вы будете хранить свои эмбеддинги, документы и любые дополнительные метаданные.

С коллекцией связаны схема и индекс.

Индекс строится с использованием векторного алгоритма поиска и метрики векторного сходства. Вы можете использовать настройки Milvus по умолчанию. Однако для оптимальной производительности вам следует настроить параметры. Выбор поискового индекса и параметров зависит от ваших данных. См. это руководство по лучшим практикам для выбора поискового индекса. В этом блокноте показано, как изменить параметры.

from pymilvus import (
   FieldSchema, DataType, 
   CollectionSchema, Collection)

## 1. Define a minimum expandable schema.
fields = [
   FieldSchema(“pk”, DataType.INT64, is_primary=True, auto_id=True),
   FieldSchema(“vector”, DataType.FLOAT_VECTOR, dim=768),
]
schema = CollectionSchema(
   fields,
   enable_dynamic_field=True,
)

## 2. Create a collection.
mc = Collection(“my_collection_name”, schema)

## 3. Index the collection.
mc.create_index(
   field_name=”vector”,
   index_params={
       “Index_type”: “AUTOINDEX”,
       “Metric_type”: “COSINE”,
       }
  1. Вставьте данные в Milvus

Если у вас уже есть сгенерированные эмбеддинги из ваших неструктурированных данных, вы можете загрузить их.

Входные данные могут быть в форме pandas dataframe или списка словарей. Они должны содержать векторный эмбеддинг. Остальные поля являются необязательными: исходный текстовый фрагмент и поля метаданных.

from pymilvus import connections

## 1. Input data can be pandas dataframe or list of dicts.
data_rows = []
data_rows.extend([
   {“vector”: np.random.randn(768).tolist(),
    “text”: “This is a document”,
    “source”: “source_url_1”},
   {“vector”: np.random.randn(768).tolist(),
    “text”: “This is another document”,
    “source”: “source_url_2”},
])

## 2. Insert data into milvus.
mc.insert(data_rows)
mc.flush()
  1. Запросите коллекцию

Вопросы необходимо эмбеддить с использованием той же модели, которая использовалась для эмбеддинга неструктурированных данных, загруженных в базу данных. Вы можете запрашивать коллекцию, используя эмбеддинги вопросов с параметрами поиска Milvus по умолчанию. Те же лучшие практики применяются к выбору правильного поискового индекса для оптимальной производительности.

Ниже Milvus вернет top_k = 3 наиболее похожих результата. Также обратите внимание, что возвращаются исходный фрагмент текста и метаданные, что может помочь с grounding (основанием сгенерированного текста на фактической информации для снижения галлюцинаций).

## 1. Search for answers to your embedded questions.
mc.load()
results = mc.search(
   data=encoder([“my_question_1”]),
   anns_field=”vector”,
   output_fields-[“text”, “source”], #optional return fields
   limit=3,
   param={}, #no params if using milvus defaults
)

## 2. View the answers.
for n, hits in enumerate(results):
   print(f”{n}th result:”)
   for hit in hits:
      print(hit)

В моем следующем блоге я расскажу, как создать чат-бота с использованием LangChain и Milvus. Оставайтесь на связи.

Дополнительные ресурсы для начала работы с Milvus и Zilliz

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