Bu codelab hakkında
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 codelab'de, Gemini destekli BigQuery, Vertex AI ve Cloud Run'ı kullanarak bu tür bir uygulama geliştirme konusunda size rehberlik edeceğim.
Projeye Genel Bakış
Kullanım alanımız şu 4 temel bileşene odaklanıyor:
- Kitap Veritabanı: Geniş internet arşiv kitaplarının BigQuery herkese açık veri kümesi, kapsamlı kitap kataloğumuz olarak kullanılacak.
- Yapay Zeka Özetleme Motoru: Gemini-Pro dil modeliyle donatılmış Google Cloud Functions, kullanıcı isteklerine göre uyarlanmış, bilgi dolu ö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ülemesi için bir web uygulaması sunan web uygulaması.
Proje uygulama sürecinin tamamını 3 codelab'e ayırdık. Bu codelab, aşağıdaki listedeki 3. Codelab'i kapsar:
Codelab 1: Gemini'ı kullanarak Gemini uygulaması için Java Cloud Functions işlevi oluşturabilirsiniz.
Codelab 2: BigQuery ile yalnızca SQL kullanan üretken yapay zeka uygulamaları oluşturmak için Gemini'yi 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 ile Spring Boot web uygulaması oluşturmak için Gemini'yi kullanma
Ne oluşturacaksınız?
- Gerekli BigQuery veri kümesini ve tablosunu oluşturun.
- Kitap verilerini almak ve web'de görüntülemek için BigQuery ile etkileşime geçen Java Spring Boot web uygulaması.
- Bu uygulama Cloud Run'da dağıtıldı.
- Bu adımları Gemini'nin yardımıyla uygulayacaksınız.
3. Şartlar
- Chrome veya Firefox gibi bir tarayıcı
- Faturalandırma özelliği etkinleştirilmiş bir Google Cloud projesi
- Cloud Functions'i 1. bölümdeki Üretken yapay zeka uygulaması için Java Cloud Functions oluşturmak üzere Gemini'yi kullanma kod deneme çalışması kapsamında dağıttıysanız bu faydalı olacaktır.
- Koşula bağlı: Şu anda ücretsiz Google Cloud Kredisi bağlantısına (atölyeyi düzenleyen kişi tarafından verilmiş olabilir) erişiminiz varsa 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şturun
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. 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ş 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 <YOUR_PROJECT_ID>
gcloud komutları ve kullanımı için belgelere bakın.
4. Gemini ve gerekli API'leri etkinleştirme
Gemini'yi etkinleştirme
- API'yi etkinleştirmek için Gemini Marketplace'e gidin. Aşağıdaki komutu da kullanabilirsiniz:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Gemini sayfasını ziyaret edip "Sohbet etmeye başla"yı tıklayın.
Gerekli diğer API'leri etkinleştirme
Bunu nasıl yapacağız? Gemini'a şunu soralım, olur mu? Ancak öncesinde şunları unutmayın:
Not: LLM'ler belirleyici değildir. Bu istemleri denerken alacağınız yanıt, ekran görüntümdeki yanıtlardan farklı görünebilir.
Google Cloud Console'daki arama çubuğunun sağ üst köşesindeki "Gemini'yi aç" simgesini tıklayarak Gemini sohbet konsoluna gidin.
"Buraya bir istem girin" bölümüne şu soruyu yazın:
How do I enable the BigQuery and Cloud Run apis using gcloud command?
Aşağıdaki resimde gösterilen yanıtı 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
- run.googleapis.com
5. Kitap verileri için BigQuery herkese açık veri kümesini keşfedin
Çok sayıda internet arşiv kitapları hakkında bilgi içeren BigQuery herkese açık veri kümesiyle tanışarak başlayın. Bu bağlantıdan internetarchivebooks veri kümesine ulaşamıyorsanız veri kümesini keşfetmek için aşağıdaki adımları uygulayabilir veya bu dokümanları inceleyebilirsiniz:
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 "internetarchbooks" yazıp TÜM PROJELERİ ARAYIN'ı tıklayın. Sonucu genişletin ve aşağıdaki resimde gösterildiği gibi İnternet arşivi 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. Gemini ile temel Java Cloud Run şablonunu oluşturma
Cloud Shell Terminal'inizin sağ üst köşesindeki Düzenleyiciyi Aç simgesini tıklayarak Cloud Shell Düzenleyici'yi açın (Genellikle terminali ve düzenleyiciyi paralel olarak ayrı sekmelerde açmayı tercih ederim. Böylece birinde kod yazabilir, diğerinde derleme yapabiliriz).
Düzenleyiciyi açtıktan sonra, düzenleyici konsolunun sağ alt köşesindeki Gemini logosunun etkin olduğundan (ve iptal edilmediğinden) emin olun. Ayrıca, sol alt köşedeki Google Cloud projenizin, çalışmak istediğiniz mevcut etkin projenizi gösterdiğinden emin olun. Etkin değilse tıklayın, yetkilendirin, işaret etmesini istediğiniz Google Cloud projesini seçin ve etkinleştirin.
Her ikisi de etkin olduğunda sol alt köşedeki proje adını tıklayın ve "Cloud Code" başlıklı pop-up listede "Yeni Uygulama" bölümüne gidin.
Bu listeden Cloud Run uygulamasını seçin. Açılan listeden Java'yı seçin:
Sonuç listesinde, helloworld yerine "bookshelf-web" proje adını yazın ve Tamam'ı tıklayın.
Yaşasın! Basit Java Cloud Run uygulamanızı Gemini ile başlattınız ve yapılandırmaları etkinleştirmek dışında pek bir şey yapmadınız, değil mi?
Görmeniz gereken proje yapısı şu şekildedir:
Şu anda uygulamayı dağıtmaya hazırsınız. Ancak bu projeyi bu yüzden başlatmadık. Bununla birlikte, web uygulamasının ana işlevi olan BigQuery veritabanından analiz verilerini getirip web'de gösterme özelliğini de eklememiz gerekir.
Bunun için daha fazla istem ekleyebilir, kodunuzun Gemini ile aşamalı olarak geliştirilmesini sağlayabilir veya mantığı kendiniz yazabilirsiniz. İkisinin bir karışımını kullanacağım.
7. BigQuery'yi web uygulamasında kullanmak için bağımlılık ekleme
Uygulamayı başlattığımıza göre, uygulama kaynağında ve özelliklerinde değişiklik yapmaya hazırız. İlk olarak bağımlılıkları ekleyelim. Gemini'den bunu önermesini isteyelim.
Cloud Code Düzenleyici'de, durum çubuğunun sağ alt köşede Gemini'nin etkin olduğunu ve sol alt köşede etkin Google Cloud projesinin seçili olduğunu kontrol edin.
Cloud Code Editor'da pom.xml dosyasına gidin, </dependencies> etiketinin hemen üzerinde aşağıdaki istem yorumunu yazın :
<!-- What maven dependency should I include to access BigQuery in the app-->
Aşağıdaki resimde gösterildiği gibi bir sonuç elde ettim:
Kolaylık olması için bağımlılığı buraya yapıştırın. Sizin durumunuzda öneride bir sürüm etiketi gösteriliyorsa bunu göz ardı edebilirsiniz.
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-bigquery</artifactId>
</dependency>
8. Kitaplık verilerini web'e almak için kaynağı güncelleme
HelloWorldController.java kodunu aşağıdakiyle değiştirin:
package cloudcode.helloworld.web;
import java.util.UUID;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.JobId;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;
import com.google.cloud.bigquery.FieldValueList;
@RestController
public final class HelloWorldController {
/**
* Create an endpoint for the landing page
* @return the BigQuery analytics results string to the web
*/
@GetMapping("/")
public String helloWorld() throws Exception {
/* Connect to bigquery and write a select SQL to fetch Title, Theme and Summary fields from the table `bookshelf.bookshelf_theme` if you have executed the codelab 1 of this series, if not just directly use records from gdelt-bq.internetarchivebooks.1920 table */
String query = "SELECT BookMeta_Title || ' (' || Themes || ') ' as summary from gdelt-bq.internetarchivebooks.1920 limit 10 ";
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
QueryJobConfiguration queryConfig =
QueryJobConfiguration.newBuilder(query)
.setUseLegacySql(false)
.build();
// Create a job ID so that we can safely retry.
JobId jobId = JobId.of(UUID.randomUUID().toString());
Job queryJob = bigquery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());
// Wait for the query to complete.
queryJob = queryJob.waitFor();
// Check for errors
if (queryJob == null) {
throw new RuntimeException("Job no longer exists");
} else if (queryJob.getStatus().getError() != null) {
throw new RuntimeException(queryJob.getStatus().getError().toString());
}
// Get the results.
TableResult result = queryJob.getQueryResults();
String responseString = "";
// Print all pages of the results.
for (FieldValueList row : result.iterateAll()) {
responseString += row.get("summary").getStringValue() + ". \n";
System.out.printf("%s\n", row.get("summary").getStringValue());
}
return responseString;
}
}
Kaynak dosyalarda aşağıdaki değişiklikleri yaptık:
- HelloWorldController.java dosyasında @Controller, @RestController olarak güncellendi.
- helloWorld() yönteminin içeriği, BigQuery çağrısını ve kitabın başlığını ve temalarını listelemek için verileri getiren sorgunun yürütülmesini içerecek şekilde değiştirildi.
- Yükleme sırasında dizin görünümü şablonunu döndürmek yerine, yanıtı web'e dize olarak döndürecek şekilde güncellendi.
Önemli Not: Aşağıdakileri güncellemeyi unutmayın
- Mevcut mvc.perform(...) çağrısını yoruma almak için HelloWorldControllerTests.Java dosyasını güncelleyin.
Kod Açıklaması için Gemini
Kodu size sağladık ve kaynak dosyalarda yaptığımız değişiklikleri açıkladık. Gerekirse kod açıklamaları ve/veya kod yorumları almak için Gemini'yi de kullanabilirdiniz. Deneyebileceğiniz birkaç şeyi aşağıda bulabilirsiniz:
- IDE'de HelloWorldController.java dosyası açıkken IDE'deki Sohbet Paneli'ne gidin ve şu istemi sağlayın: Bunu açıkla. Gemini'nin ayrıntılı açıklamasını inceleyin. Kod hakkında açıklama almak için bu sayfayı istediğiniz zaman kullanabilirsiniz.
- Koddaki belirli bir snippet'i veya satırı (ör. @GetMapping("/")) vurgulayabilir ve ardından şu istemi kullanabilirsiniz: Bunu açıkla. Bu işlem, yalnızca seçtiğiniz kod satırıyla veya snippet'iyle ilgili ayrıntılı bir açıklama sağlar.
- Kod hakkında farklı bir şekilde bilgi veren bazı sorguları da deneyebilirsiniz. Örneğin, aşağıdaki kod satırını seçebilirsiniz
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
ve "bigquery değişkeni null olursa ne olur?" sorgusunu sorun. 4. Ayrıca Gemini'dan yardım alarak kod iyileştirmesini veya yeniden düzenlemesini de isteyebilirsiniz. Örneğin, helloWorld() yönteminin tüm kodunu seçip şu istemi verebilirsiniz: "Bu kodu nasıl iyileştirebilir veya yeniden yapılandırabilirim?". Gemini'nin sunduğu önerilere göz atın.
9. Derleme ve dağıtma
Cloud Shell Terminal'e gidin. Terminalde proje kimliğinize işaret ettiğinden emin olun.
cd komutunu kullanarak proje dizinine gidin:
cd bookshelf-web
Uygulamanızın yerel olarak çalıştığından emin olmak için aşağıdaki komutları tek tek çalıştırın.
mvn package
mvn spring-boot:run
Ardından, "Web Önizlemesi" düğmesini ve aşağıda gösterildiği gibi "8080 numaralı bağlantı noktasında önizle" seçeneğini tıklayın:
Uygulamanın Cloud Shell makinenizde yerel olarak çalıştığını görebildiğinizden emin olun.
Şimdi Gemini'den bu web uygulamasını Cloud Run'a nasıl dağıtacağımızı öğrenelim. Google Cloud Console'da "Gemini'yi aç" düğmesini tıklayarak Gemini Chat'e gidin.
İstemim şu:
What is the gcloud command to deploy my app to cloud run without having to containerize, only by giving the source file?
Yanıt aşağıda verilmiştir:
gcloud komutundaki hizmet adını ve bölge yer tutucularını aşağıdaki snippet'te gösterildiği gibi değiştirelim:
gcloud run deploy bookshelf-web --source . --allow-unauthenticated --region $REGION
Bu komutu Cloud Shell Terminal'den çalıştırın. Birkaç takip sorusu göreceksiniz. Uygun yanıtları seçtikten sonra dağıtımın devam ettiğini görebilirsiniz:
Uygulama, birkaç dakika içinde Google Cloud'a sunucusuz olarak dağıtılır. Dağıtılan Cloud Run uygulamasını tıklayın ve sonucu web'de görüntüleyin:
10. Tebrikler
Tebrikler! Gemini'yi kullanarak kitaplık analizi yapmak için bir Java Cloud Run web uygulaması oluşturduk, dağıttık ve başarıyla test ettik. Sonraki görev olarak Gemini'den, dağıtılan Cloud Run Hizmeti'nin Google Cloud Console'dan nasıl silineceğini sorun ve kaynağı temizlemek için verdiği adımları uygulayın.