1. Genel Bakış
Bağlamsal arama, farklı sektörlerde uygulamaların kalbini ve merkezini oluşturan kritik bir işlevdir. Retrieval Augmented Generation, üretken yapay zeka destekli alma mekanizmalarıyla bir süredir bu önemli teknolojik evrimin temel itici gücü olmuştur. Üretken modeller, büyük bağlam pencereleri ve etkileyici çıkış kaliteleriyle yapay zekayı dönüştürüyor. RAG, bağlamı yapay zeka uygulamalarına ve ajanlarına yerleştirmenin sistematik bir yolunu sunar. Bu sayede, yapılandırılmış veritabanlarında veya çeşitli medyaların bilgilerinde temellendirme yapılır. Bu bağlamsal veriler, doğrunun netliği ve çıktının doğruluğu açısından çok önemlidir. Ancak bu sonuçlar ne kadar doğrudur? İşletmeniz büyük ölçüde bu bağlamsal eşleşmelerin doğruluğuna ve alaka düzeyine mi bağlı? O zaman bu proje sizi çok eğlendirecek!
Vektör aramasının gizli sırrı, yalnızca oluşturulması değil, vektör eşleşmelerinizin gerçekten iyi olup olmadığını bilmektir. Hepimiz sonuç listesine boş boş bakıp "Bu şey çalışıyor mu acaba?" diye düşünmüşüzdür. Vektör eşleşmelerinizin kalitesini nasıl değerlendireceğinizi ayrıntılı olarak inceleyelim. "Peki RAG'de ne değişti?" diye sorabilirsiniz. Her şey! Veriyle Artırılmış Üretim (RAG) yıllardır umut verici ancak ulaşılması zor bir hedef gibi görünüyordu. Artık nihayet, görev açısından kritik önem taşıyan görevler için gereken performans ve güvenilirlikte RAG uygulamaları oluşturma araçlarına sahibiz.
Şimdiye kadar 3 temel konu hakkında bilgi edindik:
- Bağlamsal aramanın aracınız için ne anlama geldiği ve Vector Search'ü kullanarak bunu nasıl başaracağınız.
- Ayrıca, verileriniz kapsamında (yani veritabanınızın içinde) Vector Search'e ulaşma konusunu da ayrıntılı olarak ele aldık. (Zaten bilmiyorsanız tüm Google Cloud veritabanlarının bunu desteklediğini hatırlatırız.)
- ScaNN dizini tarafından desteklenen AlloyDB vektör arama özelliğiyle yüksek performans ve kaliteye sahip bu tür hafif bir vektör arama RAG özelliğini nasıl kullanacağınızı anlatarak dünyanın geri kalanından bir adım öteye gittik.
Temel, orta ve biraz ileri düzeydeki RAG denemelerini yapmadıysanız bu 3 denemeyi burada, burada ve burada listelenen sırayla okumanızı öneririz.
Patent Arama, kullanıcının arama metniyle bağlamsal olarak alakalı patentleri bulmasına yardımcı olur. Bu özelliğin bir sürümünü geçmişte oluşturmuştuk. Şimdi bu uygulamayı, kalite kontrollü bağlamsal arama sağlayan yeni ve gelişmiş RAG özellikleriyle oluşturacağız. Haydi başlayalım.
Aşağıdaki resimde, bu uygulamada olan bitenin genel akışı gösterilmektedir.~ 
Hedef
Kullanıcının, AlloyDB'nin en yeni RAG özelliklerini kullanarak oluşturulan eşleşmelerin kalitesini değerlendirebilmesinin yanı sıra, geliştirilmiş performans ve daha iyi kaliteyle metin açıklamasına dayalı patent araması yapmasına olanak tanıyın.
Ne oluşturacaksınız?
Bu laboratuvar kapsamında şunları yapacaksınız:
- AlloyDB örneği oluşturma ve Patents Public Dataset'i yükleme
- Meta veri dizini ve ScaNN dizini oluşturma
- ScaNN'nin satır içi filtreleme yöntemini kullanarak AlloyDB'de gelişmiş vektör araması uygulama
- Geri çağırma değerlendirme özelliğini uygulama
- Sorgu yanıtını değerlendirme
Şartlar
2. Başlamadan önce
Proje oluşturma
- Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
- Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Bir projede faturalandırmanın etkin olup olmadığını kontrol etmeyi öğrenin .
- Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız. Google Cloud Console'un üst kısmında Cloud Shell'i etkinleştir'i tıklayın.

