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

Начало работы с Zilliz REST API

Jul 25, 20238 min read

Zilliz Cloud — это комплексный сервис векторной базы данных, который обеспечивает и ускоряет работу приложений искусственного интеллекта (AI) и аналитики в масштабе. Он построен на Milvus — надежной и масштабируемой векторной базе данных с открытым исходным кодом, которая легко справляется с миллиардами векторных эмбеддингов.

Milvus упрощает работу с неструктурированными данными, позволяя компаниям эффективно анализировать огромные объемы данных и получать из них ценные сведения. Предоставляя вам масштабируемую, готовую к облаку векторную базу данных, Zilliz Cloud служит универсальным решением.

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

Одна из функций, которые Zilliz Cloud добавляет к Milvus, — это REST API для управления вашими векторными базами данных, с простыми методами для работы с коллекциями, загрузки и удаления данных, а также отправки запросов. В этой статье мы покажем, как использовать эти API. Начнем!

Прежде чем начать

Для прохождения этого руководства вам понадобится несколько вещей:

Во-первых, вам понадобится учетная запись Zilliz Cloud. Если она у вас уже есть, вы можете сразу перейти к получению URL вашего кластера и API-ключа.

Все, что рассматривается в этой статье, работает с бесплатной учетной записью, поэтому вам нужно только перейти сюда и нажать Get Started Free. Затем войдите в свою панель Zilliz и следуйте подсказкам, чтобы создать кластер.

Создать новый кластер Создать новый кластер

Дайте ему имя. Параметров по умолчанию достаточно для этого руководства. Нажмите Next: Create Collection.

Создать коллекцию для вашего нового кластера Создать коллекцию для вашего нового кластера

Выберите Example Collection, а затем Create Collection and Cluster.

Подключиться к вашему кластеру Подключиться к вашему кластеру

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

Примеры в этом руководстве будут содержать код из Visual Studio Code и плагина vscode-restclient.

Запросы можно найти здесь, в gist. Вы можете выполнять шаги вместе с любым HTTP-клиентом или использовать Playground в своей панели Zilliz.

Обзор Zilliz REST API

Zilliz REST API содержит методы для управления кластерами, коллекциями и векторными данными. Мы сосредоточимся на последних двух категориях: создании коллекций для хранения данных и управлении данными внутри коллекции.

Операции с коллекциями включают:

  • List

  • Create

  • Describe

  • Drop

Операции с векторами включают:

  • Query

  • Get

  • Insert

  • Delete

  • Search

Компоненты API-вызова

Первая часть всех ваших конечных точек API — это публичная конечная точка вашего кластера, которую вы скопировали выше, за ней следуют версия API и /vector/, который является каталогом верхнего уровня для методов API.

Например, URL моего кластера начинался с этого:

https://in03-75204f04fc4368d.api.gcp-us-west1.zillizcloud.com/v1/vector

В примерах вызовов будет использоваться $PUBLIC_ENDPOINT как заполнитель для имени хоста вашего кластера.

Для каждого API-вызова требуются два заголовка:

  1. content_type - это всегда application/json. Это сообщает веб-серверу, что любые отправляемые вами данные являются JSON.

  2. Authorization - все запросы требуют этот заголовок с вашим API-ключом.

В примерах вызовов $YOUR_API_KEY будет использоваться как заполнитель для имени хоста вашего кластера.

Начнем с коллекций.

Начало работы с Zilliz API

Создание, описание, удаление и вывод списка коллекций

Сначала давайте выведем список коллекций в вашем кластере.

Эндпоинт для операций с коллекциями — /collections. Вызов GET к нему возвращает список.

Вот вызов в VS Code Rest Client:

GET https://$PUBLIC_ENDPOINT/v1/vector/collections HTTP/1.1
content-type: application/json
Authorization: Bearer $YOUR_API_KEY

А вот ответ со всеми заголовками. В дальнейшем я буду их опускать.

HTTP/1.1 200 OK 
content-type: application/json; charset=utf-8 
Content-Length: 40 
x-ratelimit-remaining-second: 999 
x-ratelimit-limit-second: 1000 
ratelimit-limit: 1000 
ratelimit-remaining: 999 
ratelimit-reset: 1 x-sso-plugin-version: v0.0.1 
date: Mon, 10 Jul 2023 17:53:12 GMT 
vary: Origin access-control-allow-origin: * 
requestid: 8c5a2031-afbe-4fa2-9a28-8195e1f20357 
strict-transport-security: max-age=31536000; includeSubDomains 
x-content-type-options: nosniff via: 1.1 google Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 
Connection: close 
{ 
  "code": 200, 
   "data": [ 
      "medium_articles" 
    ] 
}

Сервер возвращает код успеха 200 и поле data с вектором имен коллекций.

Давайте добавим новую коллекцию, а затем получим новый список.

