您需要在資料庫中直接將文本轉化為向量時,RDS PostgreSQL的rds_embedding外掛程式為您提供了自訂模型配置和模型調用能力,使文本到向量的轉換變得簡單快捷,從而滿足特定的資料處理需求。
背景
嵌入(embedding)是指將高維資料對應為低維表示的過程。在機器學習和自然語言處理中,嵌入通常用於將離散的符號或對象表示為連續的向量空間中的點。
在產生嵌入時,向量資料的值取決於所參照的模型資料,RDS PostgreSQL支援使用rds_embedding外掛程式,將資料庫中的常值內容,基於引入的外部模型,產生對應的向量資料,還支援使用向量相似性運算子,計算資料庫內文本與模型中指定文本的相似性,實現更多業務情境。
前提條件
執行個體大版本為RDS PostgreSQL 14或以上。
說明暫不支援RDS PostgreSQL 17。
如執行個體大版本已滿足要求,但仍提示不支援,請升級核心小版本,具體操作,請參見升級核心小版本。
本文使用的模型為開源OpenAI提供的Embeddings模型,請確保您具備
API Key
,並且RDS PostgreSQL執行個體所處地區支援訪問OpenAI,本文樣本執行個體所處地區為新加坡。RDS PostgreSQL資料庫預設不具備訪問外部網路的能力,因此,需要為RDS PostgreSQL執行個體所屬的VPC配置NAT Gateway,使其允許訪問外部模型。NAT Gateway相關資訊,請參見使用公網NAT GatewaySNAT功能訪問互連網。
外掛程式開啟與關閉
請使用高許可權帳號執行如下命令。
開啟外掛程式。
開啟
rds_embedding
外掛程式前,需要先開啟vector
外掛程式,vector
外掛程式提供了必要的向量資料類型支援和基礎向量操作能力(計算向量之間的距離、相似性等),rds_embedding
外掛程式專註於將高維文本資料轉化為向量。CREATE EXTENSION vector; CREATE EXTENSION rds_embedding;
關閉外掛程式。
DROP EXTENSION rds_embedding; DROP EXTENSION vector;
使用樣本
建立測試表(test)。
CREATE TABLE test(info text, vec vector(1536) NOT NULL);
添加模型。
SELECT rds_embedding.add_model('text-embedding-ada-002','https://api.openai.com/v1/embeddings','Authorization: Bearer sk-****P','{"input":{"texts":["%s"]},"model":"text-embedding-v1"}','->"data"->0->>"embedding"');
說明本文使用的模型為開源OpenAI提供的Embeddings模型,請確保您具備
API Key
,並且RDS PostgreSQL執行個體所處地區支援訪問OpenAI,本文樣本執行個體所處地區為新加坡。本樣本使用的函數rds_embedding.add_model()具體使用方法,請參見rds_embedding.add_model()。
插入文本和其對應的向量資料。
INSERT INTO test SELECT '風急天高猿嘯哀', rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '風急天高猿嘯哀')::real[]; INSERT INTO test SELECT '渚清沙白鳥飛回', rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '渚清沙白鳥飛回')::real[]; INSERT INTO test SELECT '無邊落木蕭蕭下', rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '無邊落木蕭蕭下')::real[]; INSERT INTO test SELECT '不盡長江滾滾來', rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '不盡長江滾滾來')::real[];
說明本樣本使用的函數rds_embedding.get_embedding_by_model()具體使用方法,請參見rds_embedding.get_embedding_by_model()。
計算文本
不盡長江滾滾來
與test表中各文本的向量相似性。SELECT info, vec <=> rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '不盡長江滾滾來')::real[]::vector AS distance FROM test ORDER BY vec <=> rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '不盡長江滾滾來')::real[]::vector;
返回結果樣本:
info | distance ----------------+-------------------- 不盡長江滾滾來 | 0 無邊落木蕭蕭下 | 0.6855717919553399 風急天高猿嘯哀 | 0.7423166439170339 渚清沙白鳥飛回 | 0.7926204045363088 (4 rows)