您需要在資料庫中直接將文本轉化為向量時,RDS PostgreSQL的rds_embedding外掛程式為您提供了自訂模型配置和模型調用能力,使文本到向量的轉換變得簡單快捷,從而滿足特定的資料處理需求。
背景
嵌入(embedding)是指將高維資料對應為低維表示的過程。在機器學習和自然語言處理中,嵌入通常用於將離散的符號或對象表示為連續的向量空間中的點。
在產生嵌入時,向量資料的值取決於所參照的模型資料,RDS PostgreSQL支援使用rds_embedding外掛程式,將資料庫中的常值內容,基於引入的外部模型,產生對應的向量資料,還支援使用向量相似性運算子,計算資料庫內文本與模型中指定文本的相似性,實現更多業務情境。
前提條件
執行個體大版本為RDS PostgreSQL 14或以上。
如執行個體大版本已滿足要求,但仍提示不支援,請升級核心小版本,具體操作,請參見升級核心小版本。
本文使用的模型為阿里雲大模型服務平台百鍊提供的通用文本向量模型,請先前往百鍊開通服務,並擷取API-KEY。具體操作,請參見擷取API Key。
說明除了本文使用的通用文本向量模型外,您還可以使用rds_embedding外掛程式提供的函數添加其他模型,具體請參見rds_embedding外掛程式提供的函數。
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;
使用樣本
本文以阿里雲大模型服務平台百鍊提供的通用文本向量模型text-embedding-v3版本為例。更多通用文本向量模型請參見模型介紹。
建立測試表test。
CREATE TABLE test(info text, vec vector(1024) NOT NULL);
添加模型。
SELECT rds_embedding.add_model( 'text-embedding-v3', 'https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding', 'Authorization: Bearer sk-****', '{"input":{"texts":["%s"]},"model":"text-embedding-v3","parameters":{"text_type":"query"}}', '->''output''->''embeddings''->0->>''embedding''' );
說明函數rds_embedding.add_model()的具體使用方法,請參見rds_embedding.add_model()。
插入文本和其對應的向量資料。
INSERT INTO test SELECT '風急天高猿嘯哀', rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', '風急天高猿嘯哀')::real[]; INSERT INTO test SELECT '渚清沙白鳥飛回', rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', '渚清沙白鳥飛回')::real[]; INSERT INTO test SELECT '無邊落木蕭蕭下', rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', '無邊落木蕭蕭下')::real[]; INSERT INTO test SELECT '不盡長江滾滾來', rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', '不盡長江滾滾來')::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-v3', 'sk-****', '不盡長江滾滾來' )::real[]::vector AS distance FROM test ORDER BY vec <=> rds_embedding.get_embedding_by_model( 'text-embedding-v3', 'sk-****', '不盡長江滾滾來' )::real[]::vector;
返回結果樣本:
info | distance ----------------+-------------------- 不盡長江滾滾來 | 0 無邊落木蕭蕭下 | 0.42740682200152647 風急天高猿嘯哀 | 0.5247695147991147 渚清沙白鳥飛回 | 0.5161883811726116 (4 rows)