Поделиться через


Руководство: Использование Eventhouse в качестве векторной базы данных

В этом руководстве вы узнаете, как использовать Eventhouse в качестве векторной базы данных для хранения и запроса векторных данных в аналитике в режиме реального времени. Общие сведения о векторных базах данных см. в разделе "Векторные базы данных".

Этот сценарий включает использование семантических поисков на страницах Википедии для поиска страниц с общими темами. Вы используете доступный пример набора данных, который включает векторы для десятков тысяч страниц Википедии. Эти страницы были внедрены с помощью модели OpenAI для создания векторов для каждой страницы. Векторы, а также некоторые соответствующие метаданные, связанные со страницей, затем хранятся в хранилище событий. Этот набор данных можно использовать для поиска страниц, похожих друг на друга, или для поиска страниц, похожих на ту или иную тему, которую вы хотите найти. Например, предположим, что вы хотите найти "известных женщин-ученых 19-го века". Вы кодируете эту фразу с помощью той же модели OpenAI, а затем выполняете поиск по сходству вектора по сохраненным данным страницы Википедии, чтобы найти страницы с наивысшей семантической сходства.

В частности, в этом руководстве вы узнаете:

  • Подготовьте таблицу в хранилище событий с Vector16 кодировкой для векторных столбцов.
  • Храните векторные данные из предварительно внедренного набора данных в хранилище событий.
  • Внедрение запроса естественного языка с помощью модели Open AI.
  • Используйте функцию series_cosine_similarity KQL, чтобы вычислить сходство между вектором вложения запроса и векторами вики-страниц.
  • Просмотрите строки наивысшего сходства, чтобы получить вики-страницы, наиболее релевантные для поискового запроса.

Этот поток можно визуализировать следующим образом:

Схема Eventhouse как рабочего процесса векторной базы данных.

Предварительные условия

  • Рабочая область с подключенной к Microsoft Fabric емкостью
  • Центр событий в рабочей области
  • Подключаемый модуль ai-embeddings , включенный в вашем хранилище событий
  • Ресурс Azure OpenAI, в котором внедрена модель "text-embedding-ada-002" (версия 2). Эта модель в настоящее время доступна только в определенных регионах. Дополнительную информацию см. в разделе Создание ресурса.
  • Скачивание примера записной книжки из репозитория GitHub

Примечание.

Хотя в этом руководстве используется Azure OpenAI, вы можете использовать любой поставщик модели внедрения для создания векторов для текстовых данных.

Подготовьте среду Eventhouse

На этом шаге установки вы создадите таблицу в хранилище событий с необходимыми столбцами и политиками кодирования для хранения векторных данных.

  1. Перейдите на домашнюю страницу рабочего пространства в Real-Time Intelligence.

  2. Выберите Eventhouse, которое вы создали в предварительных требованиях.

  3. Выберите целевую базу данных, в которой требуется хранить векторные данные. Если у вас нет базы данных, ее можно создать, нажав кнопку "Добавить базу данных".

  4. Выберите "Просмотреть мои данные". Скопируйте и вставьте следующий запрос KQL, чтобы создать таблицу с необходимыми столбцами:

    .create table Wiki (id:string,url:string,['title']:string,text:string,title_vector:dynamic,content_vector:dynamic,vector_id:long)
    
  5. Скопируйте и вставьте следующие команды, чтобы задать политику кодирования столбцов векторов. Выполните эти команды последовательно.

    .alter column Wiki.title_vector policy encoding type='Vector16'
    
    .alter column Wiki.content_vector policy encoding type='Vector16'
    

Запись векторных данных в хранилище событий

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

Импорт блокнота

  1. Скачайте пример записной книжки из репозитория GitHub.
  2. Перейдите в среду Fabric. В переключателе интерфейса выберите Fabric, а затем рабочую область.
  3. Выберите Импорт>Записную книжку>С этого компьютера>Загрузить, а затем выберите записную книжку, скачанную на предыдущем шаге.
  4. После завершения импорта откройте импортированную записную книжку из рабочей области.