- Cloud Shell'e bağlandıktan sonra aşağıdaki komutu kullanarak kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını kontrol edin:
gcloud auth list
- gcloud komutunun projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın.
gcloud config list project
- Projeniz ayarlanmamışsa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
- Gerekli API'leri etkinleştirin. Cloud Shell terminalinde bir gcloud komutu kullanabilirsiniz:
gcloud services enable alloydb.googleapis.com compute.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudfunctions.googleapis.com aiplatform.googleapis.com
Gcloud komutuna alternatif olarak, her ürünü arayarak veya bu bağlantıyı kullanarak konsol üzerinden de işlem yapabilirsiniz.
gcloud komutları ve kullanımı için belgelere bakın.
3. Veritabanı kurulumu
Bu laboratuvarda patent verileri için veritabanı olarak AlloyDB'yi kullanacağız. Veritabanları ve günlükler gibi tüm kaynakları tutmak için kümeler kullanılır. Her kümede, verilere erişim noktası sağlayan bir birincil örnek bulunur. Tablolar gerçek verileri içerir.
Patent veri kümesinin yükleneceği bir AlloyDB kümesi, örneği ve tablosu oluşturalım.
Küme ve örnek oluşturma
- Cloud Console'da AlloyDB sayfasına gidin. Cloud Console'daki çoğu sayfayı bulmanın kolay bir yolu, konsolun arama çubuğunu kullanarak arama yapmaktır.
- Bu sayfada KÜME OLUŞTUR'u seçin:

- Aşağıdaki gibi bir ekran görürsünüz. Aşağıdaki değerlerle bir küme ve örnek oluşturun (Uygulama kodunu depodan klonluyorsanız değerlerin eşleştiğinden emin olun):
- küme kimliği: "
vector-cluster" - password: "
alloydb" - PostgreSQL 15 / en son önerilen
- Region: "
us-central1" - Ağ: "
default"

- Varsayılan ağı seçtiğinizde aşağıdaki gibi bir ekran görürsünüz.
BAĞLANTIYI AYARLA'yı seçin.

- Buradan "Otomatik olarak atanmış bir IP aralığı kullan"ı seçip Devam'ı tıklayın. Bilgileri inceledikten sonra BAĞLANTI OLUŞTUR'u seçin.

- Ağınız kurulduktan sonra kümenizi oluşturmaya devam edebilirsiniz. Aşağıda gösterildiği gibi küme kurulumunu tamamlamak için CREATE CLUSTER'ı (KÜME OLUŞTUR) tıklayın:

Örnek kimliğini (küme / örnek yapılandırılırken bulabilirsiniz) değiştirdiğinizden emin olun.
vector-instance. Değiştiremiyorsanız gelecekteki tüm referanslarda örnek kimliğinizi kullanmayı unutmayın.
Küme oluşturma işleminin yaklaşık 10 dakika süreceğini unutmayın. İşlem başarılı olduğunda, yeni oluşturduğunuz kümenizin genel görünümünü gösteren bir ekran görürsünüz.
4. Veri kullanımı
Şimdi mağazayla ilgili verilerin bulunduğu bir tablo ekleme zamanı. AlloyDB'ye gidin, birincil kümeyi ve ardından AlloyDB Studio'yu seçin:
Örneğinizin oluşturulmasının tamamlanmasını beklemeniz gerekebilir. İşlem tamamlandığında, kümeyi oluştururken oluşturduğunuz kimlik bilgilerini kullanarak AlloyDB'de oturum açın. PostgreSQL'de kimlik doğrulaması yapmak için aşağıdaki verileri kullanın:
- Kullanıcı adı : "
postgres" - Veritabanı : "
postgres" - Şifre : "
alloydb"
AlloyDB Studio'da kimliğinizi başarıyla doğruladıktan sonra SQL komutları Düzenleyici'ye girilir. Son pencerenin sağındaki artı işaretini kullanarak birden fazla düzenleyici penceresi ekleyebilirsiniz.

