Vertex AI'da Gemini API'ye Python ile Başlamak

Selamlar, bu yazımızda Google Cloud'un Vertex AI platformu üzerinden Gemini modellerine Python ile nasıl bağlanacağımıza bakacağız. Generative AI tarafı son birkaç yıldır biraz fazla 'sihirli' anlatılıyor; ama temele inince iş aslında bir SDK çağrısı, bir prompt ve geri dönen bir cevaptan ibaret. Lafı uzatmadan başlayalım.

Vertex AI ve Gemini neden birlikte?

Gemini, Google'ın LLM ailesinin adı. Vertex AI ise bu modelleri (ve başka birçok ML aracını) kurumsal bir GCP servisi olarak sunan platform. Açıkçası kendi başına bir API anahtarıyla Gemini'yi tüketmek de mümkün, ama Vertex AI tarafına geçtiğiniz an IAM, billing, audit log, VPC service controls gibi bütün GCP omurgasını ücretsiz olarak yanınızda buluyorsunuz. Production'a çıkacak bir uygulamada bence bu omurga zaten pazarlık konusu olmamalı.

Ön hazırlık ve kurulum

Başlamak için faturalandırması açık bir GCP projesi, etkinleştirilmiş Vertex AI API'si ve Python 3.8+ yeter. Tek bir paket kuruyoruz:

# Vertex AI SDK'yi generative AI desteğiyle birlikte kuruyoruz
pip install google-cloud-aiplatform

Sonrasında gcloud ile yerel kimliği bağlıyoruz. Application Default Credentials akışı burada hayatımızı çok kolaylaştırıyor; ortam değişkeni veya servis hesabı dosyası taşımakla uğraşmıyoruz:

# GCP hesabıyla kimlik doğrulama
gcloud auth application-default login

# Aktif projeyi belirle
gcloud config set project sizin-proje-idniz

İlk çağrı: bir prompt, bir cevap

Şimdi en sade haliyle bir metin üretimi yapalım. Buradaki amacımız 'şu kadar satır kod ile çalışıyor' hissini yakalamak:

# first_call.py
# Gemini ile Vertex AI üzerinde temel metin üretimi

import vertexai
from vertexai.generative_models import GenerativeModel

# Vertex AI'yi proje ve bölge ile başlatıyoruz
vertexai.init(
    project='sizin-proje-idniz',
    location='us-central1',
)

# Gemini modelini yüklüyoruz
model = GenerativeModel('gemini-1.5-flash')

# Yanıt üret
response = model.generate_content('Load balancer ne işe yarar, kısaca anlat.')

print(response.text)

Hepsi bu. Region seçimi konusunda küçük bir not: Türkiye'den çağrı atıyorsanız europe-west1 veya europe-west4 çoğu zaman daha düşük gecikme veriyor. us-central1 model çeşidi açısından en zengini ama her zaman en hızlı değil.

Doğru modeli seçmek

Vertex AI tarafında elinizin altında birkaç Gemini varyantı var. Kabaca şöyle düşünebilirsiniz:

  • gemini-1.5-pro: En yetenekli model. Uzun bağlam, karmaşık akıl yürütme, kod analizi gibi işlere uygun.
  • gemini-1.5-flash: Hızlı ve ucuz. Sınıflandırma, özetleme, basit cevaplar için biçilmiş kaftan.
  • gemini-1.0-pro: Önceki nesil, hâlâ ayakta ama yeni proje başlatıyorsanız tercih sebebi değil.

Bana sorarsanız her yeni projede önce flash ile başlayın; gerçekten kalitenin yetmediği yerleri görünce pro'ya geçin. Tersi alışkanlık hem cüzdanı hem latency'yi yorar.

Üretim parametrelerini ayarlamak

temperature, top_p, top_k ve max_output_tokens parametreleri modelin tonunu belirliyor. En kritik olanı temperature; düşük tutarsanız (0.1-0.3) deterministik, yüksek tutarsanız (0.7-1.0) yaratıcı yanıt alıyorsunuz.

from vertexai.generative_models import GenerativeModel, GenerationConfig

model = GenerativeModel('gemini-1.5-pro')

config = GenerationConfig(
    temperature=0.3,
    max_output_tokens=1024,
    top_p=0.9,
    top_k=40,
)

response = model.generate_content(
    'E-posta adresini doğrulayan bir Python fonksiyonu yaz.',
    generation_config=config,
)
print(response.text)

Çok turlu sohbet ve sistem talimatları

Gemini, start_chat ile bağlamı kendisi tutan bir sohbet oturumu kurmanıza izin veriyor. Üstüne bir de system_instruction ile modele kim olduğunu, nasıl davranacağını söyleyebiliyorsunuz:

from vertexai.generative_models import GenerativeModel

model = GenerativeModel(
    'gemini-1.5-flash',
    system_instruction=[
        'Sen kıdemli bir DevOps mühendisisin.',
        'Cevaplar kısa ve uygulanabilir olsun, gerektiğinde CLI komutu ver.',
    ],
)

chat = model.start_chat()
print(chat.send_message('GKE üzerinde mikroservisler için CI/CD nasıl kurulur?').text)
print(chat.send_message('Peki rollback stratejisi olarak ne önerirsin?').text)

İkinci mesajda 'rollback' derken hangi konuyu kastettiğimizi açıkça yazmadığımıza dikkat edin; bağlam oturumun kendisinde tutuluyor.

Üretimde dikkat edilecekler

Production ortamına çıkmadan önce birkaç şeye sırasıyla bakmakta fayda var:

  • Stream kullanın: Uzun cevaplar için stream=True ile token'lar üretildikçe akıtın. Kullanıcı bekleme hissini ciddi şekilde azaltıyor.
  • Token sayın: model.count_tokens(prompt) ile çağrı öncesi tahmini maliyeti görün. Özellikle uzun bağlamlı pro model çağrılarında sürpriz fatura kesmek üzücü oluyor.
  • Retry mantığı koyun: google.api_core.exceptions.ResourceExhausted ve ServiceUnavailable istisnalarını yakalayıp exponential backoff ile tekrar deneyin. Bu istisnalar geçici, döngüyü kapatıp uygulamayı düşürmeyin.
  • Safety settings'i bilinçli ayarlayın: Varsayılan filtreler çoğu zaman makul; ama domain'inize göre HarmBlockThreshold değerlerini gözden geçirin.

Kapanış

Vertex AI üzerindeki Gemini API'si, Python tarafından bakınca aslında üç-beş satırda 'çalışan' bir generative AI uygulamasına dönüşüyor; sihir kısmı modelin kendisinde, sizin tarafta sadece SDK var. Şahsi tavsiyem: önce flash ile prototipi ayağa kaldırın, retry ve token sayımı gibi temel hijyeni baştan ekleyin, kalite gerçekten yetmediğinde pro'ya geçin. Umarım faydalı olur, bir sonraki yazıda görüşmek üzere.