Makale

Firebase AI Logic ve Gemini ile Yapay Zekâ Destekli Kiler Geliştirmek

TinyRecipe, mutfağınızda hâlihazırda bulunan malzemelerden hızlı ve yapılandırılmış tarifler üretmek için Firebase AI Logic ve Gemini’yi nasıl kullanıyor?

Firebase AI Logic ve Gemini ile Yapay Zekâ Destekli Kiler Geliştirmek

Yerel öncelikli mobil uygulamalardan oluşan bir portföyü yöneten bağımsız bir uygulama geliştiricisi olarak temel felsefem her zaman hız, fayda ve maliyet verimliliği oldu. TinyRecipe ile hedef basitti: kullanıcıların buzdolabında veya kilerinde o anda bulunan malzemelere kesin olarak dayanan pratik, adım adım tarifler üreterek gıda israfını önlemelerine yardımcı olmak.

Bir mobil istemciye üretken yapay zekâ eklemek, dikkatli tasarlanmazsa yavaş yanıt sürelerine, öngörülemeyen JSON yüklerine ve artan API maliyetlerine hızla dönüşebilir. İşte hızlı, yapılandırılmış tarif üretimi sunarken çalışma maliyetlerini minimumda tutmak için Vertex AI üzerinde Gemini ile çalışan Firebase AI Logic’i nasıl entegre ettiğim.

Temel Zorluk: LLM’i Dizginlemek

Bir LLM’e tarif oluşturma konusunda sınırsız özgürlük verirseniz hemen üç sorun ortaya çıkar:

  1. Halüsinasyonlar ve tuhaf eşleşmeler: zeytinyağı, soya sosu ve bir limonu çorbaya dönüştürmeyi önerebilir.
  2. Şema tutarsızlığı: serbest biçimli metni veya yapılandırılmamış Markdown’ı yerel mobil UI bileşenlerine geri ayrıştırmak, istemci tarafında kırılgan hatalara yol açar.
  3. Yüksek token tüketimi: sınırsız yanıtlar, çok adımlı talimatlar için token bütçesini hızla tüketir.

Bunu çözmek için Firebase’in Vertex AI ile backend entegrasyonunu kullanarak katı sistem talimatları ve yapılandırılmış çıktı ayrıştırması uyguladım.

1. Sistem İstemi Korkulukları ve JSON Şema Zorunluluğu

Modelden iyi bir tarif istemek yerine sistem istemi onu katı bir JSON şema sözleşmesine zorlar:

{
  "title": "String",
  "prep_time_minutes": "Number",
  "difficulty": "Easy | Medium | Hard",
  "matched_pantry_items": ["Array of Strings"],
  "missing_staples_required": ["Array of Strings"],
  "instructions": [
    {
      "step_number": 1,
      "text": "String"
    }
  ]
}

İki korkuluk, özelliği pratikte çok daha faydalı hâle getirdi:

  • Temel malzeme istisnası: kullanıcıların kiler listelerinde tuzu, karabiberi, musluk suyunu veya yemeklik yağı işaretlemesi gerekmemeli. Sistem istemi bu temel malzemelere açıkça izin verir; bu da seçim arayüzünü sürtünmesiz tutar.
  • Katı malzeme izolasyonu: model, dışarıdan ekleme önermeden önce kullanıcının dijital kilerinde mevcut olarak işaretlenmiş malzemelere öncelik verir.

2. İstemci Tarafı Optimizasyonları: Sürtünmesiz UX

Mutfakta mobil klavyede “250 g doğranmış tavuk göğsü” yazmak kimsenin istediği bir şey değil.

[Kullanıcı kiler etiketlerine dokunur] -> [İstemci diziyi oluşturur] -> [Firebase AI isteği] -> [Yerel UI oluşturma]
  • Hızlı seçim kategori etiketleri: arayüz, yaygın buzdolabı ve kiler ürünleri için kategorilere ayrılmış, hızlıca açılıp kapanan etiketler sunar.
  • Yerel önbellekleme: bir Firebase AI Logic isteği göndermeden önce uygulama seçilen kiler dizisinin karmasını (hash) alır. Kullanıcı kısa bir süre içinde aynı temel malzemelerle tarif istediğinde TinyRecipe, başka bir API çağrısı yapmadan önbelleğe alınmış sonucu anında sunar.

3. Öğrendiklerim ve Sonraki Adımlar

Firebase AI Logic, tek başına çalışan bir geliştirici için üretken yapay zekâ özelliğini ölçeklemeyi dikkat çekici ölçüde kolaylaştırdı. Model sınırında katı JSON şemaları uygulayarak ve durumu yerel tutarak TinyRecipe şunları başarıyor:

  • iki saniyenin altında üretim süreleri
  • ayrıştırma hataları olmadan öngörülebilir istemci tarafı oluşturma
  • ihmal edilebilir API token israfı

AI Pantry özelliği artık hem iOS’ta hem Android’de yayında.