Запишите данные в хранилище событий

  1. Запустите ячейки, чтобы настроить вашу среду.

    %%configure -f
    {"conf":
        {
            "spark.rpc.message.maxSize": "1024"
        }
    }
    
    %pip install wget
    
    %pip install openai
    
  2. Запустите ячейки, чтобы скачать предварительно вычисленные встраивания.

    import wget
    
    embeddings_url = "https://cdn.openai.com/API/examples/data/vector_database_wikipedia_articles_embedded.zip"
    
    # The file is ~700 MB so it might take some time
    wget.download(embeddings_url)
    
    import zipfile
    
    with zipfile.ZipFile("vector_database_wikipedia_articles_embedded.zip","r") as zip_ref:
        zip_ref.extractall("/lakehouse/default/Files/data")
    
    import pandas as pd
    
    from ast import literal_eval
    
    article_df = pd.read_csv('/lakehouse/default/Files/data/vector_database_wikipedia_articles_embedded.csv')
    # Read vectors from strings back into a list
    article_df["title_vector"] = article_df.title_vector.apply(literal_eval)
    article_df["content_vector"] = article_df.content_vector.apply(literal_eval)
    article_df.head()
    
  3. Чтобы записать в хранилище событий, введите URI кластера, размещенный на странице обзора системы, и имя базы данных. Таблица создается в записной книжке и далее используется в запросе.

    # replace with your Eventhouse Cluster URI, Database name, and Table name
    KUSTO_CLUSTER =  "Eventhouse Cluster URI"
    KUSTO_DATABASE = "Database name"
    KUSTO_TABLE = "Wiki"
    
  4. Запустите оставшиеся ячейки, чтобы записать данные в хранилище событий. Эта операция может занять некоторое время.

    kustoOptions = {"kustoCluster": KUSTO_CLUSTER, "kustoDatabase" :KUSTO_DATABASE, "kustoTable" : KUSTO_TABLE }
    
    access_token=mssparkutils.credentials.getToken(kustoOptions["kustoCluster"])
    
    #Pandas data frame to spark dataframe
    sparkDF=spark.createDataFrame(article_df)
    
    # Write data to a table in Eventhouse
    sparkDF.write. \
    format("com.microsoft.kusto.spark.synapse.datasource"). \
    option("kustoCluster",kustoOptions["kustoCluster"]). \
    option("kustoDatabase",kustoOptions["kustoDatabase"]). \
    option("kustoTable", kustoOptions["kustoTable"]). \
    option("accessToken", access_token). \
    option("tableCreateOptions", "CreateIfNotExist").\
    mode("Append"). \
    save()
    

Посмотрите данные в хранилище событий

На этом этапе можно проверить, были ли данные записаны в хранилище событий, перейдя на страницу сведений о базе данных.

  1. Перейдите на домашнюю страницу рабочего пространства в Real-Time Intelligence.
  2. Выберите элемент базы данных, предоставленный в предыдущем разделе. Вы увидите сводку данных, записанных в таблицу Wiki.

Генерация эмбеддинга для поискового термина

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

Для вызова API внедрения Azure OpenAI требуется конечная точка.

Имя переменной Значение
конечная точка Это значение можно найти в разделе "Ключи и конечная точка" при изучении ресурса из портала Azure.

Используйте сведения в таблице при запуске ячеек Azure OpenAI.

let model_endpoint = 'https://deployment-name.openai.azure.com/openai/deployments/kusto-text-embedding-ada-002/embeddings?api-version=2024-10-21;impersonate';
let searchedEmbedding = toscalar(evaluate ai_embeddings("most difficult gymnastics moves in the olympics", model_endpoint));
print(searchedEmbedding)

Запрос на сходство

Запрос выполняется непосредственно в Eventhouse и использует возвращаемое внедрение из предыдущего шага в сравнении со встроенными страницами Википедии, хранящимися в вашем хранилище событий. Этот запрос использует функцию сходства косинуса и возвращает первые 10 самых похожих векторов.

Запустите запрос KQL, чтобы просмотреть результаты. Вы можете изменить условие поиска и повторно запустить запрос, чтобы увидеть различные результаты. Вы также можете сравнить существующую запись в базе данных вики-сайта, чтобы найти аналогичные записи.

let model_endpoint = 'https://deployment-name.openai.azure.com/openai/deployments/kusto-text-embedding-ada-002/embeddings?api-version=2024-10-21;impersonate';
//
Wiki
| extend similarity = series_cosine_similarity(searchedEmbedding, content_vector)
| top 10 by similarity desc

Очистка ресурсов

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

  1. Перейдите на домашнюю страницу рабочей области.
  2. Удалите блокнот, созданный в этом руководстве.
  3. Удалите хранилище событий или базу данных , используемую в этом руководстве.