Для этого выполните POST документа, описывающего коллекцию, в /collections/create.

POST https://$PUBLIC_ENDPOINT/v1/vector/collections/create HTTP/1.1
content-type: application/json
Authorization: Bearer $YOUR_API_KEY

{
    "collectionName": "large_articles",
    "dimension": 256,
    "metricType": "L2",
    "primaryField": "id",
    "vectorField": "vector"
}

Вы можете указать пять полей для описания вашей коллекции:

  • collectionName - имя является обязательным.

  • dimension - количество измерений для векторного поля также является обязательным.

  • metricType - тип метрик сходства, используемых для измерения сходства между векторами. В этом примере тип метрики по умолчанию — L2, представляющий евклидово расстояние.

  • primaryField - первичное поле по умолчанию — id.

  • vectorField - векторное поле по умолчанию — vector.

При успехе Zilliz отвечает 200 и пустым документом.

HTTP/1.1 200 OK

{
  "code": 200,
  "data": {}
}

Снова выведите список ваших коллекций, и вы увидите два имени.

HTTP/1.1 200 OK

{
  "code": 200,
  "data": [
    "medium_articles",
    "large_articles"
  ]
}

Вы можете получить описание существующей коллекции. Для этого отправьте GET с collectionName в качестве параметра запроса.

GET https://$PUBLIC_ENDPOINT/v1/vector/collections/describe?collectionName=medium_articles HTTP/1.1
content-type: application/json
Authorization: Bearer $YOUR_API_KEY

Этот ответ представляет собой подробное описание текущего состояния вашей коллекции.

HTTP/1.1 200 OK

{
  "code": 200,
  "data": {
    "collectionName": "medium_articles",
    "shardsNum": 2,
    "description": "demo collection",
    "load": "loaded",
    "enableDynamicField": true,
    "fields": [
      {
        "name": "id",
        "type": "int64",
        "primaryKey": true,
        "autoId": true,
        "description": ""
      },
      {
        "name": "title_vector",
        "type": "floatVector(256)",
        "primaryKey": false,
        "autoId": false,
        "description": ""
      }
    ],
    "indexes": [
      {
        "indexName": "vector_idx",
        "fieldName": "vector",
        "metricType": "L2"
      }
    ]
  }
}

Наконец, давайте завершим, удалив коллекцию, которую вы только что создали. Это POST-запрос к /collections/drop, поэтому вместо передачи имени в качестве параметра используйте JSON-документ.

POST https://$PUBLIC_ENDPOINT/v1/vector/collections/drop HTTP/1.1
content-type: application/json
Authorization: Bearer $YOUR_API_KEY

{
    "collectionName": "large_articles"
}

Ответ похож на тот, который Zilliz отправляет при создании коллекции.

HTTP/1.1 200 OK

{
"code": 200,
"data": {}
}

Запросите еще один список коллекций, и вы увидите, что снова осталась одна. Теперь давайте поработаем с данными.

Вставка данных

Чтобы вставить данные, отправьте POST на /insert с документом, описывающим данные.

Глядя на описание, которое вы получили выше, пример коллекции имеет два поля:

  • id - целочисленное значение

  • title_vector - вектор с 768 числами с плавающей точкой

Итак, вам нужен документ со значением, которое содержит эти два поля в поле data запроса вставки. Data — это список, чтобы вы могли вставить более одного значения.

Вот запрос с одним значением:

POST https://$PUBLIC_ENDPOINT/v1/vector/insert HTTP/1.1
content-type: application/json
Authorization: Bearer $YOUR_API_KEY

{
    "collectionName":"medium_articles",
    "data": [
        {
            "id": 1,
            "title_vector": [
                    0.2109777665089908,
                    0.6424190129752343,
                    (768 values)...
                    0.9818514815450557
            ],
        },
    ]
}

Отправьте этот код. В ответе вы получите количество вставленных элементов и их идентификаторы.

HTTP/1.1 200 OK

{
  "code": 200,
  "data": {
    "insertCount": 1,
    "insertIds": [
      "1"
    ]
  }
}

Запрос, поиск и получение данных

Zilliz REST API имеет три метода для извлечения данных: запрос, поиск и получение.

Векторный запрос использует критерии для сопоставления записей в базе данных. Начнем с запроса на основе поля id.

Для этого запроса вы отправляете POST поисковый документ на /query. Он использует оператор in для сопоставления записей с id 1 или 2.

POST https://$PUBLIC_ENDPOINT/v1/vector/query HTTP/1.1
content-type: application/json
Authorization: Bearer $YOUR_API_KEY
{
    "collectionName": "medium_articles",
    "filter": "id in (1, 2)"
}

Milvus отвечает значением, которое вы только что вставили, вместе с данными из примерной коллекции.

HTTP/1.1 200 OK

