Система рекомендаций с База данных Azure для PostgreSQL — гибкий сервер и Azure OpenAI
ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для PostgreSQL — гибкий сервер
В этом практическом руководстве показано, как создать приложение для рекомендаций с помощью База данных Azure для PostgreSQL гибкого сервера и Службы Azure OpenAI. Рекомендации имеют приложения в разных доменах— поставщики услуг часто предоставляют рекомендации по продуктам и службам, которые они предлагают на основе предыдущей истории и контекстной информации, собираемой из клиента и среды.
Существуют различные способы моделирования систем рекомендаций. В этой статье рассматривается самая простая форма — рекомендация на основе одного продукта, соответствующего, скажем, предыдущей покупки. В этом руководстве используется набор данных рецепта, используемый в статье "Семантический поиск ", а рекомендация — это рецепты на основе рецепта, который клиент любил или искал раньше.
Необходимые компоненты
- Создайте учетную запись OpenAI и запросите доступ к службе Azure OpenAI.
- Предоставьте доступ к Azure OpenAI в нужной подписке.
- Предоставьте разрешения на создание ресурсов Azure OpenAI и развертывание моделей.
Создайте и разверните ресурс Службы Azure OpenAI и модель, разверните модель внедрения текста-внедрения-ada-002. Скопируйте имя развертывания, так как требуется для создания внедрения.
Включение расширений azure_ai и pgvector
Прежде чем включить и pgvector
на azure_ai
База данных Azure для PostgreSQL гибкий экземпляр сервера, необходимо добавить их в список разрешений, как описано в том, как использовать расширения PostgreSQL и проверить правильность добавления, выполнив команду .SHOW azure.extensions;
Затем можно установить расширение, подключився к целевой базе данных и выполнив команду CREATE EXTENSION . Необходимо повторить команду отдельно для каждой базы данных, в которой должно быть доступно расширение.
CREATE EXTENSION azure_ai;
CREATE EXTENSION vector;
Настройка конечной точки и ключа OpenAI
В службах ИИ Azure в разделе "Ключи управления>ресурсами" и "Конечные точки" можно найти конечную точку и ключи для ресурса ИИ Azure. Используйте конечную точку и один из ключей, чтобы включить azure_ai
расширение для вызова развертывания модели.
select azure_ai.set_setting('azure_openai.endpoint','https://<endpoint>.openai.azure.com');
select azure_ai.set_setting('azure_openai.subscription_key', '<API Key>');
Скачивание и импорт данных
- Скачайте данные из Kaggle.
- Подключитесь к серверу и создайте
test
базу данных, а в ней создайте таблицу, в которой будут импортированы данные. - Импорт данных.
- Добавьте в таблицу столбец внедрения.
- Создайте внедрения.
- Поиск.
Создание таблицы
CREATE TABLE public.recipes(
rid integer NOT NULL,
recipe_name text,
prep_time text,
cook_time text,
total_time text,
servings integer,
yield text,
ingredients text,
directions text,
rating real,
url text,
cuisine_path text,
nutrition text,
timing text,
img_src text,
PRIMARY KEY (rid)
);
Импорт данных
Задайте следующую переменную среды в окне клиента, чтобы задать кодировку utf-8. Этот шаг необходим, так как этот конкретный набор данных использует кодировку WIN1252.
Rem on Windows
Set PGCLIENTENCODING=utf-8;
# on Unix based operating systems
export PGCLIENTENCODING=utf-8
Импортируйте данные в созданную таблицу; Обратите внимание, что этот набор данных содержит строку заголовка:
psql -d <database> -h <host> -U <user> -c "\copy recipes FROM <local recipe data file> DELIMITER ',' CSV HEADER"
Добавление столбца для хранения внедренных данных
ALTER TABLE recipes ADD COLUMN embedding vector(1536);
Создание внедрения
Создайте внедрение данных с помощью расширения azure_ai. В следующем примере мы векторизируем несколько различных полей, сцепленных:
WITH ro AS (
SELECT ro.rid
FROM
recipes ro
WHERE
ro.embedding is null
LIMIT 500
)
UPDATE
recipes r
SET
embedding = azure_openai.create_embeddings('text-embedding-ada-002', r.recipe_name||' '||r.cuisine_path||' '||r.ingredients||' '||r.nutrition||' '||r.directions)
FROM
ro
WHERE
r.rid = ro.rid;
Повторите команду, пока не будет больше строк для обработки.
Совет
Играть вокруг с LIMIT
. С высоким значением оператор может завершиться сбоем на полпути из-за регулирования, введенного Azure OpenAI. Если он завершается ошибкой, подождите по крайней мере одну минуту и повторите команду.
Создайте функцию поиска в базе данных для удобства:
create function
recommend_recipe(sampleRecipeId int, numResults int)
returns table(
out_recipeName text,
out_nutrition text,
out_similarityScore real)
as $$
declare
queryEmbedding vector(1536);
sampleRecipeText text;
begin
sampleRecipeText := (select
recipe_name||' '||cuisine_path||' '||ingredients||' '||nutrition||' '||directions
from
recipes where rid = sampleRecipeId);
queryEmbedding := (azure_openai.create_embeddings('text-embedding-ada-002',sampleRecipeText));
return query
select
distinct r.recipe_name,
r.nutrition,
(r.embedding <=> queryEmbedding)::real as score
from
recipes r
order by score asc limit numResults; -- cosine distance
end $$
language plpgsql;
Теперь просто вызовите функцию для поиска рекомендации:
select out_recipename, out_similarityscore from recommend_recipe(1, 20); -- search for 20 recipe recommendations that closest to recipeId 1
И изучите результаты:
out_recipename | out_similarityscore
---------------------------------------+---------------------
Apple Pie by Grandma Ople | 0
Easy Apple Pie | 0.05137232
Grandma's Iron Skillet Apple Pie | 0.054287136
Old Fashioned Apple Pie | 0.058492836
Apple Hand Pies | 0.06449003
Apple Crumb Pie | 0.07290977
Old-Fashioned Apple Dumplings | 0.078374185
Fried Apple Pies | 0.07918481
Apple Pie Filling | 0.084320426
Apple Turnovers | 0.08576391
Dutch Apple Pie with Oatmeal Streusel | 0.08779895
Apple Crisp - Perfect and Easy | 0.09170883
Delicious Cinnamon Baked Apples | 0.09384012
Easy Apple Crisp with Pie Filling | 0.09477234
Jump Rope Pie | 0.09503954
Easy Apple Strudel | 0.095167875
Apricot Pie | 0.09634114
Easy Apple Crisp with Oat Topping | 0.09708358
Baked Apples | 0.09826993
Pear Pie | 0.099974394
(20 rows)
Связанный контент
- Интеграция База данных Azure для PostgreSQL — гибкий сервер с Azure Cognitive Services.
- Создайте векторные внедрения в База данных Azure для PostgreSQL — гибкий сервер с локальным развертыванием LLM (предварительная версия).
- Интеграция База данных Azure для PostgreSQL с службами Машинное обучение Azure.
- Создание векторных внедрения с помощью Azure OpenAI в База данных Azure для PostgreSQL — гибкий сервер.
- Расширение ИИ Azure в База данных Azure для PostgreSQL — гибкий сервер.
- Создание искусственного интеллекта с помощью База данных Azure для PostgreSQL — гибкий сервер.
- Семантический поиск с помощью База данных Azure для PostgreSQL — гибкий сервер и Azure OpenAI.
- Включите и используйте pgvector в База данных Azure для PostgreSQL — гибкий сервер.