1. Giriş
Kitap okumayı seviyor ancak seçeneklerin çokluğu nedeniyle kararsız kalıyor musunuz? Hem mükemmel bir okuma önerisi sunan hem de seçtiğiniz türe göre kısa bir özet sunarak kitabın özünü anlamanıza yardımcı olan yapay zeka destekli bir uygulamayı hayal edin. Bu kod laboratuvarında, BigQuery, Gemini ve Gemini tarafından desteklenen Cloud Functions ile bu tür bir uygulama oluşturma konusunda size yol göstereceğim.
Projeye Genel Bakış
Kullanım alanımız şu 4 temel bileşeni temel alır:
- Kitap Veritabanı: İnternet arşiv kitaplarının yer aldığı geniş BigQuery herkese açık veri kümesi, kapsamlı kitap kataloğumuz olarak kullanılacak.
- AI Özetleme Motoru: Gemini 1.0 Pro dil modeline sahip Google Cloud Functions, kullanıcı isteklerine göre özelleştirilmiş özetler oluşturur.
- BigQuery Entegrasyonu: BigQuery'de, kitap özetlerini ve temalarını isteğe bağlı olarak sunmak için Cloud işlevimizi çağıran uzak bir işlevdir.
- Kullanıcı Arayüzü: Cloud Run'da barındırılan ve kullanıcıların sonuçları görüntüleyebileceği bir web uygulaması sunan bir web uygulaması.
Uygulamayı 3 kod laboratuvarına ayıracağız:
Codelab 1: Gemini'ı kullanarak Gemini uygulaması için Java Cloud Functions işlevi oluşturabilirsiniz.
Codelab 2: Gemini ve Üretken Yapay Zeka ile SQL uygulamaları geliştirmek için Gemini'ı kullanın.
Codelab 3: BigQuery ile etkileşime geçen bir Java Spring Boot web uygulaması oluşturmak için Gemini'yi kullanın.
2. BigQuery ve Üretken Yapay Zeka ile SQL uygulamaları oluşturmak için Gemini'yi kullanma
Ne oluşturacaksınız?
Bir
- Tablodaki ";" ile ayrılmış anahtar kelimeler listesinden kitabın türünü (veya temasını) belirlemek için Vertex AI text-bison-32k uç noktasını çağıran BigQuery'deki uzak model.
- BigQuery'de, dağıtılan üretken yapay zeka Cloud işlevini uzaktan çağıracak uzak işlev.
- Bir kitabın temasını ve metnini SQL sorgularıyla özetlemek ve sonuçları kitaplık veri kümesindeki yeni bir tabloya yazmak için uzak modeli ve işlevi kullanın.
- Bu adımları Gemini'ın yardımıyla uygularsınız.
3. Şartlar
- Chrome veya Firefox gibi bir tarayıcı
- Faturalandırmanın etkin olduğu bir Google Cloud projesi
- Cloud Functions işlevini 1. bölüm codelab'in bir parçası olarak dağıtmış olmanız Gemini'ı kullanarak Gemini uygulaması için Java Cloud Functions işlevi derlemek codelab kullanmak faydalı olacaktır.
- Koşullu: Şu anda ücretsiz Google Cloud kredisi bağlantısına erişiminiz varsa (bu bağlantıyı size atölye düzenleyen kişi sağlamış olabilir) KREDİ ETKİNLEŞTİRME ve PROJE OLUŞTURMA adımlarını önceden tamamlamak için aşağıdaki sayfada yer alan talimatları uygulayın. Bu bağlantıya sahip değilseniz aşağıdaki proje ve faturalandırma ön koşulu adımlarına geçin:
Projenizi oluşturma
Yukarıdaki koşullu adımda belirtilen bağlantıyı kullanarak bir faturalandırma hesabını etkinleştirdiyseniz ve proje oluşturduysanız aşağıdaki adımları atlayabilirsiniz.
- 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. Bir projede faturalandırmanın etkin olup olmadığını nasıl kontrol edeceğinizi öğrenin.
Cloud Shell'i etkinleştirme
- Google Cloud'da çalışan ve bq ile önceden yüklenmiş olarak gelen bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız:
Cloud Console'da, sağ üst köşedeki Cloud Shell'i etkinleştir'i tıklayın:
- Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize göre ayarlandığını görürsünüz. Kimliğinizi doğrulamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
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 <PROJE_KİMLİĞİNİZ>
gcloud komutları ve kullanımı için belgelere bakın.
4. Google Cloud için Gemini'yi ve gerekli API'leri etkinleştirme
Gemini'ı etkinleştir
- API'yi etkinleştirmek için Google Cloud Marketplace'teki Gemini'ye gidin. Aşağıdaki komutu da kullanabilirsiniz:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Gemini sayfasını ziyaret edin ve "Sohbet başlat"ı tıklayın.
Gerekli diğer API'leri etkinleştirme
Bunu nasıl yapabiliriz? Gemini'a şunu soralım, olur mu? Ancak bundan önce şunları unutmayın:
Not: LLM'ler deterministik değildir. Bu istemleri denerken alacağınız yanıt, ekran görüntümdeki yanıtlardan farklı görünebilir.
Google Cloud konsolundaki arama çubuğunun yanında, sağ üst köşedeki "Gemini'ı aç" simgesini tıklayarak Gemini sohbet konsoluna gidin.
"Buraya bir istem girin" bölümüne şu soruyu yazın:
gcloud komutunu kullanarak BigQuery ve Vertex AI apis'i nasıl etkinleştiririm?
Yanıtı aşağıdaki resimde görüldüğü gibi alırsınız:
İlgili hizmetleri etkinleştirmek için bu komutu kopyalayın (komut snippet'inin üst kısmındaki kopyalama simgesini kullanabilirsiniz) ve Cloud Shell Terminal'de çalıştırın:
- bigquery.googleapis.com
- aiplatform.googleapis.com
5. Kitap verileri için BigQuery herkese açık veri kümesini keşfedin
Çok sayıda internet arşivi kitabı hakkında bilgi içeren BigQuery herkese açık veri kümesi hakkında bilgi edinerek başlayın.
Bu herkese açık veri kümesini BigQuery Explorer bölmesinde bulabilirsiniz. Bu sayfaya BigQuery konsoluna gittiğinizde sol taraftan ulaşabilirsiniz.
Arama çubuğuna "gdelt-bq" veya "internetarchivebooks" yazıp TÜM PROJELERDE ARA'yı tıklayın. Sonucu genişletin ve aşağıdaki resimde gösterildiği gibi internet arşiv kitaplarına yıldız ekleyin:
.
Veri kümesini genişletin, gdelt-bq.internetarchivebooks'ı tıklayın ve ardından 1920 tablosundaki verileri önizleyin. Bu tabloda 1920 yılında arşivlenen kitaplar yer alır.
Sonraki bölümlerde kullanacağımız şemaya göz atmak için aşağıdaki sorguyu çalıştırın:
select * from `gdelt-bq.internetarchivebooks.1920` limit 5;
Codelab'imiz için aşağıdaki üç alanı kullanacağız:
- BookMeta_Title (title)
- Temalar ("'" ile ayrılmış temalar)
- KitapMeta_Tam Metin (kitap tam metni)
6. bookshelf adlı yeni bir BigQuery veri kümesi oluşturun.
Projenin altında, bu laboratuvarda oluşturacağımız tüm veritabanı ve analiz nesnelerini depolamak için bir veri kümesi oluşturmak istiyoruz. Gemini'ye BigQuery veri kümesi oluşturmayı nasıl yapacağımızı soralım. Gemini sohbetinizi, API'leri etkinleştirme adımından itibaren tarayıcınızda başka bir sekmede açık tutmuş olmanız gerekir. Hesabınız yoksa şimdi yapabilirsiniz. https://console.cloud.google.com adresine giderek Google Cloud Console'a gidin. Üstteki arama çubuğunun hemen yanında Gemini simgesini görürsünüz. Bu düğmeyi tıkladığınızda sohbet açılır.
İstemi aşağıda gösterildiği gibi girin.
İstemim şu şekilde:
How to create a BigQuery dataset?
Yanıt şu şekildedir:
Etkin projenizde "kitaplık" adlı bir veri kümesi oluşturmak için yanıtta belirtilen adımları uygulayalım.
BigQuery veri kümesi oluşturmak için aşağıdaki adımları uygulayın:
- Google Cloud Console'da BigQuery sayfasına gidin.
- Gezgin panelinde proje kimliğinizi tıklayın.
- Veri kümesi oluştur'u tıklayın (Proje kimliğinizin yanındaki 3 noktayı tıkladığınızda listelenen seçenekler arasında yer alır).
- Veri kümesi adını "bookshelf" olarak girin.
- Konumu "ABD(Çoklu bölge)" olarak ayarlayın.
- Yanıttaki 3., 4., 5. ve 6. adımlarda varsayılan seçenekleri bırakın.
- VERİ KÜMESİ OLUŞTUR'u tıklayın.
Veri kümeniz oluşturulur ve Gezgin panelinde gösterilir. "bookshelf" veri kümesi aşağıdaki gibi görülebilir:
7. Vertex AI LLM'yi (text-bison-32k) çağırmak için uzak model oluşturma
Ardından, BigQuery'de "text-bison-32k" Vertex AI modelini çağıran bir model oluşturmamız gerekir. Model, veri kümesindeki her kitabın anahtar kelime listesinden ortak bir tema (kitabın bağlamı) belirlemenize yardımcı olur.
Gemini'ye bu soruyu soralım. Bunu yapmak için Gemini sohbet konsolunun açık olduğu sekmeye gidin ve aşağıdaki istemi yazın:
BigQuery'de LLM uç noktasını (text-bison-32k) çağırmak için BigQuery ve Vertex AI'ı nasıl bağlayacaksınız?
Yanıt şu şekildedir:
Yanıtta CREATE MODEL ifadesi kullanma, BigQuery bağlantısı kullanma ve uç noktanın tanımlanması gibi doğru bilgiler yer alır. Sorgu ifadesi benim için doğrudur ancak bu büyük bir dil modeli olduğundan tam olarak aynı çıkışı alacağınız anlamına gelmez. Farklı biçim, hacim ve derinlikte yanıtlar alabilirsiniz. Aldığım tüm ayrıntıları görmüyorsanız sohbet üzerinden ek sorular sorabilirsiniz. Örneğin: Bağlantı kaynağının nasıl oluşturulacağı veya bağlantı özelliğinin neden eksik olduğu ya da BigQuery'den Vertex AI'ya nasıl bağlanacağım gibi konular hakkında daha fazla bilgi verin.
Aşağıda örnek bir takip istemi verilmiştir (yalnızca takip yapmanız gerekiyorsa kullanın. Aldığınız ilk yanıt yeterliyse devam edin):
What about the connection? How will I connect from BigQuery to Vertex AI?
Yanıt:
BigQuery bağlantısı oluşturmak için yanıttaki adımları uygulayalım:
- BigQuery konsoluna gidin.
- BigQuery Gezgini bölmesinde "+EKLE" düğmesini ve "Harici veri kaynaklarına bağlantılar"ı tıklayın.
- Bu noktada BigQuery Connection API'yi etkinleştirmeniz istenir. API'Yİ ETKİNLEŞTİR'i tıklayın:
- "Harici veri kaynaklarına bağlantılar"ı tıklayın. Ardından, aşağıdaki gibi harici veri kaynağı slaytını görürsünüz. Harici kaynaklar listesinden "Vertex AI" kaynağını seçin.
- Bir bağlantı kimliği (bu, istediğiniz bir kimlik olabilir ancak şimdilik "bq-vx" olarak ayarlayın) ve bölge (çoklu bölge "US") yazın.
- "Bağlantı Oluştur"u tıklayın.
- Bağlantıyı oluşturduktan sonra "Bağlantıya git"i tıklayın.
- Bağlantı bilgileri sayfasında, sonraki adımlarda kullanacağımız için hizmet hesabı kimliğini kopyalayın.
- Bağlantı oluşturulduğuna göre, Vertex AI'ı kullanabilmek için kopyaladığımız bu hizmet hesabı kimliğine izin verelim.
- Google Cloud Console sayfasından Google Cloud IAM'ı açın veya bağlantıya gidin.
- Ana Hesaplara Göre Görünüm bölümünün altında Erişim İzni Ver'i tıklayın.
- Erişim Ver iletişim kutusunda, Yeni ilkeler metin kutusuna daha önce not ettiğimiz hizmet hesabı kimliğini girin.
- Rolü "Vertex AI Kullanıcısı" olarak ayarlayın.
Gerekli bağlantı oluşturulur. Temel kullanıcıya (bağlantının hizmet hesabı) BigQuery'den Vertex AI'ı kullanması için gerekli izin verilir.
BigQuery sorgu düzenleyicisinde, bir veritabanı nesnesi (bu örnekte MODEL) oluşturulmasını temsil eden aşağıdaki DDL (Veri Tanımlama Dili) ifadesini çalıştırın.
CREATE OR REPLACE MODEL bookshelf.llm_model
REMOTE WITH CONNECTION `us.bq-vx`
OPTIONS (ENDPOINT = 'text-bison-32k');
Yukarıdaki adıma alternatif olarak deneyebileceğiniz bir şey, Gemini'dan "metin-bison-32k" modelini çağırmak için bir sorgu önermesini isteyebilirsiniz.
Not: Bağlantınız için farklı bir ad kullandıysanız önceki DDL ifadesindeki "us.bq-vx" ifadesini bu adla değiştirin. Bu sorgu, daha önce oluşturduğumuz "kitaplık" veri kümesindeki uzak modeli oluşturur.
8. Java Cloud Functions'ı çağıran uzak işlev oluşturma
Artık Gemini modelini uygulamak için bu serinin 1. kod laboratuvarında oluşturduğumuz Java Cloud işlevini kullanarak BigQuery'de uzak bir işlev oluşturacağız. Bu uzak işlev, kitap içeriğini özetlemek için kullanılır.
Not: Bu codelab'i kaçırdıysanız veya bu Cloud Functions işlevini dağıtmadıysanız bu adımı atlayıp bir sonraki konuya (Uzak modeli kullanarak kitapların temasını özetleme) geçebilirsiniz.
BigQuery konsoluna gidip aşağıdaki DDL ifadesini Sorgu Düzenleyici'ye yapıştırın (+ düğmesini tıklayarak yeni bir Sorgu Düzenleyici sekmesi oluşturabilirsiniz).
Kopyalayabilirsiniz DDL aşağıda verilmiştir. Uç noktayı, dağıtılan Cloud Functions uç noktanızla (codelab 1'den oluşturulur) değiştirmeyi unutmayın. Uç noktanız yoksa demo amacıyla aşağıdaki DDL'de bulunan maskelenmiş karakterleri "abis-345004" ile değiştirebilirsiniz.
CREATE OR REPLACE FUNCTION
`bookshelf.GEMINI_REMOTE_CALL` (context STRING) RETURNS STRING
REMOTE WITH CONNECTION `us.bq-vx`
OPTIONS (
endpoint = 'https://us-central1-****-******.cloudfunctions.net/remote-gemini-call' );
Google Cloud platformundaki BigQuery konsoluna gidin ve yeni bir sorgu düzenleyici sekmesi açın. BigQuery sorgu düzenleyiciye yukarıdaki DDL ifadesini yapıştırın. Sorguyu çalıştırdıktan sonra aşağıdaki yanıtı görebilirsiniz:
Model ve işlev oluşturulduğuna göre, bu iki BigQuery nesnesini bir SELECT sorgusunda çalıştırarak test edelim.
9. Uzak modeli kullanarak temaları özetle
Belirtilen tema listesinden kitap için birleştirilmiş bir anahtar kelime oluşturmak üzere "bookshelf.llm_model" adlı uzak modeli kullanalım:
SELECT * FROM ML.GENERATE_TEXT(MODEL `bookshelf.llm_model`,
(
SELECT
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` LIMIT 1
));
İsteğe bağlı adım: LLM tarafından oluşturulan sonuç alanının sonucu iç içe yerleştirilir. Sorguya bazı LLM parametreleri ve "flatten_json_output" özelliğini ekleyelim. "flatten_json_çıkış" özelliğinin kullanılması, iç içe yerleştirilmiş yapının LLM tarafından oluşturulan sonuç alanından kaldırılmasına yardımcı olur.
SELECT * FROM ML.GENERATE_TEXT ( MODEL `bookshelf.llm_model`, (
SELECT CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt FROM `gdelt-bq.internetarchivebooks.1920` limit 1),
STRUCT( 0.2 AS temperature, 100 AS max_output_tokens, TRUE AS flatten_json_output));
BigQuery Düzenleyicisi'nde SELECT sorgusunu çalıştırıp sonucu doğrulayın. Sorgu sonucunu test için 1 ile sınırladık. Sonuç aşağıdaki gibi görüntülenir:
10. Uzaktan işlevi kullanarak kitapların tam metnini özetleme
Şimdi, daha önce oluşturduğumuz bookshelf.GEMINI_REMOTE_CALL Cloud Functions'ini çalıştırarak kitabı özetlemeye çalışacağız.
Not: Uzak FUNCTION oluşturma işlemini (bu kod laboratuvarının önceki konusu) atladıysanız SELECT sorgusundaki bookshelf.GEMINI_REMOTE_CALL işlev çağrısını da atlamayı unutmayın.
Daha önce oluşturduğumuz uzak işlevi (GEMINI_REMOTE_CALL) çağıran SELECT sorgusunu kullanın. GEMINI_REMOTE_CALL işlevine yapılan çağrıda, kitap metninin özetini isteyen bir istem yer alır:
select BookMeta_Title, `bookshelf.GEMINI_REMOTE_CALL` (
CONCAT('This is about a book. The title of the book is this: ', BookMeta_Title, ' . The theme of the book is as follows: ', Themes, 'The following text contains an excerpt from the book. Summarize it in less than 5 lines to create the gist. If you do not have a summary, use the title and themes to make up a short summary. DO NOT RETURN EMPTY RESPONSE. ', SUBSTR(BookMeta_FullText, 5000, 10000))) Summary
from `gdelt-bq.internetarchivebooks.1920` where Themes like '%EDUCATION%' limit 1;
Özeti oluşturmak için kitabın tam metninden bir alt dize aldığımız unutulmamalıdır.
Sorgunun sonucu şu şekildedir:
11. Kitap verilerini bir tabloda depolama
BigQuery'den hem LLM çağrılarını (uzak model ve işlev) yalnızca SQL sorgularını kullanarak test ettik. Şimdi, "kitaplık" verilerini tema analizleriyle birlikte uzak model ve işlevle aynı veri kümesinde depolamak için bir BigQuery tablosu oluşturalım.
Bu adıma hem LLM model çağrısını hem de uzak işlev çağrısını dahil edebiliriz. Ancak, Cloud Functions işlevini çağıran uzak işlev çağrısını isteğe bağlı bir adım olarak işaretlediğimiz için yalnızca uzak modelin analizlerini kullanacağız.
Kullanacağımız sorgu:
SELECT
BookMeta_Title, Themes, ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` limit 5),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output));
Sorguyu BigQuery Düzenleyici'de çalıştırdığınızda sonuç aşağıdaki gibi olur:
Şimdi Gemini'den yukarıdaki sorgudan "bookshelf.books" adlı bir tablo oluşturmasını isteyelim. Google Cloud Console'da Gemini Chat Console'a gidip aşağıdaki istemi girin.
Kullanacağımız istem:
Create a BigQuery table named bookshelf.books from this SELECT query:
SELECT
BookMeta_Title, Themes, ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` limit 5),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output));
Gemini sohbet yanıtı şu şekildedir:
Doğrudan buradan kopyalamak isterseniz sorgu:
CREATE TABLE bookshelf.books (
BookMeta_Title STRING,
Themes STRING,
ml_generate_text_llm_result STRING
) AS (
SELECT
BookMeta_Title,
Themes,
ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,
BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920`
LIMIT 5
),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output
)
)
);
Sorgu BigQuery Düzenleyici'de çalıştırıldıktan sonra sonuç aşağıdaki gibidir:
İşte bu kadar. Şimdi tabloyu sorgulayın ve daha fazla bilgi edinmek için verilerde değişiklikler yapın.
12. Tebrikler
Tebrikler! Aşağıdakileri başarıyla tamamladık ve sürecin bazı adımlarında da Gemini'yi kullandık:
- Tablodaki ";" ile ayrılmış anahtar kelimeler listesinden kitabın türünü (veya temasını) belirlemek için Vertex AI "text-bison-32k" uç noktasını çağıran BigQuery'de uzak bir model oluşturdu.
- BigQuery'de, dağıtılan bu üretken yapay zeka Cloud işlevini uzaktan çağıracak bir uzak işlev oluşturdu. Bu işlev, istemi giriş olarak alır ve kitabı 5 satırda özetleyen bir dize döndürür.
- Bir kitabın temasını ve metnini SQL sorgularıyla özetlemek ve sonuçları kitap rafı veri kümesindeki yeni bir tabloya yazmak için uzak model ve işlev kullanıldı.
- Sonraki ödev olarak, BigQuery'de oluşturulan nesneleri silme SQL'sini almak için Gemini'yi kullanmayı deneyin. Bu işlem, temizleme adımını kapsar.