1. Genel Bakış
Veritabanları için Üretken Yapay Zeka Aracı Kutusu, Google'ın veritabanlarıyla etkileşim kurmak için üretken yapay zeka araçları oluşturmayı kolaylaştıran açık kaynak bir sunucusudur. Bağlantı havuzu oluşturma, kimlik doğrulama ve daha birçok karmaşıklığı ele alarak araçları daha kolay, daha hızlı ve daha güvenli bir şekilde geliştirmenize olanak tanır. Temsilcilerinizin veritabanınızdaki verilere erişmesine olanak tanıyan üretken yapay zeka araçları oluşturmanıza yardımcı olur. Araç Kutusu şunları sağlar:
Basitleştirilmiş geliştirme: Araçları 10 satırdan kısa bir kodla aracınıza entegre edin, araçları birden fazla aracı veya çerçeve arasında yeniden kullanın ve araçların yeni sürümlerini daha kolay dağıtın.
Daha iyi performans: Bağlantı havuzu oluşturma, kimlik doğrulama ve daha fazlası gibi en iyi uygulamalar.
Gelişmiş güvenlik: Verilerinize daha güvenli erişim için entegre kimlik doğrulama.
Uçtan uca gözlemlenebilirlik: OpenTelemetry için yerleşik destek içeren hazır metrik ve izleme.
Araç Kutusu, uygulamanızın orkestrasyon çerçevesi ile veritabanınız arasında yer alır ve araçları değiştirmek, dağıtmak veya çağırmak için kullanılan bir kontrol düzlemi sağlar. Araçları depolamak ve güncellemek için merkezi bir konum sunarak araçlarınızın yönetimini basitleştirir. Böylece, araçları aracılar ve uygulamalar arasında paylaşabilir ve uygulamanızı yeniden dağıtmadan bu araçları güncelleyebilirsiniz.
Ne oluşturacaksınız?
Bu laboratuvar kapsamında, aracınızdan veya üretken yapay zeka uygulamasından çağrılabilecek basit bir veritabanı (AlloyDB) sorgusu gerçekleştirmek için bir araç kullanan bir uygulama oluşturacaksınız. Bunun için:
- Araç Kutusu'nu yükleme
- Araç Kutusu sunucusunda aracı (AlloyDB'de bir görevi gerçekleştirmek için tasarlanmıştır) ayarlayın
- Toolbox'u Cloud Run'a dağıtma
- Aracı, dağıtılan Cloud Run uç noktasıyla test edin
- Araç Kutusu'nu çağırmak için Cloud Run işlevini derleyin
Ş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 projenizde faturalandırmanın etkinleştirildiğinden emin olun. Projede faturalandırmanın etkin olup olmadığını nasıl kontrol edeceğinizi öğ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ından Cloud Shell'i etkinleştir'i tıklayın.
- Cloud Shell'e bağlandıktan sonra aşağıdaki komutu kullanarak kimliğinizin doğrulanıp doğrulanmadığını ve projenin doğru proje kimliğine ayarlanıp ayarlanmadığı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 ayarlanmadıysa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
- Cloud Shell terminalinizde aşağıdaki komutları tek tek çalıştırarak gerekli API'leri etkinleştirin:
Aşağıdakileri çalıştırmak için tek bir komut da vardır ancak deneme hesabı kullanıcısıysanız bunları toplu olarak etkinleştirmeye çalışırken kota sorunlarıyla karşılaşabilirsiniz. Bu nedenle, komutlar her satırda tek tek belirtilir.
gcloud services enable alloydb.googleapis.com
gcloud services enable compute.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com
gcloud services enable servicenetworking.googleapis.com
gcloud services enable run.googleapis.com
gcloud services enable cloudbuild.googleapis.com
gcloud services enable cloudfunctions.googleapis.com
gcloud services enable aiplatform.googleapis.com
gcloud komutunun alternatifi, her ürünü arayarak veya bu bağlantıyı kullanarak konsol üzerinden işlem yapmaktır.
Atlanan bir API varsa uygulama sırasında istediğiniz zaman etkinleştirebilirsiniz.
gcloud komutları ve kullanımı için belgelere bakın.
3. Veritabanı kurulumu
Bu laboratuvarda, perakende verilerini depolamak için veritabanı olarak AlloyDB'yi kullanacağız. Veritabanları ve günlükler gibi tüm kaynakları tutmak için kümeler kullanır. Her kümenin, verilere erişim noktası sağlayan bir birincil örneği vardır. Tablolar gerçek verileri içerir.
E-ticaret 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ğıdakine benzer bir ekran görürsünüz. Aşağıdaki değerlerle bir küme ve örnek oluşturun (Repo'dan uygulama kodunu klonluyorsanız değerlerin eşleştiğinden emin olun):
- cluster id: "
vector-cluster
" - şifre: "
alloydb
" - PostgreSQL 15 ile uyumlu
- Bölge: "
us-central1
" - Ağ oluşturma: "
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. Kümenin kurulumunu aşağıda gösterildiği gibi tamamlamak için KÜME OLUŞTUR'u tıklayın:
Örnek kimliğini " olarak değiştirdiğinizden emin olun.
vector-instance"
.
Küme oluşturma işleminin yaklaşık 10 dakika süreceğini unutmayın. İşlem başarıyla tamamlandığında, yeni oluşturduğunuz kümenize genel bakış sunan bir ekran görürsünüz.
4. Veri kullanımı
Şimdi, mağazayla ilgili verileri içeren 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ıktan sonra, küme oluşturma işlemi sırasında oluşturduğunuz kimlik bilgilerini kullanarak AlloyDB'de oturum açın. PostgreSQL'de kimlik doğrulama için aşağıdaki verileri kullanın:
- Kullanıcı adı : "
postgres
" - Veritabanı : "
postgres
" - Şifre : "
alloydb
"
AlloyDB Studio'da kimlik doğrulamayı başarıyla tamamladıktan sonra Düzenleyici'ye SQL komutları girebilirsiniz. Son pencerenin sağındaki artı işaretini kullanarak birden fazla Düzenleyici penceresi ekleyebilirsiniz.
Gerekirse Çalıştır, Biçimlendir ve Temizle seçeneklerini kullanarak düzenleyici pencerelerine AlloyDB komutları girebilirsiniz.
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şlevleri 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ında etkinleştirilen uzantıları kontrol etmek istiyorsanız şu SQL komutunu çalıştırın:
select extname, extversion from pg_extension;
Tablo oluşturma
Aşağıdaki DDL ifadesini kullanarak bir tablo oluşturun:
CREATE TABLE toys ( id VARCHAR(25), name VARCHAR(25), description VARCHAR(20000), quantity INT, price FLOAT, image_url VARCHAR(200), text_embeddings vector(768)) ;
Yukarıdaki komut başarıyla çalıştırıldığında tabloyu veritabanında görüntüleyebilirsiniz.
Verileri besleme
Bu laboratuvarda, SQL dosyasında yaklaşık 72 kayıtlık test verileri var. id, name, description, quantity, price, image_url
alanlarını içerir. Diğer alanlar laboratuvarda doldurulur.
Satırları/insert ifadelerini oradan kopyalayın, ardından bu satırları boş bir düzenleyici sekmesine yapıştırın ve ÇALIŞTIR'ı seçin.
Tablo içeriğini görmek için Gezgin bölümünü, giysiler adlı tabloyu görene kadar genişletin. Tabloyu sorgulama seçeneğini görmek için üç noktayı (⋮) seçin. Yeni bir Düzenleyici sekmesinde bir SELECT ifadesi açılır.
İzin Ver
embedding
işleviyle ilgili yürütme haklarını postgres
kullanıcısına 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ı ROLÜ verme
Cloud Shell terminaline gidip aşağıdaki komutu verin:
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"
5. Bağlam için gömmeler oluşturma
Bilgisayarların sayıları işlemesi metinleri işlemekten çok daha kolaydır. Yerleştirme sistemi, metni vektör yerleşimleri adı verilen bir dizi kayan noktalı sayıya dönüştürür. Bu sayılar, metnin nasıl ifade edildiğinden, hangi dilin kullanıldığı vb. bağımsız olarak metni temsil etmelidir.
Örneğin, deniz kıyısındaki bir yer "deniz kenarı", "sahil", "odanızdan denize yürüyüş mesafesinde", "sur la mer", "на берегу океана" vb. olarak adlandırılabilir. Bu terimlerin tümü farklı görünse de anlamsal anlamları veya makine öğrenimi terminolojisinde yer paylaşımları birbirine çok yakın olmalıdır.
Veriler ve bağlam hazır olduğunda, ürün açıklamasının yerleştirilmelerini embedding
alanındaki tabloya eklemek için SQL'i çalıştıracağız. Kullanabileceğiniz çeşitli yerleştirme modelleri vardır. Vertex AI'ın text-embedding-005
aracını kullanıyoruz. Proje boyunca aynı yerleştirme modelini kullandığınızdan emin olun.
Not: Eski bir Google Cloud projesi kullanıyorsanız textembedding-gecko gibi metin yerleştirme modelinin eski sürümlerini kullanmaya devam etmeniz gerekebilir.
AlloyDB Studio sekmesine dönün ve aşağıdaki DML'yi yazın:
UPDATE toys set text_embeddings = embedding( 'text-embedding-005', description);
Bazı yerleştirmeleri görmek için toys
tablosuna tekrar bakın. Değişiklikleri görmek için SELECT ifadesini yeniden çalıştırın.
SELECT id, name, description, price, quantity, image_url, text_embeddings FROM toys;
Bu işlem, oyuncak açıklaması için aşağıda gösterildiği gibi bir kayan nokta dizisi gibi görünen embedding vektörünü döndürür:
Not: Ücretsiz katman kapsamında yeni oluşturulan Google Cloud projeleri, yerleştirme modellerine saniye başına izin verilen yerleşme isteği sayısıyla ilgili kota sorunlarıyla karşılaşabilir. Kimlik için bir filtre sorgusu kullanmanızı ve ardından yerleştirmeyi oluştururken 1-5 kayıt seçmenizi öneririz.
6. Vektör araması yapma
Tablo, veriler ve yerleştirmeler hazır olduğuna göre kullanıcı arama metni için gerçek zamanlı vektör araması yapalım.
Kullanıcının şu soruyu sorduğunu varsayalım:
"I want a white plush teddy bear toy with a floral pattern
."
Aşağıdaki sorguyu çalıştırarak bu terimle eşleşen öğeleri bulabilirsiniz:
select * from toys
ORDER BY text_embeddings <=> CAST(embedding('text-embedding-005', 'I want a white plush teddy bear toy with a floral pattern') as vector(768))
LIMIT 5;
Bu sorguyu ayrıntılı olarak inceleyelim:
Bu sorguda,
- Kullanıcının arama metni: "
I want a white plush teddy bear toy with a floral pattern.
" - Bu modeli
text-embedding-005
kullanarakembedding()
yönteminde yerleştirmelere dönüştürüyoruz. Bu adım, tablodaki tüm öğelere yerleştirme işlevini uyguladığımız son adımdan sonra tanıdık gelecektir. - "
<=>
", KOSİNÜS BENZERLİĞİ uzaklık yönteminin kullanıldığını gösterir. Kullanılabilen tüm benzerlik ölçümlerini pgvector dokümanlarında bulabilirsiniz. - 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 5, arama metnine en yakın 5 komşuyu ayıklamak istediğimizi gösterir.
Sonuç şu şekilde görünür:
Sonuçlarınızda görebileceğiniz gibi, eşleşmeler arama metnine oldukça yakındır. Sonuçların nasıl değiştiğini görmek için metni değiştirmeyi deneyin.
7. AlloyDB'yi Araç Kutusu Etkileşimine Hazırlama
Toolbox'u kurmaya hazırlanırken yeni aracın veritabanına erişebilmesi için AlloyDB örneğimizde herkese açık IP bağlantısını etkinleştirelim.
- AlloyDB örneğinize gidin, DÜZENLE'yi tıklayın ve birincil örneği düzenle sayfasına gidin.
- Herkese açık IP bağlantısı bölümüne gidin, Herkese açık IP'yi etkinleştir onay kutusunu işaretleyin ve Cloud Shell makinenizin IP adresini girin.
- Cloud Shell makinenizin IP adresini almak için Cloud Shell Terminal'e gidip ifconfig yazın. Sonuçta eth0 inet adresini belirleyin ve son 2 basamağı "/16" maske boyutuyla 0,0 ile değiştirin. Örneğin, XX'lerin sayı olduğu "XX.XX.0.0/16" şeklinde görünür.
- Bu IP'yi, örnek düzenleme sayfasının Yetkili harici ağlar "Ağlar" metin kutusuna yapıştırın.
- İşlemi tamamladığınızda ÖRNEK GÜNCELLE'yi tıklayın.
Bu işlemin tamamlanması birkaç dakika sürer.
8. Araç Kutusu Kurulumu
- Araç ayrıntılarını depolamak için bir proje klasörü oluşturabilirsiniz. Bu durumda, oyuncak mağazası verileriyle çalıştığımız için "oyuncak mağazası" adlı bir klasör oluşturup bu klasöre gidelim. Cloud Shell Terminal'e gidin ve projenizin seçildiğinden ve terminal isteminde gösterildiğinden emin olun. Cloud Shell terminalinizde aşağıdaki komutu çalıştırın:
mkdir toystore
cd toystore
- Araç kutusunu yeni klasörünüze indirip yüklemek için aşağıdaki komutu çalıştırın:
# see releases page for other versions
export VERSION=0.1.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
- Cloud Shell Düzenleyici'ye geçin. Yeni oluşturulan "oyuncak mağazası" klasörünü genişletin ve tools.yaml adlı yeni bir dosya oluşturun. Aşağıdaki içeriği kopyalayın. PROJE_KİMLİĞİNİZ kısmını değiştirin ve diğer tüm bağlantı ayrıntılarının doğru olup olmadığını kontrol edin.
sources:
alloydb-toys:
kind: "alloydb-postgres"
project: "YOUR_PROJECT_ID"
region: "us-central1"
cluster: "vector-cluster"
instance: "vector-instance"
database: "postgres"
user: "postgres"
password: "alloydb"
tools:
get-toy-price:
kind: postgres-sql
source: alloydb-toys
description: Get the price of a toy based on a description.
parameters:
- name: description
type: string
description: A description of the toy to search for.
statement: |
SELECT price FROM toys
ORDER BY text_embeddings <=> CAST(embedding('text-embedding-005', $1) AS vector(768))
LIMIT 1;
Bu araçta, kullanıcının arama metniyle (özel oyuncak açıklaması) en yakın eşleşmeyi bulup fiyatını döndürüyoruz. Ayrıca, en iyi eşleşen ilk 5 oyuncağın ortalama fiyatını bulmak için bu ifadeyi değiştirebilirsiniz:
select avg(price) from ( SELECT price FROM toys ORDER BY text_embeddings <=> CAST(embedding(‘text-embedding-005', $1) AS vector(768)) LIMIT 5 ) as price;
Artık araç tanımını tamamladınız.
tools.yaml dosyanızı yapılandırma hakkında daha fazla bilgi için bu dokümanlara bakın.
- Cloud Shell Terminal'e geçin ve araç kutusu sunucusunu araç yapılandırmanızla başlatmak için aşağıdaki komutu girin:
./toolbox --tools_file "tools.yaml"
- Artık sunucuya bulutta web önizleme modunda bakarsanız
get-toy-price.
adlı yeni aracınızla birlikte Toolbox sunucusunun çalışır durumda olduğunu görebilirsiniz.
9. Araç Kutusu'nun Cloud Run'a Dağıtımı
Bu aracı gerçekte kullanabilmeniz için Cloud Run'a dağıtalım.
- "Cloud Run'a dağıtma" bölümünün 3. noktasındaki
gcloud run deploy toolbox
komutuna ulaşana kadar bu sayfadaki talimatları tek tek uygulayın. VPC ağı yöntemini kullanırken geçerli olan ikinci seçenek yerine ilk seçeneğe ihtiyacınız vardır. - Dağıtım başarıyla tamamlandığında, Toolbox sunucunuzun Cloud Run'da dağıtılmış uç noktasını alırsınız. CURL komutuyla test edin.
Yeni dağıtılan aracınızı temsilci uygulamanızda kullanmaya hazırsınız.
10. Uygulamanızı Araç Kutusu'na bağlama
Bu bölümde, aracınızın uygulamanın ihtiyaçlarıyla etkileşime geçip yanıt almasını test etmek için küçük bir uygulama oluşturacağız.
- Google Colab'a gidin ve yeni bir not defteri açın.
- Not defterinizde aşağıdakileri çalıştırın
pip install toolbox-langchain
from toolbox_langchain import ToolboxClient
# Replace with your Toolbox service's URL
toolbox = ToolboxClient("https://toolbox-*****-uc.a.run.app")
tool = toolbox.load_tool("get-toy-price")
# Invoke the tool with a search text to pass as the parameter
result = tool.invoke({"description": "white plush toy"})
# Print result
print(result)
- Sonuç şu şekilde olmalıdır:
Bu, araç setini kullanan bir Python uygulamasında açıkça çağrılan araçtır toolbox-langchain
.
- Bu aracı kullanmak ve LangGraph entegre uygulamasındaki bir temsilciye bağlamak istiyorsanız bunu
langgraph
araç setiyle kolayca yapabilirsiniz. - Bunun için kod snippet'lerine bakın.
11. Buluta taşıyın!!!
Bu Python kod snippet'ini sunucusuz hale getirmek için bir Cloud Run işlevine saralım.
- Bu kodu Cloud Functions'a almak için kod deposu klasöründen kaynağı kopyalayın.
- Cloud Run Functions konsoluna gidin ve İŞLEV OLUŞTUR'u tıklayın.
- Demo uygulaması için kimlik doğrulamasını devre dışı bırakın ve sonraki sayfada Python 3.11 çalışma zamanını seçin.
- 1. adımda paylaşılan kaynak deposundaki
main.py
verequirements.txt
dosyalarını kopyalayıp ilgili dosyalara yapıştırın. - İşlevi dağıttığınızda, oyuncak mağazası web uygulamasında fiyat tahmini aracına erişmek için bir REST uç noktası elde edersiniz.
- Uç noktanız aşağıdaki gibi görünmelidir:
https://us-central1-*****.cloudfunctions.net/toolbox-toys
- TEST sekmesine gidip istek girişi olarak aşağıdakileri girerek doğrudan Cloud Functions konsolunda test edebilirsiniz:
{
"`search`"`:` "`White plush toy`"
}
- İŞLEVİ TEST ET'i tıklayın veya kullanmak istediğiniz işlevi Cloud Shell Terminal'de çalıştırın. Sonuç, sağ taraftaki "Çıkış" başlığının altında gösterilir:
12. Tebrikler
Tebrikler! Temsilci uygulamanızı oluşturmanıza yardımcı olmak için veritabanları, platformlar ve Üretken Yapay Zeka orkestrasyon çerçeveleri arasında etkileşim kurabilen güçlü ve gerçekten modüler bir araç oluşturdunuz.