AlloyDB ile ilgili komutları, gerektiğinde Çalıştır, Biçimlendir ve Temizle seçeneklerini kullanarak düzenleyici pencerelerine gireceksiniz.
Uzantıları etkinleştirme
Bu uygulamayı oluşturmak için pgvector ve google_ml_integration uzantılarını kullanacağız. pgvector uzantısı, vektör yerleştirmelerini depolamanıza ve aramanıza olanak tanır. google_ml_integration uzantısı, SQL'de tahmin almak için Vertex AI tahmin uç noktalarına erişmek üzere kullandığınız işlevler sağlar. Aşağıdaki DDL'leri çalıştırarak bu uzantıları etkinleştirin:
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;
Veritabanınızda etkinleştirilen uzantıları kontrol etmek istiyorsanız şu SQL komutunu çalıştırın:
select extname, extversion from pg_extension;
Tablo oluşturma
AlloyDB Studio'da aşağıdaki DDL ifadesini kullanarak tablo oluşturabilirsiniz:
CREATE TABLE patents_data ( id VARCHAR(25), type VARCHAR(25), number VARCHAR(20), country VARCHAR(2), date VARCHAR(20), abstract VARCHAR(300000), title VARCHAR(100000), kind VARCHAR(5), num_claims BIGINT, filename VARCHAR(100), withdrawn BIGINT, abstract_embeddings vector(768)) ;
abstract_embeddings sütunu, metnin vektör değerlerinin depolanmasına olanak tanır.
İzin Ver
"embedding" işlevinde yürütme izni vermek için aşağıdaki ifadeyi çalıştırın:
GRANT EXECUTE ON FUNCTION embedding TO postgres;
AlloyDB hizmet hesabına Vertex AI Kullanıcısı ROLÜ'nü verme
Google Cloud IAM Console'dan AlloyDB hizmet hesabına (service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com şeklinde görünür) "Vertex AI Kullanıcısı" rolüne erişim izni verin. PROJECT_NUMBER, proje numaranızı içerir.
Alternatif olarak, aşağıdaki komutu Cloud Shell terminalinden çalıştırabilirsiniz:
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
Veritabanına patent verileri yükleme
Veri kümemiz olarak BigQuery'deki Google Patents Public Datasets (Google Patentleri Herkese Açık Veri Kümeleri) kullanılacaktır. Sorgularımızı çalıştırmak için AlloyDB Studio'yu kullanacağız. Veriler bu insert_scripts.sql dosyasından alınır ve patent verilerini yüklemek için bu dosyayı çalıştırırız.
- Google Cloud Console'da AlloyDB sayfasını açın.
- Yeni oluşturduğunuz kümeyi seçin ve örneği tıklayın.
- AlloyDB gezinme menüsünde AlloyDB Studio'yu tıklayın. Kimlik bilgilerinizle oturum açın.
- Sağdaki Yeni sekme simgesini tıklayarak yeni bir sekme açın.
- Yukarıda belirtilen
insert_scripts.sqlkomut dosyasındaninsertsorgu ifadesini kopyalayıp düzenleyiciye yapıştırın. Bu kullanım alanının hızlı bir demosunu yapmak için 10-50 ekleme ifadesini kopyalayabilirsiniz. - Çalıştır'ı tıklayın. Sorgunuzun sonuçları Sonuçlar tablosunda görünür.
Not: Ekleme komut dosyasında çok fazla veri olduğunu fark edebilirsiniz. Bunun nedeni, ekleme komut dosyalarına yerleştirmeler eklememizdir. Dosyayı GitHub'da yüklemekte sorun yaşıyorsanız "View Raw" (Ham Olarak Görüntüle) seçeneğini tıklayın. Bu, Google Cloud için deneme kredisi faturalandırma hesabı kullanıyorsanız (sonraki adımlarda) birkaç yerleştirme (ör. en fazla 20-25) oluşturma zahmetinden kurtulmanız için yapılır.
5. Patent verileri için yerleştirilmiş öğeler oluşturma
Öncelikle aşağıdaki örnek sorguyu çalıştırarak yerleştirme işlevini test edelim:
SELECT embedding('text-embedding-005', 'AlloyDB is a managed, cloud-hosted SQL database service.');
Bu işlem, sorgudaki örnek metin için kayan nokta dizisi gibi görünen yerleştirme vektörünü döndürmelidir. Şöyle görünür:

abstract_embeddings Vector alanını güncelleme
abstract_embeddings verilerini ekleme komut dosyasının bir parçası olarak eklemediyseniz tablodaki patent özetlerini karşılık gelen yerleştirmelerle güncellemek için aşağıdaki DML'yi çalıştırın:
UPDATE patents_data set abstract_embeddings = embedding( 'text-embedding-005', abstract);
Google Cloud için deneme kredisi faturalandırma hesabı kullanıyorsanız birkaç yerleştirme (ör. en fazla 20-25) oluşturmakta sorun yaşayabilirsiniz. Bu nedenle, yerleştirmeleri ekleme komut dosyalarına ekledim. "Patent verilerini veritabanına yükleme" adımını tamamladıysanız bu yerleştirmeler, yüklenen tablonuzda yer almalıdır.
6. AlloyDB'nin yeni özellikleriyle gelişmiş RAG gerçekleştirme
Tablo, veriler ve yerleştirmeler hazır olduğuna göre artık kullanıcı arama metni için anlık Vector Search işlemini gerçekleştirebiliriz. Aşağıdaki sorguyu çalıştırarak bunu test edebilirsiniz:
SELECT id || ' - ' || title as title FROM patents_data ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;
Bu sorguda,
- Kullanıcının aradığı metin: "Sentiment Analysis".
- Bu metni, model: text-embedding-005 kullanarak embedding() yönteminde yerleştirmelere dönüştürüyoruz.
- "<=>", KOSİNÜS BENZERLİĞİ uzaklık yönteminin kullanımını gösterir.
- Yerleştirme yönteminin sonucunu, veritabanında depolanan vektörlerle uyumlu hale getirmek için vektör türüne dönüştürüyoruz.
- LIMIT 10, arama metninin en yakın 10 eşleşmesinin seçildiğini gösterir.
AlloyDB, vektör arama RAG'i bir üst seviyeye taşıyor:
Birçok yeni özellik kullanıma sunuldu. Geliştiricilere yönelik iki önemli özellik şunlardır:
- Satır İçi Filtreleme
- Geri Çağırma Değerlendiricisi
Satır İçi Filtreleme
Daha önce bir geliştirici olarak Vector Search sorgusunu çalıştırmanız, filtreleme ve geri çağırma işlemlerini yapmanız gerekiyordu. AlloyDB sorgu optimize edicisi, filtrelerle sorgunun nasıl yürütüleceği konusunda seçimler yapar. Satır içi filtreleme, AlloyDB sorgu optimizasyon aracının hem meta veri filtreleme koşullarını hem de vektör aramasını birlikte değerlendirmesine olanak tanıyan yeni bir sorgu optimizasyonu tekniğidir. Bu teknik, hem vektör dizinlerinden hem de meta veri sütunlarındaki dizinlerden yararlanır. Bu sayede hatırlama performansı arttı ve geliştiriciler, AlloyDB'nin kullanıma hazır sunduğu özelliklerden yararlanabildi.
Satır içi filtreleme, orta seçiciliğe sahip durumlar için en iyisidir. AlloyDB, vektör dizininde arama yaparken yalnızca meta veri filtreleme koşullarıyla eşleşen vektörlerin (genellikle WHERE ifadesinde işlenen bir sorgudaki işlevsel filtreleriniz) mesafelerini hesaplar. Bu, filtre sonrası veya filtre öncesi avantajlarını tamamlayarak bu sorguların performansını büyük ölçüde artırır.
- pgvector uzantısını yükleme veya güncelleme
CREATE EXTENSION IF NOT EXISTS vector WITH VERSION '0.8.0.google-3';
pgvector uzantısı zaten yüklüyse geri çağırma değerlendirici özelliklerini kullanmak için vektör uzantısını 0.8.0.google-3 veya sonraki bir sürüme yükseltin.
ALTER EXTENSION vector UPDATE TO '0.8.0.google-3';
Bu adım yalnızca vektör uzantınız <0.8.0.google-3> ise uygulanmalıdır.
Önemli not: Satır sayınız 100'den azsa daha az satır için geçerli olmayacağından ScaNN dizini oluşturmanız gerekmez. Bu durumda lütfen aşağıdaki adımları atlayın.
- ScaNN dizinleri oluşturmak için alloydb_scann uzantısını yükleyin.
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
- Öncelikle Vector Search sorgusunu dizin olmadan ve satır içi filtre etkin olmadan çalıştırın:
SELECT id || ' - ' || title as title FROM patents_data
WHERE num_claims >= 15
ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;
Sonuç şuna benzer olmalıdır:

- Üzerinde Analizi Açıklama'yı çalıştırın: (Dizin veya satır içi filtreleme olmadan)

Yürütme süresi 2,4 ms
- num_claims alanında filtreleme yapabilmek için bu alanda normal bir dizin oluşturalım:
CREATE INDEX idx_patents_data_num_claims ON patents_data (num_claims);
- Patent Arama uygulamamız için ScaNN dizinini oluşturalım. AlloyDB Studio'da aşağıdakileri çalıştırın:
CREATE INDEX patent_index ON patents_data
USING scann (abstract_embeddings cosine)
WITH (num_leaves=32);
Önemli not: (num_leaves=32), 1.000'den fazla satır içeren toplam veri setimiz için geçerlidir. Satır sayınız 100'den azsa daha az satır için geçerli olmayacağından dizin oluşturmanız gerekmez.
- ScaNN dizininde satır içi filtrelemeyi etkinleştirin:
SET scann.enable_inline_filtering = on
- Şimdi aynı sorguyu filtre ve vektör aramasıyla birlikte çalıştıralım:
SELECT id || ' - ' || title as title FROM patents_data
WHERE num_claims >= 15
ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;

Aynı Vector Search için yürütme süresinin önemli ölçüde kısaldığını görebilirsiniz. Vector Search'teki satır içi filtreleme özellikli ScaNN dizini bunu mümkün kıldı.
Ardından, ScaNN'nin etkinleştirildiği bu vektör aramasının hatırlama oranını değerlendirelim.
Geri Çağırma Değerlendiricisi
Benzerlik aramasında geri çağırma, bir aramadan alınan alakalı örneklerin yüzdesidir. Diğer bir deyişle, doğru pozitiflerin sayısıdır. Bu metrik, arama kalitesini ölçmek için en sık kullanılan metriktir. Geri çağırma kaybının bir nedeni, yaklaşık en yakın komşu araması (aNN) ile k (tam) en yakın komşu araması (kNN) arasındaki farktır. AlloyDB'nin ScaNN'si gibi vektör dizinleri, aNN algoritmalarını uygular. Bu sayede, hatırlama konusunda küçük bir ödün vererek büyük veri kümelerinde vektör aramasını hızlandırabilirsiniz. AlloyDB artık bu dengeyi doğrudan veritabanında tek tek sorgular için ölçmenize ve zaman içinde istikrarlı olmasını sağlamanıza olanak tanır. Daha iyi sonuçlar ve performans elde etmek için bu bilgilere yanıt olarak sorgu ve dizin parametrelerini güncelleyebilirsiniz.
Arama sonuçlarının geri çağrılmasının arkasındaki mantık nedir?
Vektör arama bağlamında hatırlama, dizinin döndürdüğü ve gerçek en yakın komşular olan vektörlerin yüzdesini ifade eder. Örneğin, en yakın 20 komşuya yönelik bir en yakın komşu sorgusu, gerçek en yakın komşulardan 19'unu döndürürse hatırlama oranı 19/20x100 = %95 olur. Arama kalitesi için kullanılan metrik geri çağırma'dır ve sorgu vektörlerine en yakın olan döndürülen sonuçların yüzdesi olarak tanımlanır.
Belirli bir yapılandırma için vektör dizinindeki vektör sorgusunun geri çağırma değerini evaluate_query_recall işlevini kullanarak bulabilirsiniz. Bu işlev, istediğiniz vektör sorgusu hatırlama sonuçlarını elde etmek için parametrelerinizi ayarlamanıza olanak tanır.
Önemli Not:
Aşağıdaki adımlarda HNSW dizininde "izin reddedildi" hatasıyla karşılaşırsanız şimdilik bu geri çağırma değerlendirmesi bölümünün tamamını atlayın. Bu durum, codelab'in belgelendiği sırada yeni yayınlandığı için erişim kısıtlamalarıyla ilgili olabilir.
- ScaNN dizininde ve HNSW dizininde dizin taramayı etkinleştirme işaretini ayarlayın:
SET scann.enable_indexscan = on
SET hnsw.enable_index_scan = on
- AlloyDB Studio'da aşağıdaki sorguyu çalıştırın:
SELECT
*
FROM
evaluate_query_recall($$
SELECT
id || ' - ' || title AS title,
abstract
FROM
patents_data
where num_claims >= 15
ORDER BY
abstract_embeddings <=> embedding('text-embedding-005',
'sentiment analysis')::vector
LIMIT 25 $$,
'{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
ARRAY['scann']);
evaluate_query_recall işlevi, sorguyu parametre olarak alır ve geri çağırmasını döndürür. İşlev giriş sorgusu olarak performansı kontrol etmek için kullandığım sorguyu kullanıyorum. Dizin yöntemi olarak SCaNN'yi ekledim. Daha fazla parametre seçeneği için belgelere bakın.
Bu Vector Search sorgusu için kullandığımız geri çağırma:

Geri çağırmanın %70 olduğunu görüyorum. Artık bu bilgileri kullanarak dizin parametrelerini, yöntemleri ve sorgu parametrelerini değiştirebilir ve bu vektör aramasında hatırlama performansımı artırabilirim.
7. Değiştirilmiş sorgu ve dizin parametreleriyle test etme
Şimdi, alınan geri çağırma işlemine göre sorgu parametrelerini değiştirerek sorguyu test edelim.
- Sonuç kümesindeki satır sayısını 7 olarak değiştirdim (önceki değer 25'ti) ve %86'lık bir geri çağırma oranı elde ettim.

Bu sayede, kullanıcılarımın gördüğü eşleşme sayısını anlık olarak değiştirebiliyorum. Böylece, eşleşmelerin alaka düzeyini kullanıcıların arama bağlamına göre iyileştirebiliyorum.
- Dizin parametrelerini değiştirerek tekrar deneyelim:
Bu test için "Kosinüs" benzerlik uzaklığı işlevi yerine "L2 Uzaklığı" işlevini kullanacağım. Arama sonucu kümesi sayısı artmış olsa bile arama sonuçlarının kalitesinde iyileşme olup olmadığını göstermek için sorgu sınırını da 10 olarak değiştireceğim.
[ÖNCE] Kosinüs benzerliği uzaklık işlevini kullanan sorgu:
SELECT
*
FROM
evaluate_query_recall($$
SELECT
id || ' - ' || title AS title,
abstract
FROM
patents_data
where num_claims >= 15
ORDER BY
abstract_embeddings <=> embedding('text-embedding-005',
'sentiment analysis')::vector
LIMIT 10 $$,
'{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
ARRAY['scann']);
Çok Önemli Not: "Bu sorgunun COSINE benzerliğini kullandığını nereden biliyoruz?" diye sorabilirsiniz. Kosinüs uzaklığını temsil etmek için "<=>" kullanılarak uzaklık işlevi tanımlanabilir.
Vektör Arama uzaklık işlevleriyle ilgili doküman bağlantısı.
Yukarıdaki sorgunun sonucu şudur:

Gördüğünüz gibi, dizin mantığımızda herhangi bir değişiklik yapmadan RECALL değeri %70. Satır İçi Filtreleme bölümünün 6. adımında oluşturduğumuz ScaNN dizinini ("patent_index ") hatırlıyor musunuz? Yukarıdaki sorguyu çalıştırırken aynı dizin geçerliliğini korumaya devam eder.
Şimdi farklı bir mesafe işlevi sorgusuyla dizin oluşturalım: L2 mesafesi: <->
drop index patent_index;
CREATE INDEX patent_index_L2 ON patents_data
USING scann (abstract_embeddings L2)
WITH (num_leaves=32);
DROP INDEX ifadesi, tabloda gereksiz bir dizin olmamasını sağlamak için kullanılır.
Artık Vector Search işlevimin mesafe işlevini değiştirdikten sonra RECALL'u değerlendirmek için aşağıdaki sorguyu yürütebilirim.
[SONRA] Kosinüs benzerliği uzaklık işlevini kullanan sorgu:
SELECT
*
FROM
evaluate_query_recall($$
SELECT
id || ' - ' || title AS title,
abstract
FROM
patents_data
where num_claims >= 15
ORDER BY
abstract_embeddings <-> embedding('text-embedding-005',
'sentiment analysis')::vector
LIMIT 10 $$,
'{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
ARRAY['scann']);
Yukarıdaki sorgunun sonucu şudur:

Hatırlama değerinde %90'lık bir dönüşüm!
İstenen geri çağırma değerine ve uygulamanızın kullandığı veri kümesine bağlı olarak dizinde değiştirebileceğiniz başka parametreler de vardır (ör. num_leaves).
8. Temizleme
Bu yayında kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın:
- Google Cloud Console'da Kaynak Yöneticisi sayfasına gidin.
- Proje listesinde silmek istediğiniz projeyi seçin ve Sil'i tıklayın.
- İletişim kutusunda proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.
- Alternatif olarak, KÜMEYİ SİL düğmesini tıklayarak bu proje için yeni oluşturduğumuz AlloyDB kümesini silebilirsiniz (yapılandırma sırasında küme için us-central1'i seçmediyseniz bu köprüdeki konumu değiştirin).
9. Tebrikler
Tebrikler! Yüksek performans için AlloyDB'nin gelişmiş vektör arama özelliğiyle bağlamsal patent arama sorgunuzu başarıyla oluşturdunuz ve sorgunuzu gerçekten anlam odaklı hale getirdiniz. ADK'yı ve burada bahsettiğimiz tüm AlloyDB özelliklerini kullanarak yüksek performanslı ve kaliteli bir Patent Vector Search & Analyzer Agent oluşturmak için kalite kontrollü bir çoklu araçlı aracı uygulaması hazırladım. Bu uygulamayı şu bağlantıdan inceleyebilirsiniz: https://youtu.be/Y9fvVY0yZTY
Bu tür bir ajan oluşturmayı öğrenmek istiyorsanız lütfen bu codelab'e bakın.