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


Создание векторных внедрения в База данных Azure для PostgreSQL — гибкий сервер с локальным развертыванием LLM (предварительная версия)

Необходимые компоненты

  1. Экземпляр гибкого сервера База данных Azure для PostgreSQL, работающий на SKU оптимизированной для памяти виртуальной машины. Дополнительные сведения о оптимизированных для памяти виртуальных машинах Azure: размеры виртуальных машин Azure — память — Azure Виртуальные машины

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

Включение расширения

Прежде чем включить azure_local_ai на База данных Azure для PostgreSQL гибком экземпляре сервера, необходимо включить список расширенийazure_local_ai, как описано в разделе "Разрешить расширение".

Внимание

Для размещения языковых моделей в базе данных требуется большой объем памяти. Для поддержки этого требования поддерживается только в номерах SKU виртуальных машин Azure, azure_local_ai оптимизированных для памяти, не менее 4 виртуальных ядер. Если вы используете виртуальную машину, которая не соответствует минимальным требованиям, azure_local_ai расширение не будет отображаться в списке разрешенных значений для azure.extensions параметра сервера.

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

Примечание.

Включение Локального искусственного интеллекта Azure развернет модель с многоязычным e5-small в экземпляре гибкого сервера База данных Azure для PostgreSQL. Связанная документация предоставляет условия лицензирования от команды e5. Дополнительные сторонние модели с открытым исходным кодом могут стать доступными для установки на постоянной основе.

При установке расширения создается схемаazure_local_ai, в которой расширение azure_local_ai хранит таблицы, функции и любые другие объекты, связанные с SQL, необходимые для реализации и предоставления его функциональных возможностей.

Внимание

Возможно, вы хотите включить расширение вектора, так как оно требуется для хранения вставок текста в базу данных PostgreSQL.

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

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

Схема Имя. Тип результирующих данных Типы данных аргументов
azure_local_ai create_embeddings TABLE(внедрение real[]) model_uri текст, входной текст[], batch_size bigint DEFAULT 128, timeout_ms целочисленное значение DEFAULT 36000000
azure_local_ai create_embeddings real[] model_uri текст, входной текст, timeout_ms целочисленное значение DEFAULT 36000000
azure_local_ai get_setting jsonb текст ключей[] МАССИВ ПО УМОЛЧАНИЮ[]::text[], timeout_ms целое число DEFAULT 36000000
azure_local_ai get_setting text текст ключа, timeout_ms целое число DEFAULT 36000000
azure_local_ai model_metadata jsonb текст model_uri

Эти функции можно отобразить с помощью следующей мета-команды psql:

\df azure_local_ai.*

azure_local_ai.create_embeddings

Расширение azure_local_ai позволяет создавать и обновлять внедрения как в скалярном, так и в пакетном формате, вызывая локально развернутый LLM.

azure_local_ai.create_embeddings(model_uri text, input text, batch_size bigint DEFAULT 128, timeout_ms integer DEFAULT 3600000);
azure_local_ai.create_embeddings(model_uri text, array[inputs [text]], batch_size bigint DEFAULT 128, timeout_ms integer DEFAULT 3600000);

Аргументы

model_uri

text имя модели внедрения текста, вызываемой для создания внедрения.

input

text или text[] один текст или массив текстов в зависимости от перегрузки используемой функции, для которой создаются внедрения.

batch_size

bigint DEFAULT 128 число записей для обработки за раз (доступно только для перегрузки функции, для которой input параметр имеет тип text[]).

timeout_ms

integer DEFAULT 3600000 время ожидания в миллисекундах, после чего операция остановлена.

azure_local_ai.get_setting

Используется для получения текущих значений параметров конфигурации.

SELECT azure_local_ai.get_setting(key TEXT)

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

Аргументы

Ключ

