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


Интеграция возможностей ИИ Azure в базу данных Azure для PostgreSQL

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для PostgreSQL — гибкий сервер

Расширение azure_ai добавляет возможность использовать большие языковые модели (LLM) и создавать созданные приложения ИИ в базе данных Базы данных Azure для PostgreSQL путем интеграции возможностей служб ИИ Azure.

Генерирующий ИИ — это форма искусственного интеллекта, в которой LLM обучены создавать исходное содержимое на основе входных данных естественного языка. С помощью azure_ai расширения можно использовать возможности создания ИИ для обработки запросов естественного языка непосредственно из базы данных.

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

Предпосылки

Подключение к базе данных с помощью psql в Azure Cloud Shell

Откройте Azure Cloud Shell в веб-браузере. Выберите Bash в качестве среды. Если появится запрос, выберите подписку, используемую для базы данных Azure для PostgreSQL, и выберите команду "Создать хранилище".

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

  1. На портале Azure перейдите на гибкий сервер Базы данных Azure для PostgreSQL.

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

  3. Вставьте скопированные строки объявления для переменных среды в терминал Azure Cloud Shell. Замените {your-password} маркер паролем, заданным при создании базы данных.

    export PGHOST={your-server-name}.postgresql.database.azure.com
    export PGUSER={your-user-name}
    export PGPORT=5432
    export PGDATABASE={your-database-name}
    export PGPASSWORD="{your-password}"
    
  4. Подключитесь к базе данных с помощью средства командной строки psql. Введите следующую команду в командной строке:

    psql
    

Установка расширения azure_ai

Вы можете использовать расширение azure_ai, чтобы интегрировать Azure OpenAI и Azure Cognitive Services в вашу базу данных. Дополнительные сведения см. в разделе "Создание векторных встраиваний с помощью Azure OpenAI" в базе данных Azure для PostgreSQL.

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

  1. Добавьте расширение в список разрешений, как описано в разделе "Разрешить расширения".

  2. В базе данных, в которой планируется использовать azure_ai расширение, установите расширение, как описано в разделе "Создание расширений".

Проверка объектов в расширении azure_ai

Просмотр объектов, содержащих azure_ai расширение, может обеспечить лучшее представление о возможностях, которые он предлагает. Мета-команду \dx можно использовать в командной psql строке для перечисления объектов в расширении.

\dx+ azure_ai

Выходные данные метакоманды показывают, что azure_ai расширение создает три схемы, множество пользовательских функций (УДФ) и ряд составных типов в базе данных. В следующей таблице описаны схемы, которые добавляет расширение:

Схема Описание
azure_ai Предоставляет основную схему, где находятся таблица конфигурации и пользовательские определяемые функции для взаимодействия с ними.
azure_openai Содержит пользовательские функции, которые позволяют вызывать конечную точку Azure OpenAI.
azure_cognitive Обеспечивает пользовательские определяемые функции и составные типы, связанные с интеграцией базы данных с Azure Cognitive Services.

Функции и типы связаны с одной из схем. Чтобы просмотреть функции, определенные в схеме azure_ai , используйте \df мета-команду. Укажите схему, функции которой должны отображаться. Команды \x auto перед командой \df автоматически включают и отключают развернутое отображение, чтобы облегчить просмотр выходных данных этой команды в Azure Cloud Shell.

\x auto
\df+ azure_ai.*

Используйте функцию azure_ai.set_setting() , чтобы задать конечную точку и критически важные значения для служб ИИ Azure. Он принимает ключ и значение для его назначения. Функция azure_ai.get_setting() предоставляет способ получения значений, заданных функцией set_setting() . Он принимает ключ параметра, который вы хотите просмотреть. Для обоих методов ключ должен быть одним из следующих:

Ключ Описание
azure_openai.endpoint Поддерживаемая конечная точка Azure OpenAI (например, https://example.openai.azure.com).
azure_openai.subscription_key Ключ подписки для ресурса Azure OpenAI.
azure_cognitive.endpoint Поддерживаемая конечная точка Cognitive Services (например, https://example.cognitiveservices.azure.com).
azure_cognitive.subscription_key Ключ подписки для ресурса Cognitive Services.

Это важно

Так как сведения о подключении для служб Azure ИИ, включая API-ключи, хранятся в таблице конфигурации в базе данных, расширение azure_ai определяет роль, называемую azure_ai_settings_manager, чтобы обеспечить защиту и доступ к этой информации только для пользователей, у которых есть эта роль. Эта роль позволяет читать и записывать параметры, связанные с расширением.

Только суперпользователи и члены azure_ai_settings_manager роли могут вызывать azure_ai.get_setting() и azure_ai.set_setting() функции. В Базе данных Azure для PostgreSQL все пользователи-администраторы обладают ролью azure_ai_settings_manager.

Создание векторных внедрения с помощью Azure OpenAI

azure_ai Схема расширения azure_openai позволяет использовать Azure OpenAI для создания векторных встраиваний для текстовых значений. С помощью этой схемы можно создавать внедрения с помощью Azure OpenAI непосредственно из базы данных для создания векторных представлений входного текста. Затем эти представления можно использовать в векторном поиске подобия и для обработки моделями машинного обучения.

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

Настройка конечной точки и ключа Azure OpenAI

Прежде чем использовать azure_openai функции, настройте расширение с помощью узла сервиса Azure OpenAI и ключа:

  1. На портале Azure перейдите к ресурсу Azure OpenAI. В меню слева в разделе "Управление ресурсами" выберите "Ключи" и "Конечная точка".

  2. Скопируйте конечную точку и ключ доступа. Вы можете использовать KEY1 или KEY2. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.

  3. В следующей команде замените маркеры {endpoint} и {api-key} на значения, которые вы получили на портале Azure. Затем выполните команды из командной psql строки, чтобы добавить значения в таблицу конфигурации.

    SELECT azure_ai.set_setting('azure_openai.endpoint','{endpoint}');
    SELECT azure_ai.set_setting('azure_openai.subscription_key', '{api-key}');
    
  4. Проверьте параметры, записанные в таблице конфигурации:

    SELECT azure_ai.get_setting('azure_openai.endpoint');
    SELECT azure_ai.get_setting('azure_openai.subscription_key');
    

Теперь расширение azure_ai подключено к вашей учетной записи Azure OpenAI и готово к созданию векторных встраиваний.

Заполнение базы данных примерами данных

В этой статье используется небольшое подмножество набора данных BillSum для предоставления примеров текстовых данных для создания векторов. Этот набор данных содержит список законопроектов штата Сша и Штата Калифорния. Вы можете скачать bill_sum_data.csv файл, содержащий эти данные из репозитория GitHub для примеров Azure.

Чтобы разместить примеры данных в базе данных, создайте таблицу с именем bill_summaries:

CREATE TABLE bill_summaries
(
    id bigint PRIMARY KEY,
    bill_id text,
    bill_text text,
    summary text,
    title text,
    text_len bigint,
    sum_len bigint
);

С помощью команды PostgreSQL COPY из psql командной строки загрузите примеры данных из CSV-файла в таблицу bill_summaries . Укажите, что первая строка CSV-файла является строкой заголовка.

\COPY bill_summaries (id, bill_id, bill_text, summary, title, text_len, sum_len) FROM PROGRAM 'curl "https://raw.githubusercontent.com/Azure-Samples/Azure-OpenAI-Docs-Samples/main/Samples/Tutorials/Embeddings/data/bill_sum_data.csv"' WITH CSV HEADER ENCODING 'UTF8'

Включение поддержки векторов

Можно использовать расширение azure_ai для создания эмбеддингов для входного текста. Чтобы включить сохранение созданных векторов вместе с остальными данными в базе данных, необходимо установить pgvector расширение. Следуйте инструкциям в документации по включению векторной поддержки в базе данных.

Добавив поддержку векторов в базу данных, добавьте новый столбец в таблицу bill_summaries с помощью типа данных vector для хранения эмбеддингов в таблице. Модель text-embedding-ada-002 создает векторы с 1536 измерениями, поэтому необходимо указать 1536 в качестве размера вектора.

ALTER TABLE bill_summaries
ADD COLUMN bill_vector vector(1536);

Создание и хранение векторов

Теперь таблица bill_summaries готова к хранению внедренных данных. Используя azure_openai.create_embeddings() функцию, вы создаете векторы для bill_text поля и вставляете их в только что созданный bill_vector столбец в bill_summaries таблице.

Перед использованием create_embeddings() функции выполните следующую команду, чтобы проверить ее и проверить необходимые аргументы:

\df+ azure_openai.*

Свойство Argument data types в выходных данных \df+ azure_openai.* команды показывает список аргументов, которые ожидает функция:

Аргумент Тип По умолчанию Описание
deployment_name text Имя развертывания на портале Azure AI Foundry, содержащего text-embeddings-ada-002 модель.
input text Входной текст, используемый для создания встраиваний.
timeout_ms integer 3600000 Время ожидания в миллисекундах, после чего операция остановлена.
throw_on_error boolean true Флаг, указывающий, должна ли функция вызывать исключение, которое приводит к откату транзакций упаковки.

Первым аргументом deployment_name является значение, которое было назначено при развертывании вашей модели встраивания в аккаунте Azure OpenAI. Чтобы получить это значение, выполните указанные ниже действия.

  1. Перейдите к ресурсу Azure OpenAI в портал Azure.

  2. В меню слева в разделе "Управление ресурсами" выберите развертывания модели , чтобы открыть портал Azure AI Foundry.

  3. На портале Azure AI Foundry выберите "Развертывания". На панели развертывания скопируйте значение названия развертывания, связанное с text-embedding-ada-002 развертыванием модели.

Снимок экрана развертывания встраиваний для интеграции ИИ.

С помощью этой информации выполните запрос, чтобы обновить каждую запись в bill_summaries таблице. Вставьте созданные векторные встраивания для поля bill_text в столбец bill_vector с помощью функции azure_openai.create_embeddings(). Замените {your-deployment-name} на значение Имени развертывания, которое вы скопировали из панели Развертывания портала Azure AI Foundry. Затем выполните следующую команду.

UPDATE bill_summaries b
SET bill_vector = azure_openai.create_embeddings('{your-deployment-name}', b.bill_text);

Выполните следующий запрос, чтобы просмотреть внедрение, созданное для первой записи в таблице. Вы можете сначала запустить \x, если выходные данные трудно прочитать.

SELECT bill_vector FROM bill_summaries LIMIT 1;

Каждое встраивание является вектором чисел с плавающей точкой. Расстояние между двумя внедрениями в векторное пространство сопоставляется с семантическим сходством между двумя входными данными в исходном формате.

Методика сходства векторов используется для измерения степени похожести двух элементов, представляя их в виде векторов. Векторы — это ряд чисел. Они часто используются для выполнения поиска с помощью LLM.

Сходство векторов обычно вычисляется с помощью метрик расстояния, таких как:

  • Евклидеан расстояние: измеряет прямое расстояние между двумя векторами в n-мерном пространстве.
  • Косинусное сходство: измеряет косинус угла между двумя векторами.

Обеспечьте более эффективный поиск по полю vector, создав индекс на bill_summaries по расстоянию косинуса и иерархической навигационной малой сети (HNSW). HNSW позволяет pgvector использовать последние алгоритмы на основе графов для приблизительных запросов ближайших соседей.

CREATE INDEX ON bill_summaries USING hnsw (bill_vector vector_cosine_ops);

Теперь все готово к выполнению запроса на поиск с использованием косинусного сходства в базе данных.

В следующем запросе эмбеддинги создаются для входного вопроса, а затем преобразуются в массив векторов (::vector). Массив векторов позволяет сравнивать вопрос с векторами, хранящимися в bill_summaries таблице.

SELECT bill_id, title FROM bill_summaries
ORDER BY bill_vector <=> azure_openai.create_embeddings('embeddings', 'Show me bills relating to veterans entrepreneurship.')::vector
LIMIT 3;

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

Интегрируйте Azure Cognitive Services

Интеграции служб ИИ Azure, включенные в azure_cognitive схему azure_ai расширения, предоставляют широкий набор функций языка ИИ, которые можно получить непосредственно из базы данных. Эти функции включают анализ тональности, обнаружение языка, извлечение ключевых фраз, распознавание сущностей и суммирование текста. Доступ к этим возможностям включен через службу языка искусственного интеллекта Azure.

Чтобы просмотреть полные возможности ИИ Azure, к которым можно получить доступ через расширение, см. статью "Интеграция базы данных Azure для PostgreSQL с Azure Cognitive Services".

Настройка конечной точки и ключа службы языка искусственного интеллекта Azure

Как и в случае с функциями azure_openai, чтобы успешно выполнять запросы к службам ИИ Azure с помощью расширения azure_ai, необходимо предоставить конечную точку и ключ для ресурса службы языка Azure AI.

  1. На портале Azure перейдите к ресурсу службы "Язык".

  2. В меню слева в разделе "Управление ресурсами" выберите "Ключи" и "Конечная точка".

  3. Скопируйте конечную точку и ключ доступа. Вы можете использовать KEY1 или KEY2.

  4. В командной строке psql выполните следующие команды, чтобы добавить значения в таблицу конфигурации. Замените {endpoint} и {api-key} маркеры значениями, полученными на портале Azure.

    SELECT azure_ai.set_setting('azure_cognitive.endpoint','{endpoint}');
    SELECT azure_ai.set_setting('azure_cognitive.subscription_key', '{api-key}');
    

Сводка счетов

Чтобы продемонстрировать некоторые возможности azure_cognitive функций azure_ai расширения, можно создать сводку по каждому счету. Схема azure_cognitive предоставляет две функции для суммирования текста:

  • summarize_abstractive: Абстрактное суммирование формирует резюме, выделяющее основные понятия из исходного текста, но может не использовать идентичные слова.
  • summarize_extractive: Извлечение сводного текста создаёт сводку, извлекая важные предложения из входного текста.

Чтобы использовать возможность службы языка ИИ Azure для создания нового исходного содержимого, используйте summarize_abstractive функцию для создания сводки ввода текста. Используйте снова метакоманду \df из psql, на этот раз, чтобы конкретно посмотреть на функцию azure_cognitive.summarize_abstractive.

\df azure_cognitive.summarize_abstractive

Свойство Argument data types в выходных данных \df azure_cognitive.summarize_abstractive команды показывает список аргументов, которые ожидает функция:

Аргумент Тип По умолчанию Описание
text text Вводимый текст для суммирования.
language text Двухбуквенное обозначение ISO 639-1 языка, на котором написан входной текст. Для допустимых значений проверьте поддержку языка для функций языка.
timeout_ms integer 3600000 Время ожидания в миллисекундах, после чего операция остановлена.
throw_on_error boolean true Флаг, указывающий, должна ли функция при ошибке вызывать исключение, которое приводит к откату обёрнутых транзакций.
sentence_count integer 3 Максимальное количество предложений для включения в созданную сводку.
disable_service_logs boolean false Параметр, который отключает журналы языковых служб. Служба языка регистрирует входной текст в течение 48 часов исключительно для устранения неполадок. Установка этого свойства для true отключения входного ведения журнала и может ограничить возможность изучения проблем, возникающих. Дополнительные сведения см. в заметках о соответствии и конфиденциальности Cognitive Services и принципах ответственного искусственного интеллекта Майкрософт.

Для summarize_abstractive функции требуются следующие аргументы: azure_cognitive.summarize_abstractive(text TEXT, language TEXT)

Следующий запрос к bill_summaries таблице использует summarize_abstractive функцию для создания нового однопредложного резюме текста законопроекта. Он позволяет включить возможности создания искусственного интеллекта непосредственно в запросы.

SELECT
    bill_id,
    azure_cognitive.summarize_abstractive(bill_text, 'en', sentence_count => 1) one_sentence_summary
FROM bill_summaries
WHERE bill_id = '112_hr2873';

Вы также можете использовать функцию для записи данных в таблицы базы данных. Измените bill_summaries таблицу, чтобы добавить новый столбец для хранения сводок по одному предложению в базе данных:

ALTER TABLE bill_summaries
ADD COLUMN one_sentence_summary TEXT;

Затем обновите таблицу с сводкой. Функция summarize_abstractive возвращает массив текста (text[]). Функция array_to_string преобразует возвращаемое значение в строковое представление. В следующем запросе аргумент throw_on_error установлен на false. Этот параметр позволяет процессу сводных данных продолжаться, если возникает ошибка.

UPDATE bill_summaries b
SET one_sentence_summary = array_to_string(azure_cognitive.summarize_abstractive(b.bill_text, 'en', throw_on_error => false, sentence_count => 1), ' ', '')
where one_sentence_summary is NULL;

В выходных данных может появиться предупреждение о недопустимом документе, для которого не удалось создать соответствующую сводку. Это предупреждение является результатом изменения throw_on_error на false в предыдущем запросе. Если вы оставили этот флаг по умолчанию true, запрос завершится ошибкой, и сводки не будут записаны в базу данных. Чтобы просмотреть запись, которая вызвала предупреждение, выполните следующую команду:

SELECT bill_id, one_sentence_summary FROM bill_summaries WHERE one_sentence_summary is NULL;

Затем вы можете выполнить запрос к таблице bill_summaries, чтобы просмотреть новые однопредложные сводки, которые расширение azure_ai создает для других записей в таблице.

SELECT bill_id, one_sentence_summary FROM bill_summaries LIMIT 5;

Заключение

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