Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для PostgreSQL — гибкий сервер
Расширение azure_ai
добавляет возможность использовать большие языковые модели (LLM) и создавать созданные приложения ИИ в базе данных Базы данных Azure для PostgreSQL путем интеграции возможностей служб ИИ Azure.
Генерирующий ИИ — это форма искусственного интеллекта, в которой LLM обучены создавать исходное содержимое на основе входных данных естественного языка. С помощью azure_ai
расширения можно использовать возможности создания ИИ для обработки запросов естественного языка непосредственно из базы данных.
В этой статье демонстрируется добавление расширенных возможностей искусственного интеллекта в гибкий сервер Базы данных Azure для PostgreSQL с помощью azure_ai
расширения. В нем показано, как интегрировать Azure OpenAI и службу языка искусственного интеллекта Azure в базу данных с помощью расширения.
Предпосылки
Подписка Azure. Создайте его бесплатно.
Доступ к Azure OpenAI предоставлен в нужной подписке Azure. В настоящее время приложение предоставляет доступ к этой службе. Вы можете подать заявку на доступ к Azure OpenAI, выполнив форму в ограниченном доступе для Службы Azure OpenAI.
Ресурс Azure OpenAI с развернутой моделью
text-embedding-ada-002
(версия 2). Эта модель в настоящее время доступна только в определенных регионах. Если у вас нет ресурса, процесс создания ресурса описан в руководстве по развертыванию ресурсов Azure OpenAI.Ресурс языка ИИ Azure. Если у вас нет ресурса языка, его можно создать на портале Azure, выполнив инструкции, приведенные в кратком руководстве по обобщению. Вы можете использовать бесплатный тарифный план (
Free F0
), чтобы попробовать службу, а затем обновить его до платного уровня для производственного использования.Гибкий сервер базы данных Azure для PostgreSQL в подписке Azure. Если у вас нет этого ресурса, см. статью "Создание гибкого сервера Базы данных Azure для PostgreSQL".
Подключение к базе данных с помощью psql в Azure Cloud Shell
Откройте Azure Cloud Shell в веб-браузере. Выберите Bash в качестве среды. Если появится запрос, выберите подписку, используемую для базы данных Azure для PostgreSQL, и выберите команду "Создать хранилище".
Чтобы получить сведения о подключении к базе данных, выполните следующие действия.
На портале Azure перейдите на гибкий сервер Базы данных Azure для PostgreSQL.
В меню слева в разделе "Параметры" выберите "Подключиться". Скопируйте блок сведений о подключении .
Вставьте скопированные строки объявления для переменных среды в терминал 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}"
Подключитесь к базе данных с помощью средства командной строки psql. Введите следующую команду в командной строке:
psql
Установка расширения azure_ai
Вы можете использовать расширение azure_ai
, чтобы интегрировать Azure OpenAI и Azure Cognitive Services в вашу базу данных. Дополнительные сведения см. в разделе "Создание векторных встраиваний с помощью Azure OpenAI" в базе данных Azure для PostgreSQL.
Чтобы включить расширение в базе данных, выполните следующие действия.
Добавьте расширение в список разрешений, как описано в разделе "Разрешить расширения".
В базе данных, в которой планируется использовать
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 и ключа:
На портале Azure перейдите к ресурсу Azure OpenAI. В меню слева в разделе "Управление ресурсами" выберите "Ключи" и "Конечная точка".
Скопируйте конечную точку и ключ доступа. Вы можете использовать
KEY1
илиKEY2
. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.В следующей команде замените маркеры
{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}');
Проверьте параметры, записанные в таблице конфигурации:
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. Чтобы получить это значение, выполните указанные ниже действия.
Перейдите к ресурсу Azure OpenAI в портал Azure.
В меню слева в разделе "Управление ресурсами" выберите развертывания модели , чтобы открыть портал Azure AI Foundry.
На портале 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.
На портале Azure перейдите к ресурсу службы "Язык".
В меню слева в разделе "Управление ресурсами" выберите "Ключи" и "Конечная точка".
Скопируйте конечную точку и ключ доступа. Вы можете использовать
KEY1
илиKEY2
.В командной строке
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
расширение для интеграции больших языковых моделей и создания возможностей искусственного интеллекта в базу данных.