共用方式為


在適用於 PostgreSQL 的 Azure 資料庫彈性伺服器 (預覽版) 上生成具有 azure_local_ai 的向量內嵌

必要條件

  1. 在記憶體最佳化的 VM SKU 上執行的適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體。 在這裡深入了解 Azure 記憶體最佳化 VM:Azure VM 大小 - 記憶體 - Azure 虛擬機器

  2. 啟用下列延伸模組,

    1. vector

    2. azure_local_ai

如需在適用於 PostgreSQL 的 Azure 資料庫中啟用延伸模組的詳細資訊,請參閱 如何在適用於 PostgreSQL 的 Azure 資料庫中啟用延伸模組

注意

啟用 Azure 本機 AI 預覽會將 multilingual-e5-small 模型部署至適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體。 連結的文件提供 e5 小組的授權條款。 其他第三方開放原始碼模型可能會持續可供安裝。

azure_local_ai 延伸模組所提供的函式

azure_local_ai 延伸模組 提供一組函式。 這些函式可讓您從文字資料建立向量內嵌,讓您更輕鬆地開發生成式 AI 應用程式。 此延伸模組提供用來建立內嵌、取得設定等功能的函式。 藉由使用這些函式,您可以簡化開發流程,並不需要對裝載於 PostgreSQL 界限外的 AI 內嵌模型進行額外的遠端 API 呼叫,以減少延遲。

結構描述 名稱 結果資料類型 引數資料類型
azure_local_ai create_embeddings TABLE (內嵌 real[]) model_uri 文字、輸入文字[]、batch_size bigint DEFAULT 128、timeout_ms 整數 DEFAULT 3600000
azure_local_ai create_embeddings real[] model_uri 文字、輸入文字、timeout_ms 整數 DEFAULT 3600000
azure_local_ai get_setting jsonb keys text[] DEFAULT ARRAY[]:: text[], timeout_ms 整數 DEFAULT 36000000
azure_local_ai get_setting text 索引鍵文字,timeout_ms 整數 DEFAULT 3600000
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

texttext[] 單一文字或文字陣列,視用來建立內嵌的函式多載而定。

batch_size

一次要處理的 bigint DEFAULT 128 記錄數目 (僅適用於參數 input 屬於 text[] 型別之函式的多載)。

timeout_ms

作業停止之前的 integer DEFAULT 3600000 逾時 (以毫秒為單位)。

使用 azure_local_ai 和本機部署的多語系 e5-small 模型來建立內嵌,並將其儲存為向量

以下是可在您自己的環境中用來測試內嵌生成與本機部署多語系-e5 模型的範例。

--Create docs table
CREATE TABLE docs(doc_id int generated always as identity primary key, doc text not null, embedding float4[], last_update timestamptz default now());

--Insert data into the docs table
INSERT INTO docs(doc) 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 docs
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)::vector) STORED; -- TEXT string sent to local model

--View floating point entries in the doc_vector column
select doc_vector from docs;

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

--View all doc entries and their doc_vector column
select doc, doc_vector, last_update from docs;

-- Simple array embedding
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 模型的範例。

-- Update embeddings upon insertion

-- create table
create table docs(doc_id int generated always as identity primary key, doc text not null, last_update timestamptz default now(), embedding float4[] 
	GENERATED ALWAYS AS (azure_local_ai.create_embeddings('multilingual-e5-small:v1', doc)) STORED);

--Insert data into the docs table
INSERT INTO docs(doc) 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_docs as (
 select doc_id, doc, embedding
  from docs
), target_doc as (
 select azure_local_ai.create_embeddings('multilingual-e5-small:v1', 'Generate text embeddings in PostgreSQL.') embedding
)
select all_docs.doc_id, all_docs.doc , 1 - (all_docs.embedding::vector <=> target_doc.embedding::vector) as similarity
 from target_doc, all_docs
 order by similarity desc
 limit 2;

ONNX 執行階段設定

azure_local_ai.get_setting

用來取得組態選項的目前值。

SELECT azure_local_ai.get_setting(key TEXT)

azure_local_ai 延伸模組支援檢閱 ONNX Runtime 執行階段服務內 ONNX 執行階段對話集區的設定參數。 目前不允許變更。 請參閱 ONNX 執行階段效能微調。

引數

Key

key 的有效值為:

  • intra_op_parallelism:設定 ONNX Runtime 執行階段執行緒集區用於平行處理單一運算子的執行緒總數。 根據預設,我們會儘可能將內部作業執行緒數目最大化,以大幅改善整體輸送量 (預設所有可用的 CPU)。
  • inter_op_parallelism:設定 ONNX 執行階段執行緒集區平行計算多個運算子所使用的執行緒總數。 根據預設,我們會將它設定為可能的執行緒最小值,也就是 1。 增加這個值通常會因為執行緒之間頻繁的環境切換而造成效能降低。
  • spin_control:為要求切換 ONNX 執行階段執行緒集區旋轉。 停用時,它使用的 CPU 減少,因而造成進一步延遲。 預設設定為 true (已啟用)。

傳回類型

TEXT 代表所選設定的目前值。