Anlamsal arama veya Retrieval-Augmented Generation (RAG) işlem hatları oluştururken metin gömme (embedding) verisi üretmek genellikle veritabanınızın dışında ayrı bir hizmet gerektirir. rds_embedding uzantısı, harici bir gömme modelini doğrudan ApsaraDB RDS for PostgreSQL içinden çağırmanıza, elde edilen vektörleri verilerinizle birlikte saklamanıza ve kosinüs benzerliği sorguları çalıştırmanıza olanak tanır; tüm bu işlemler veritabanı içinde gerçekleşir. Güvenlik riskleri nedeniyle bu uzantının tüm sürümlerde oluşturulması kısıtlanmıştır. Bu konudaki içerik yalnızca uzantının zaten oluşturulmuş olduğu örnekler için geçerlidir.
Güvenlik riskleri nedeniyle rds_embedding uzantısının RDS PostgreSQL'in tüm ana ve alt motor sürümlerinde oluşturulması kısıtlanmıştır. Alt motor sürümünü yükseltmek bu kısıtlamayı kaldırmaz. Uzantının zaten oluşturulduğu örnekler etkilenmez ve uzantıyı kullanmaya devam edebilir. Bu konudaki içerik yalnızca bu tür örnekler için geçerlidir.
Ön koşullar
Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:
PostgreSQL 14 veya sonraki bir sürümü çalışan bir RDS örneği
rds_embeddinguzantısının zaten oluşturulduğu bir örnek. Uzantının tüm sürümlerde oluşturulması kısıtlanmıştır ve alt motor sürümünün yükseltilmesi bu kısıtlamayı kaldırmazBir Alibaba Cloud Model Studio API anahtarı. Anahtar almak için bkz. API anahtarınızı alın
-
RDS örneğinizin çalıştığı sanal özel cloud (VPC) için yapılandırılmış bir NAT Gateway. RDS PostgreSQL örnekleri varsayılan olarak internete erişemez, bu nedenle harici gömme modellerini çağırmak için bir NAT Gateway gereklidir
Uzantıyı etkinleştirin
Aşağıdaki komutları yetkili bir hesap kullanarak çalıştırın. Önce vector uzantısını etkinleştirin; bu uzantı rds_embedding uzantısının bağımlı olduğu vektör veri türünü ve işlemlerini sağlar. rds_embedding uzantısının tüm sürümlerde oluşturulması kısıtlanmıştır. Aşağıdaki ifade yalnızca uzantının zaten oluşturulduğu örnekler için geçerlidir.
CREATE EXTENSION vector;
CREATE EXTENSION rds_embedding;
Uzantıları devre dışı bırakmak için:
DROP EXTENSION rds_embedding;
DROP EXTENSION vector;
Gömmeleri oluşturun ve sorgulayın
Aşağıdaki örnekte 1024 boyutlu vektörler oluşturmak ve kosinüs benzerliği sorgusu çalıştırmak için Alibaba Cloud Model Studio'daki text-embedding-v3 modeli kullanılmaktadır. Model hakkında daha fazla bilgi için bkz. Model tanıtımı.
1. Adım: Tablo oluşturun
İçerik için bir text sütunu ve gömmeler için bir vector(1024) sütunu içeren bir tablo oluşturun.
CREATE TABLE test(info text, vec vector(1024) NOT NULL);
2. Adım: Gömme modelini kaydedin
Uç nokta URL'sini, yetkilendirme üst bilgisi şablonunu, istek gövdesi şablonunu ve yanıttan gömmeyi ayıklamak için JSON yolunu sağlayarak text-embedding-v3 modelini kaydedin.
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'''
);
sk-**** ifadesini API anahtarınızla değiştirin.
3. Adım: Metin ve gömmeleri ekleyin
rds_embedding.get_embedding_by_model() işlevini satır içi çağırarak her satırı ekleyin. İşlev model API'sini çağırır ve verilen metin için gömme vektörünü döndürür.
INSERT INTO test SELECT 'Windy high sky, apes cry sadly',
rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Windy high sky, apes cry sadly')::real[];
INSERT INTO test SELECT 'Clear islet, white sand, birds fly back',
rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Clear islet, white sand, birds fly back')::real[];
INSERT INTO test SELECT 'Boundless falling leaves rustle down',
rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Boundless falling leaves rustle down')::real[];
INSERT INTO test SELECT 'Endless Yangtze River rolls on',
rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Endless Yangtze River rolls on')::real[];
sk-**** ifadesini API anahtarınızla değiştirin.
4. Adım: Vektör benzerliğine göre sorgulama yapın
Satırları bir sorgu dizesine anlamsal benzerliğe göre sıralamak için <=> işlecini (kosinüs mesafesi) kullanın. 0 mesafe özdeş vektörler anlamına gelir; daha düşük değerler daha yüksek benzerliği gösterir.
SELECT
info,
vec <=> rds_embedding.get_embedding_by_model(
'text-embedding-v3',
'sk-****',
'Endless Yangtze River rolls on'
)::real[]::vector AS distance
FROM
test
ORDER BY
vec <=> rds_embedding.get_embedding_by_model(
'text-embedding-v3',
'sk-****',
'Endless Yangtze River rolls on'
)::real[]::vector;
sk-**** ifadesini API anahtarınızla değiştirin.
Beklenen çıktı:
info | distance
-----------------------------------------+--------------------
Endless Yangtze River rolls on | 0
Boundless falling leaves rustle down | 0.42740682200152647
Clear islet, white sand, birds fly back | 0.5161883811726116
Windy high sky, apes cry sadly | 0.5247695147991147
(4 rows)
Sorgu "Endless Yangtze River rolls on" ifadesini ilk sırada (mesafe 0, tam eşleşme) döndürür; bunu en yakın anlamsal komşu olarak "Boundless falling leaves rustle down" izler.



