1. Giriş
Kitapları incelemeyi seviyor ancak çok fazla seçenek olduğundan kararsız mı kalıyorsunuz? Mükemmel okumayı önermekle kalmayıp seçtiğiniz türe göre kısa bir özet de sunarak kitabın özünü anlamanızı sağlayan yapay zeka destekli bir uygulama kullandığınızı düşünün. Bu codelab'de, Gemini'ın yardımıyla BigQuery, Vertex AI ve Cloud Run kullanarak bu tür bir uygulama oluşturma sürecinde size yol göstereceğim.
Projeye Genel Bakış
Kullanım alanımız şu 4 temel bileşen etrafında şekilleniyor:
- Kitap Veritabanı: İnternet Arşivi kitaplarının geniş 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ış, ayrıntılı özetler oluşturur.
- BigQuery Entegrasyonu: Talep üzerine kitap özetleri ve temaları sunmak için Cloud Functions işlevimizi çağıran BigQuery'deki bir uzak işlev.
- 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 web uygulaması.
Tüm proje uygulamasını 3 codelab'e böldük. Bu codelab, aşağıdaki listede yer alan 3. codelab'i kapsar:
Codelab 1: Gemini uygulamasında kullanılacak bir Java Cloud Functions işlevi oluşturmak için Gemini'ı kullanın.
Codelab 2: BigQuery ile yalnızca SQL içeren üretken yapay zeka uygulamaları oluşturmak için Gemini'ı kullanın.
Codelab 3: BigQuery ile etkileşime giren bir Java Spring Boot web uygulaması oluşturmak için Gemini'ı kullanın.
2. BigQuery ile Spring Boot web uygulaması oluşturmak için Gemini'ı kullanma
Ne oluşturacaksınız?
- Gerekli BigQuery veri kümesini ve tablosunu oluşturun.
- Kitap verilerini getirmek için BigQuery ile etkileşime geçen ve web'de görüntüleyen Java Spring Boot web uygulaması.
- Bu uygulama Cloud Run'a dağıtılır.
- Bu adımları Gemini'ın yardımıyla uygulayacaksı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ümdeki Üretken yapay zeka uygulaması için Java Cloud Functions işlevi oluşturmak üzere Gemini'ı kullanma adlı codelab'in bir parçası olarak dağıtmanız yararlı olur.
- Koşullu: Bu sırada ücretsiz Google Cloud kredileri bağlantısına erişiminiz varsa (atölye düzenleyicisi tarafından sağlanmış olabilir) KREDİ ETKİNLEŞTİRME ve PROJE OLUŞTURMA adımlarını önceden tamamlamak için aşağıdaki sayfadaki talimatları kullanın. Bu bağlantınız yoksa aşağıdaki proje ve faturalandırma ön koşulu adımlarıyla devam edin:
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 projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Bir projede faturalandırmanın etkin olup olmadığını kontrol etmeyi öğrenin.
Cloud Shell'i etkinleştirme
- bq ile önceden yüklenmiş olarak gelen, Google Cloud'da çalışan 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 ayarlandığını görürsünüz. Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de şu 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 ayarlanmamışsa 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'ı 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 edin ve "Sohbeti başlat"ı tıklayın.
Diğer gerekli API'leri etkinleştirme
Bunu nasıl yapabiliriz? Bu soruyu Gemini'a soralım. Ancak bundan önce şunları unutmayın:
Not: LLM'ler deterministik değildir. Bu nedenle, bu istemleri denerken aldığınız yanıtlar, ekran görüntümdeki yanıtlardan farklı görünebilir.
Google Cloud Console'da arama çubuğunun yanındaki sağ üst köşedeki "Gemini'ı aç" simgesini tıklayarak Gemini ile etkileşim konsoluna gidin.

"Buraya 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österildiği gibi yanıtı alırsınız:

Bu komutu kopyalayın (komut snippet'inin üst kısmındaki kopyalama simgesini kullanabilirsiniz) ve ilgili hizmetleri etkinleştirmek için Cloud Shell Terminali'nde uygulayın:
- bigquery.googleapis.com
- run.googleapis.com
5. Kitap verileri için BigQuery herkese açık veri kümesini keşfetme
Çok sayıda internet arşivi kitabı hakkında bilgi içeren BigQuery herkese açık veri kümesini tanıyarak 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 belgeyi inceleyebilirsiniz:
Bu herkese açık veri kümesini BigQuery Explorer bölmesinde bulabilirsiniz. Bu seçeneği, BigQuery konsoluna ulaştığınızda sol tarafta bulabilirsiniz.

Arama çubuğuna "gdelt-bq" veya "internetarchivebooks" yazıp TÜM PROJELERDE ARA'yı tıklayın. Sonuçta genişletin ve aşağıdaki resimde gösterildiği gibi internet arşivindeki kitaplara yıldız ekleyin:
.
Veri kümesini genişletin, gdelt-bq.internetarchivebooks'u tıklayın ve ardından 1920 tablosundaki verileri önizleyin. Bu tabloda, 1920 yılından itibaren 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;
Bu codelab'de aşağıdaki üç alanı kullanacağız:
- BookMeta_Title (title)
- Temalar (temalar ";" ile ayrılır)
- BookMeta_FullText (kitabın tam metni)
6. Gemini ile temel Java Cloud Run şablonunu oluşturma
Cloud Shell terminalinizin 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 (ve iptal edilmemiş) olduğundan emin olun. Ayrıca, sol alt köşedeki Google Cloud projenizin, üzerinde çalışmak istediğiniz mevcut etkin projeyi gösterdiğinden emin olun. API'ler etkin değilse bunları tıklayın, yetkilendirin, yönlendirmek istediğiniz Google Cloud projesini seçin ve etkinleştirin.
Her ikisi de etkinleştirildikten sonra sol alt köşedeki proje adını tıklayın ve "Cloud Code" başlıklı açılır listede "New Application"a (Yeni Uygulama) gidin.

Bu listede Cloud Run uygulamasını seçin. Açılan listeden Java'yı seçin:

Oluşan listede 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 etkinleştirme ve yapılandırma ayarlarını yapmanın dışında pek bir şey yapmadınız, değil mi?
Görmeniz gereken proje yapısı şudur:

Şu anda uygulamayı dağıtabilirsiniz. Ancak bu nedenle bu işe başlamadık. Web uygulamasının temel işlevini (BigQuery veritabanından analiz verilerini getirme ve web'de görüntüleme) eklememiz gerekiyor.
Bunu yapmak için daha fazla istem ekleyebilir ve kodunuzun Gemini ile kademeli olarak geliştirilmesini sağlayabilir veya mantığı kendiniz yazabilirsiniz. İkisinin de karışımına gidiyorum.
7. Web uygulamasında BigQuery'yi kullanmak için bağımlılıklar ekleme
Uygulama başlatıldığına göre artık uygulama kaynağında ve özelliklerinde değişiklik yapmaya hazırız. Öncelikle bağımlılıkları ekleyelim. Gemini'dan bunu önermesini isteyelim.
Cloud Code Düzenleyici'de, sağ alt köşede durum çubuğunda Gemini'ın etkin olduğunun, sol alt köşede ise etkin Google Cloud projesinin seçildiğinin gösterildiğinden emin olun.
Cloud Code Düzenleyici'de pom.xml dosyasına gidin, </dependencies> etiketinin hemen üstüne 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ç aldım:

Kolaylık sağlaması için bağımlılığı buraya yapıştırıyoruz. Sizin durumunuzda öneri bir sürüm etiketiyle birlikte geliyorsa bunu yoksayabilirsiniz.
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-bigquery</artifactId>
</dependency>
8. Kitaplık verilerini web'e aktarmak 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.
- BigQuery'ye yapılan çağrıyı, başlığı ve temaları listelemek için verileri getiren sorgunun yürütülmesini içerecek şekilde helloWorld() yönteminin içeriği 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üncellenir.
Önemli Not: Aşağıdaki bilgileri güncellemeyi unutmayın
- HelloWorldControllerTests.Java dosyasını, mevcut mvc.perform(...) çağrısını yorum satırı haline getirecek şekilde güncelleyin.
Kod Açıklaması için Gemini
Size kodu sağladık ve kaynak dosyalarında yaptığımız değişiklikleri açıkladık. Gerekirse kod açıklamaları ve/veya kod yorumları almak için Gemini'ı da kullanabilirsiniz. Deneyebileceğiniz birkaç yöntem:
- IDE'de HelloWorldController.java dosyası açıkken IDE'deki Sohbet Paneli'ne gidin ve şu istemi girin: Bunu açıkla. Gemini'ın sağladığı ayrıntılı açıklamayı inceleyin. Bu kodu, kodla ilgili açıklama almak için istediğiniz zaman kullanabilirsiniz.
- Koddaki herhangi bir snippet'i veya satırı (ör. @GetMapping("/")) vurgulayıp şu istemi kullanabilirsiniz: Bunu açıkla. Bu işlem, yalnızca seçtiğiniz kod satırı veya snippet hakkında ayrıntılı bir açıklama sağlar.
- Hatta kodu farklı şekilde sorgulayan bazı sorguları da deneyebilirsiniz. Örneğin, aşağıdaki kod satırını seçebilirsiniz.
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
ve şu sorguyu girin: "BigQuery değişkeni boşsa ne olur?" 4. Gemini'ın yardımıyla kod iyileştirmeleri veya yeniden düzenleme de isteyebilirsiniz. Örneğin, helloWorld() yöntemi için kodun tamamını seçip şu istemi girebilirsiniz: "Bu kodu nasıl iyileştirebilir veya yeniden düzenleyebilirim?" Gemini'ın sunduğu önerilere göz atın.
9. Derleme ve Dağıtım
Cloud Shell Terminal'e gidin. Terminalde proje kimliğinizi gösterdiğ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
Şimdi "Web Önizlemesi" düğmesini ve aşağıdaki resimde 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'a bu web uygulamasını Cloud Run'da nasıl dağıtacağımızı soralım. Google Cloud Console'da "Gemini'ı aç" düğmesini tıklayarak Gemini Chat'e gidin.
İstemim:
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ı 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 terminalinden çalıştırın. Birkaç takip sorusu görürsünüz. Uygun yanıtları seçtiğinizde dağıtımın devam ettiğini görebilirsiniz:

Bu işlem birkaç dakika sürer ve uygulama, Google Cloud'a sunucusuz olarak dağıtılır. Cloud Run'da dağıtılan uygulamayı tıklayın ve sonucu web'de görüntüleyin:

10. Tebrikler
Tebrikler! Gemini'ı kullanarak kitaplık analizi yapmak için bir Java Cloud Run web uygulamasını başarıyla oluşturduk, dağıttık ve test ettik. Takip görevi olarak Gemini'a dağıtılan Cloud Run hizmetini Google Cloud Console'dan nasıl sileceğinizi sorun ve kaynağı temizlemek için verdiği yanıtı uygulayın.