Допустимые значения:

  • intra_op_parallelism: задает общее количество потоков, используемых для параллелизации одного оператора в пуле потоков среды выполнения ONNX. По умолчанию мы максимально увеличим количество потоков внутри операций, так как это повышает общую пропускную способность (все доступные ЦП по умолчанию).
  • inter_op_parallelism: задает общее количество потоков, используемых для вычислений нескольких операторов параллельно с пулом потоков среды выполнения ONNX. По умолчанию мы устанавливаем минимально возможный поток, равный 1. Увеличение часто повреждает производительность из-за частых переключений контекста между потоками.
  • spin_control: переключает спиннинг пула потоков среды выполнения ONNX для запросов. При отключении он использует меньше ЦП и, следовательно, приводит к большей задержке. По умолчанию оно имеет значение true (включено).

Возвращаемый тип

TEXT представляет текущее значение выбранного параметра.

Примеры

Создание внедренных данных из существующих текстов

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

-- Create documents table
CREATE TABLE documents(doc_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, doc_contents TEXT NOT NULL, last_update TIMESTAMPTZ DEFAULT now());

--Insert data into the docs table
INSERT INTO documents(doc_contents) VALUES
  ('Create in-database embeddings with azure_local_ai extension.'),
  ('Enable RAG patterns with in-database embeddings and vectors on Azure Database for PostgreSQL - Flexible server.'),
  ('Generate vector embeddings in PostgreSQL with azure_local_ai extension.'),
  ('Generate text embeddings in PostgreSQL for retrieval augmented generation (RAG) patterns with azure_local_ai extension and locally deployed LLM.'),
  ('Use vector indexes and Azure OpenAI embeddings in PostgreSQL for retrieval augmented generation.');


-- Add a vector column and generate vector embeddings from locally deployed model
ALTER TABLE documents
  ADD COLUMN doc_vector vector(384) -- multilingual-e5 embeddings are 384 dimensions
  GENERATED ALWAYS AS (azure_local_ai.create_embeddings('multilingual-e5-small:v1', doc_contents)::vector) STORED; -- TEXT string sent to local model

--View floating point entries in the doc_vector column
SELECT doc_vector FROM documents;

-- Add a single record to the documents table and the vector embedding using azure_local_ai and locally deployed model will be automatically generated
INSERT INTO documents(doc_contents) VALUES
  ('Semantic Search with Azure Database for PostgreSQL - Flexible Server and Azure OpenAI');

--View all document entries, their contents, embeddings and last time the row was updated
SELECT doc_contents, doc_vector, last_update FROM documents;

-- The following command leverages the overload of azure_local_ai.create_embeddings function which accepts and array of TEXT
-- and produces a table for which each row contains the embedding of one element in the input array
SELECT azure_local_ai.create_embeddings('multilingual-e5-small:v1', array['Recommendation System with Azure Database for PostgreSQL - Flexible Server and Azure OpenAI.', 'Generative AI with Azure Database for PostgreSQL - Flexible Server.']);

Создание внедрения при вставке нового текста

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

-- Create documents table
CREATE TABLE documents(doc_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, doc_contents TEXT NOT NULL, last_update TIMESTAMPTZ DEFAULT now(), doc_vector vector(384)	GENERATED ALWAYS AS (azure_local_ai.create_embeddings('multilingual-e5-small:v1', doc_contents)::vector) STORED);

-- Insert data into the documents table
INSERT INTO documents(doc_contents) VALUES
  ('Create in-database embeddings with azure_local_ai extension.'),
  ('Enable RAG patterns with in-database embeddings and vectors on Azure Database for PostgreSQL - Flexible server.'),
  ('Generate vector embeddings in PostgreSQL with azure_local_ai extension.'),
  ('Generate text embeddings in PostgreSQL for retrieval augmented generation (RAG) patterns with azure_local_ai extension and locally deployed LLM.'),
  ('Use vector indexes and Azure OpenAI embeddings in PostgreSQL for retrieval augmented generation.');

-- Query embedding text, list results by descending similarity score
WITH all_documents AS (
 SELECT doc_id, doc_contents, doc_vector FROM documents
),
target_documents AS (
 SELECT azure_local_ai.create_embeddings('multilingual-e5-small:v1', 'Generate text embeddings in PostgreSQL.') doc_vector
)
SELECT all_documents.doc_id, all_docs.doc_contents , 1 - (all_documents.doc_vector::vector <=> target_documents.doc_vector::vector) AS similarity
 FROM target_documents, all_documents
 ORDER BY similarity DESC
 LIMIT 2;