{
  "code": 200,
  "data": [
    {
      "id": 1,
      "title_vector": [
        0.21097776,
        0.5381259,
        0.48835102,
        0.15038285,
        0.94545513,
        (768 values)...
        ]
    },
   {
      "claps": 500,
      "id": 2,
      "link": "https://medium.com/swlh/how-can-we-best-switch-in-python-458fb33f7835",
      "publication": "The Startup",
      "reading_time": 6,
      "responses": 7,
      "title": "How Can We Best Switch in Python?",
      "title_vector": [
        0.031961977,
        0.00047043373,
        -0.018263113,
        0.027324716,
        -0.0054595284,
        -0.014779159,
        (768 values)...
      ]
   }
}

Вы можете использовать outputFields для фильтрации результатов.

Запросим еще несколько документов, одновременно сократив размер результатов.

POST https://$PUBLIC_ENDPOINT/v1/vector/query HTTP/1.1
content-type: application/json
Authorization: Bearer $YOUR_API_KEY

{
    "collectionName": "medium_articles",
    "filter": "id in (1, 2, 4, 99)",
    "outputFields": ["id", "publication"]
}

Этот результат гораздо легче читать:

HTTP/1.1 200 OK

{
  "code": 200,
  "data": [
    {
      "id": 1,
      "publication": null
    },
    {
      "id": 2,
      "publication": "The Startup"
    },
    {
      "id": 4,
      "publication": "The Startup"
    },
    {
      "id": 99,
      "publication": "Towards Data Science"
    }
  ]
}

Векторный поиск находит данные с помощью поиска по сходству в векторных полях.

Отправим поисковый запрос, используя те же значения, которые вы использовали для вставки нового значения.

Поиск поддерживает те же поля filter и outputFields, что и запрос, а также поле vector для критериев поиска, limit для результатов поиска и offset. Опустите offset; вы получите как минимум одно совпадение.

POST https://$PUBLIC_ENDPOINT/v1/vector/search HTTP/1.1
content-type: application/json
Authorization: Bearer $YOUR_API_KEY

{
    "collectionName": "medium_articles",
    "filter": "id in (1,2,3,4,5,6,7,8,9,99)",
    "limit": 5,
    "outputFields": ["id", "publication"],
    "vector": [
                    0.2109777665089908,
                    0.0375565730811388,
                    0.6424190129752343,
                    0.9818514815450557,
                    0.10598735548499805,
                    ...
              ]
    }
}

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

HTTP/1.1 200 OK

{
  "code": 200,
  "data": [
    {
      "distance": 0,
      "id": 1,
      "publication": null
    },
    {
      "distance": 211.61267,
      "id": 2,
      "publication": "The Startup"
    },
    {
      "distance": 211.71194,
      "id": 5,
      "publication": "The Startup"
    },
    {
      "distance": 211.719,
      "id": 6,
      "publication": "The Startup"
    },
    {
      "distance": 211.9408,
      "id": 7,
      "publication": "The Startup"
    }
  ]
}

Наконец, вы можете получать векторы, отправляя список ids в /get. Этот запрос get возвращает те же результаты, что и запрос выше.

POST https://$PUBLIC_ENDPOINT/v1/vector/get HTTP/1.1
content-type: application/json
Authorization: Bearer $YOUR_API_KEY

{
    "collectionName": "medium_articles",
    "id": [1, 2, 4, 99],
    "outputFields": ["id", "publication"]
}

Удаление данных

Наша последняя операция — удаление векторов. Как и get, delete использует поле id. Отправьте список ids в /delete, чтобы удалить их записи из базы данных.

POST https://$PUBLIC_ENDPOINT/v1/vector/delete HTTP/1.1
content-type: application/json
Authorization: Bearer $YOUR_API_KEY

{
    "collectionName": "medium_articles",
    "id": [1]
}

Результатом является пустой документ.

HTTP/1.1 200 OK

{
  "code": 200,
  "data": {}
}

Попробуйте получить id, чтобы убедиться, что он удален:

POST https://$PUBLIC_ENDPOINT/v1/vector/get HTTP/1.1
content-type: application/json
Authorization: Bearer $YOUR_API_KEY
{
    "collectionName": "medium_articles",
    "id": [1],
    "outputFields": ["id", "publication"]
}

Milvus вернет пустой набор результатов.

Заключение

В этом посте мы рассмотрели создание кластера Milvus с помощью Zilliz Cloud, а затем выполнение запросов к нему с использованием Zilliz REST API. Мы увидели, как создавать, просматривать список и удалять коллекцию, а затем как управлять данными с помощью Zilliz Cloud и REST-эндпоинтов, которые она создает для вашего кластера Milvus.

Теперь, когда вы увидели, насколько легко с Zilliz Cloud развернуть и использовать Milvus, зарегистрируйте бесплатный аккаунт и начните уже сегодня!

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