Yapay zeka modelleriyle içerik oluşturma

Üretken yapay zekanın merkezinde yapay zeka modelleri yer alır. Günümüzde üretken modellere en iyi örnek olarak büyük dil modelleri (LLM'ler) ve resim oluşturma modelleri verilebilir. Bu modeller, istem adı verilen bir giriş alır (genellikle metin, resim veya her ikisinin bir kombinasyonu) ve bu girişten metin, resim, hatta ses veya video çıkışı oluşturur.

Bu modellerin çıktıları şaşırtıcı derecede inandırıcı olabilir: Büyük dil modelleri, bir insan tarafından yazılmış gibi görünen metinler oluşturur ve resim oluşturma modelleri, gerçek fotoğraflara veya insanlar tarafından oluşturulan posterlere çok benzeyen resimler üretebilir.

Ayrıca LLM'ler, basit metin oluşturmanın ötesinde görevler de yapabileceklerini kanıtlamıştır:

  • Bilgisayar programları yazma
  • Daha büyük bir görevi tamamlamak için gereken alt görevleri planlama
  • Düzenlenmemiş verileri düzenleme
  • Bir metin kümesinden bilgi verilerini anlama ve ayıklama
  • Etkinliğin metin açıklamasına göre otomatik etkinlikleri takip etme ve gerçekleştirme

Birkaç farklı sağlayıcıdan birçok model seçebilirsiniz. Her modelin kendine özgü güçlü ve zayıf yönleri vardır. Bir model bir görevde çok iyi olabilir ancak diğerlerinde daha düşük performans gösterebilir. Üretken yapay zekadan yararlanan uygulamalar, genellikle görevlere bağlı olarak birden fazla farklı model kullanmaktan yararlanabilir.

Uygulama geliştirici olarak, üretken yapay zeka modelleriyle genellikle doğrudan değil, web API'si olarak sunulan hizmetler aracılığıyla etkileşim kurarsınız. Bu hizmetler genellikle benzer işlevlere sahip olsa da bunların tümü farklı ve uyumlu olmayan API'ler aracılığıyla sağlanır. Birden fazla model hizmetinden yararlanmak istiyorsanız her birinin özel SDK'larını kullanmanız gerekir. Bu SDK'lar birbiriyle uyumlu olmayabilir. Ayrıca, bir modelden en yeni ve en yetenekli modele geçmek isterseniz bu entegrasyonu baştan oluşturmanız gerekebilir.

Genkit, halihazırda mevcut olan çeşitli önceden oluşturulmuş uygulamalarla, üretken yapay zeka model hizmetinin herhangi birine erişmeyle ilgili ayrıntıları soyutlayan tek bir arayüz sunarak bu sorunu giderir. Yapay zeka destekli uygulamanızı Genkit'i temel alarak oluşturmak, ilk üretken yapay zeka çağrınızı yapma sürecini basitleştirir ve yeni modeller ortaya çıktıkça birden fazla modeli birleştirmeyi veya bir modeli başka bir modelle değiştirmeyi de aynı derecede kolaylaştırır.

Başlamadan önce

Bu sayfadaki kod örneklerini çalıştırmak istiyorsanız önce Başlangıç kılavuzundaki adımları tamamlayın. Tüm örneklerde, Genkit'i projenize bağımlı olarak yüklemiş olduğunuz varsayılmaktadır.

Genkit tarafından desteklenen modeller

Genkit, üretken yapay zeka model hizmetinin her birini kullanabilecek kadar esnek olacak şekilde tasarlanmıştır. Temel kitaplıkları, modellerle çalışma için ortak arayüzü tanımlar ve model eklentileri, belirli bir model ve API'siyle çalışmayla ilgili uygulama ayrıntılarını tanımlar.

Genkit ekibi, Vertex AI, Google Üretken Yapay Zeka ve Ollama tarafından sağlanan modellerle çalışmak için eklentileri yönetir:

  • Google Cloud Vertex AI eklentisi aracılığıyla Gemini LLM ailesi
  • Google Yapay Zeka eklentisi aracılığıyla Gemini LLM ailesi
  • Google Cloud Vertex AI aracılığıyla Imagen2 ve Imagen3 görüntü oluşturma modelleri
  • Google Cloud Vertex AI'ın model bahçesi aracılığıyla Anthropic'in Claude 3 büyük dil modeli ailesi
  • Ollama eklentisi aracılığıyla Gemma 2, Llama 3 ve daha birçok açık model (Ollama sunucusunu kendiniz barındırmanız gerekir)

Ayrıca, bu modellere arayüz sağlayan, topluluk tarafından desteklenen birkaç eklenti de vardır:

npmjs.org adresinde genkit-model ile etiketlenmiş paketleri arayarak daha fazla bilgi edinebilirsiniz.

Model eklentilerini yükleme ve yapılandırma

İçerik üretmeye başlamak için Genkit'i kullanmadan önce bir model eklentisi yüklemeniz ve yapılandırmanız gerekir. Başlangıç kılavuzundan geldiyseniz bunu zaten yapmışsınızdır. Aksi takdirde, devam etmeden önce Başlangıç kılavuzuna veya ilgili eklentinin dokümanlarına göz atıp oradaki adımları uygulayın.

generate() yöntemi

Genkit'te, üretken yapay zeka modelleriyle etkileşim kurduğunuz birincil arayüz generate() yöntemidir.

En basit generate() çağrısı, kullanmak istediğiniz modeli ve bir metin istemini belirtir:

import { gemini15Flash, googleAI } from '@genkit-ai/googleai';
import { genkit } from 'genkit';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

(async () => {
  const { text } = await ai.generate(
    'Invent a menu item for a pirate themed restaurant.'
  );
  console.log(text);
})();

Bu kısa örneği çalıştırdığınızda, bazı hata ayıklama bilgilerinin ardından generate() çağrısının çıktısı yazdırılır. Bu çıktı genellikle aşağıdaki örnekte gösterildiği gibi Markdown metni olur:

## The Blackheart's Bounty

**A hearty stew of slow-cooked beef, spiced with rum and molasses, served in a
hollowed-out cannonball with a side of crusty bread and a dollop of tangy
pineapple salsa.**

**Description:** This dish is a tribute to the hearty meals enjoyed by pirates
on the high seas. The beef is tender and flavorful, infused with the warm spices
of rum and molasses. The pineapple salsa adds a touch of sweetness and acidity,
balancing the richness of the stew. The cannonball serving vessel adds a fun and
thematic touch, making this dish a perfect choice for any pirate-themed
adventure.

Komut dosyasını tekrar çalıştırdığınızda farklı bir sonuç alırsınız.

Önceki kod örneği, oluşturma isteğini Genkit örneğini yapılandırırken belirttiğiniz varsayılan modele gönderdi.

Tek bir generate() çağrısı için bir model de belirtebilirsiniz:

const { text } = await ai.generate({
  model: gemini15Pro,
  prompt: 'Invent a menu item for a pirate themed restaurant.',
});

Bu örnekte, model eklentisi tarafından dışa aktarılan bir model referansı kullanılmaktadır. Başka bir seçenek de model için dize tanımlayıcı kullanmaktır:

const { text } = await ai.generate({
  model: 'googleai/gemini-1.5-pro-latest',
  prompt: 'Invent a menu item for a pirate themed restaurant.',
});

Model dize tanımlayıcısı providerid/modelid şeklindedir. Burada sağlayıcı kimliği (bu örnekte googleai) eklentiyi tanımlar ve model kimliği, bir modelin belirli bir sürümü için eklentiye özgü bir dize tanımlayıcısıdır.

Ollama eklentisi gibi bazı model eklentileri, onlarca farklı modele erişim sağlar ve bu nedenle tekil model referanslarını dışa aktarmaz. Bu durumlarda, yalnızca dize tanımlayıcısını kullanarak generate() için bir model belirtebilirsiniz.

Bu örneklerde önemli bir nokta da gösterilmektedir: Üretken yapay zeka modeli çağrıları yapmak için generate()'ü kullandığınızda, kullanmak istediğiniz modeli değiştirmek için model parametresine farklı bir değer göndermeniz yeterlidir. Yerleşik model SDK'ları yerine generate()'ü kullanarak uygulamanızda birkaç farklı modeli daha kolay kullanma ve gelecekte modelleri değiştirme esnekliğine sahip olursunuz.

Şimdiye kadar yalnızca en basit generate() çağrılarının örneklerini gördünüz. Bununla birlikte, generate(), üretken modellerle daha gelişmiş etkileşimler için bir arayüz de sağlar. Bu arayüzü aşağıdaki bölümlerde göreceksiniz.

Sistem istemleri

Bazı modeller, modele kullanıcıdan gelen mesajlara nasıl yanıt vermesini istediğinizle ilgili talimatlar veren bir sistem istemi sağlama özelliğini destekler. Modelin benimsemesini istediğiniz bir karakteri, yanıtlarının üslubunu, biçimini vb. belirtmek için sistem isteminden yararlanabilirsiniz.

Kullandığınız model sistem istemlerini destekliyorsa system parametresini kullanarak bir istem sağlayabilirsiniz:

const { text } = await ai.generate({
  system: 'You are a food industry marketing consultant.',
  prompt: 'Invent a menu item for a pirate themed restaurant.',
});

Model parametreleri

generate() işlevi, modelin içeriği nasıl oluşturduğunu kontrol eden isteğe bağlı ayarları belirtebileceğiniz bir config parametresi alır:

const { text } = await ai.generate({
  prompt: 'Invent a menu item for a pirate themed restaurant.',
  config: {
    maxOutputTokens: 400,
    stopSequences: ['<end>', '<fin>'],
    temperature: 1.2,
    topP: 0.4,
    topK: 50,
  },
});

Desteklenen tam parametreler, modele ve model API'sine bağlıdır. Ancak önceki örnekteki parametreler neredeyse her modelde ortaktır. Bu parametrelerin açıklaması aşağıda verilmiştir:

Çıkış uzunluğunu kontrol eden parametreler

maxOutputTokens

LLM'ler jeton adı verilen birimlerde çalışır. Jetonlar genellikle belirli bir karakter dizisiyle eşlenir ancak her zaman eşlenmez. Bir modeli istemle beslediğinizde ilk adımlarından biri, istem dizenizin bir jeton dizisine ayrıştırılmasıdır. Ardından LLM, jetonlaştırılmış girişten bir jeton dizisi oluşturur. Son olarak, jeton dizisi tekrar metne dönüştürülür. Bu, çıkışınızdır.

Maksimum çıkış jetonu parametresi, LLM kullanılarak oluşturulacak jeton sayısıyla ilgili bir sınır belirler. Her model farklı bir kelime parçalayıcı kullanabilir ancak genel kural olarak, tek bir İngilizce kelimenin 2 ila 4 jetondan oluştuğunu kabul edebilirsiniz.

Daha önce de belirtildiği gibi, bazı jetonlar karakter dizileriyle eşlenemeyebilir. Bu tür örneklerden biri, genellikle dizinin sonunu belirten bir jetonun olmasıdır: Bir LLM bu jetonu oluşturduğunda daha fazla jeton oluşturmayı durdurur. Bu nedenle, bir LLM'nin "dur" jetonu oluşturduğu için maksimumdan daha az jeton oluşturması mümkündür ve genellikle böyle olur.

stopSequences

Oluşturulduğunda LLM çıkışının sonunu belirten jetonları veya jeton sıralarını ayarlamak için bu parametreyi kullanabilirsiniz. Burada kullanılacak doğru değerler genellikle modelin nasıl eğitildiğine bağlıdır ve genellikle model eklentisi tarafından belirlenir. Ancak modelden başka bir durak sırası oluşturmasını istediyseniz bunu burada belirtebilirsiniz.

Jetonları değil, karakter dizilerini belirttiğinizi unutmayın. Çoğu durumda, modelin dize ayırıcısının tek bir jetonla eşleştirdiği bir karakter dizisi belirtirsiniz.

"Reklam öğesi"ni kontrol eden parametreler

Sıcaklık, en yüksek p ve en yüksek k parametreleri birlikte modelin ne kadar "yaratıcı" olmasını istediğinizi kontrol eder. Aşağıda bu parametrelerin ne anlama geldiğine dair kısa açıklamalar verilmiştir. Ancak en önemli nokta şudur: Bu parametreler, LLM'nin çıkışının karakterini ayarlamak için kullanılır. Bunlar için en uygun değerler hedeflerinize ve tercihlerinize bağlıdır ve büyük olasılıkla yalnızca deneme yoluyla bulunabilir.

temperature

LLM'ler temelde jeton tahmin eden makinelerdir. LLM'ler, belirli bir jeton dizisi (ör. istem) için kelime hazinelerindeki her bir jetonun, dizide bir sonraki jeton olma olasılığını tahmin eder. Sıcaklık, bu tahminlerin 0 ile 1 arasında bir olasılığa normalleştirilmeden önce bölündüğü ölçeklendirme faktörüdür.

Düşük sıcaklık değerleri (0,0 ile 1,0 arasında), jetonlar arasındaki olasılık farkını artırır. Bu da modelin, daha önce olasılık olarak düşük olarak değerlendirdiği bir jeton oluşturma olasılığını daha da azaltır. Bu durum genellikle daha az yaratıcı bir sonuç olarak algılanır. 0, 0 teknik olarak geçerli bir değer olmasa da birçok model bunu, modelin belirlenebilir şekilde davranması ve yalnızca en olası jetonu dikkate alması gerektiğini belirten bir değer olarak değerlendirir.

Yüksek sıcaklık değerleri (1,0'dan büyük değerler), jetonlar arasındaki olasılık farklılıklarını sıkıştırır.Sonuç olarak model, daha önce olasılık olarak değerlendirmediği jetonları üretme olasılığını artırır. Bu, genellikle daha yaratıcı bir sonuç olarak algılanır. Bazı model API'leri genellikle 2, 0 olan maksimum bir sıcaklık uygular.

topP

Top-p, modelin dikkate almasını istediğiniz olası jeton sayısını kontrol eden, jetonların kümülatif olasılığını belirten 0,0 ile 1,0 arasında bir değerdir. Örneğin, 1,0 değeri, mümkün olan her jetonun dikkate alınması anlamına gelir (ancak her jetonun olasılığı yine de dikkate alınır). 0,4 değerinin kullanılması, yalnızca olasılıkları toplamı 0,4 olan en olası jetonların dikkate alınması ve kalan jetonların dikkate alınmaması anlamına gelir.

topK

Top-k, modelin dikkate almasını istediğiniz olası jeton sayısını da kontrol eden bir tam sayı değeridir. Ancak bu kez maksimum jeton sayısını açıkça belirtir. 1 değerinin belirtilmesi, modelin belirlenebilir şekilde davranması gerektiği anlamına gelir.

Model parametreleriyle deneme yapma

Geliştirici kullanıcı arayüzünü kullanarak bu parametrelerin farklı model ve istem kombinasyonlarının oluşturduğu çıkış üzerindeki etkisini deneyebilirsiniz. Geliştirici kullanıcı arayüzünü genkit start komutuyla başlattığınızda, projenizde yapılandırılmış eklentiler tarafından tanımlanan tüm modeller otomatik olarak yüklenir. Kodda bu değişiklikleri tekrar tekrar yapmak zorunda kalmadan farklı istemleri ve yapılandırma değerlerini hızlıca deneyebilirsiniz.

Yapılandırılmış çıkış

Üretken yapay zekayı uygulamanızda bir bileşen olarak kullanırken genellikle çıktının düz metin dışında bir biçimde olmasını istersiniz. Yalnızca kullanıcıya göstermek için içerik oluşturuyor olsanız bile yapılandırılmış çıkıştan yararlanarak içeriği kullanıcıya daha çekici bir şekilde sunabilirsiniz. Ancak üretken yapay zekanın daha gelişmiş uygulamaları için (ör. modelin çıkışının programatik kullanımı veya bir modelin çıkışının başka bir modele beslenmesi) yapılandırılmış çıkış şarttır.

Genkit'te, generate() çağrısını yaparken bir şema belirterek modelden yapılandırılmış çıkış isteyebilirsiniz:

import { z } from 'genkit'; // Import Zod, which is re-exported by Genkit.
const MenuItemSchema = z.object({
  name: z.string(),
  description: z.string(),
  calories: z.number(),
  allergens: z.array(z.string()),
});

const { output } = await ai.generate({
  prompt: 'Invent a menu item for a pirate themed restaurant.',
  output: { schema: MenuItemSchema },
});

Model çıkış şemaları, Zod kitaplığı kullanılarak belirtilir. Zod, bir şema tanımı diline ek olarak, statik TypeScript türleri ile üretken yapay zeka modellerinin öngörülemeyen çıkışı arasındaki boşluğu dolduran çalışma zamanında tür kontrolü de sağlar. Zod, başarılı bir oluşturma çağrısının her zaman TypeScript türlerinize uygun bir çıkış döndüreceği gerçeğine güvenebilen kodlar yazmanıza olanak tanır.

generate() dosyasında bir şema belirttiğinizde Genkit arka planda birkaç işlem yapar:

  • İstem, istenen çıkış biçimiyle ilgili ek yönergelerle desteklenir. Bu, modele tam olarak ne tür bir içerik oluşturmak istediğinizi belirtme (örneğin, yalnızca bir menü öğesi önermekle kalmayıp bir açıklama, alerjen listesi vb. oluşturma) yan etkisine de sahiptir.
  • Model çıkışını JavaScript nesnesi olarak ayrıştırır.
  • Çıktının şemaya uygun olduğunu doğrular.

Başarılı bir generate çağrısından yapılandırılmış çıkış almak için yanıt nesnesinin output mülkünü kullanın:

if (output) {
  const { name, description, calories, allergens } = output;
}

Hataları işleme

Önceki örnekte output özelliğinin null olabileceğini unutmayın. Bu durum, model şemaya uygun bir çıkış oluşturamadığında ortaya çıkabilir. Bu tür hatalarla başa çıkmak için en iyi strateji, tam kullanım alanınıza bağlıdır. Bununla birlikte, aşağıdaki genel ipuçlarını göz önünde bulundurabilirsiniz:

  • Farklı bir model deneyin. Yapılandırılmış çıkışın başarılı olması için modelin JSON biçiminde çıkış oluşturabilmesi gerekir. Gemini ve Claude gibi en güçlü LLM'ler bunu yapacak kadar çok yönlüdür. Ancak Ollama ile kullanacağınız yerel modellerden bazıları gibi daha küçük modeller, özel olarak eğitilmedikçe yapılandırılmış çıkışı güvenilir bir şekilde üretemeyebilir.

  • Zod'un zorlama özelliklerinden yararlanın: Şemalarınızda, Zod'un uygun olmayan türleri şema tarafından belirtilen türe zorlamaya çalışmasını belirtebilirsiniz. Şemanızda dize dışında ilkel türler varsa Zod zorlama özelliğini kullanmak, yaşadığınız generate() hatalarının sayısını azaltabilir. MenuItemSchema işlevinin aşağıdaki sürümünde, modelin kalori bilgilerini sayı yerine dize olarak oluşturduğu durumları otomatik olarak düzeltmek için tür zorlama kullanılır:

    const MenuItemSchema = z.object({
      name: z.string(),
      description: z.string(),
      calories: z.coerce.number(),
      allergens: z.array(z.string()),
    });
    
  • generate() çağrısını yeniden deneyin. Seçtiğiniz model yalnızca nadiren uyumlu çıkış oluşturamazsa hatayı bir ağ hatası gibi ele alabilir ve isteği bir tür artımlı geri çekilme stratejisi kullanarak yeniden deneyebilirsiniz.

Akış

Büyük miktarlarda metin oluştururken, çıktıyı oluşturulduğu sırada sunarak (yayınlayarak) kullanıcılarınıza daha iyi bir deneyim sunabilirsiniz. Akış işleminin kullanıldığı bilinen bir örnek, çoğu LLM sohbet uygulamasında görülebilir: Kullanıcılar, modelin mesajlarına verdiği yanıtları oluşturulurken okuyabilir. Bu da uygulamanın algılanan yanıt hızını artırır ve akıllı bir muhatapla sohbet etme yanılsamasını güçlendirir.

Genkit'te generateStream() yöntemini kullanarak çıkışı aktarabilirsiniz. Söz dizimi generate() yöntemine benzer:

const { response, stream } = await ai.generateStream(
  'Suggest a complete menu for a pirate themed restaurant.'
);

Yanıt nesnesinde, oluşturulduğu sırada isteğin akış çıkışını iterlemek için kullanabileceğiniz bir stream mülkü bulunur:

for await (const chunk of stream) {
  console.log(chunk.text);
}

Akış dışı isteklerde olduğu gibi, isteğin çıktısını da eksiksiz olarak alabilirsiniz:

const completeText = (await response).text;

Akış, yapılandırılmış çıkışla da çalışır:

const MenuSchema = z.object({
  starters: z.array(MenuItemSchema),
  mains: z.array(MenuItemSchema),
  desserts: z.array(MenuItemSchema),
});

const { response, stream } = await ai.generateStream({
  prompt: 'Suggest a complete menu for a pirate themed restaurant.',
  output: { schema: MenuSchema },
});

for await (const chunk of stream) {
  // `output` is an object representing the entire output so far.
  console.log(chunk.output);
}

// Get the completed output.
const { output } = await response;

Akış biçiminde yapılandırılmış çıkış, akış biçiminde metinden biraz farklı çalışır: Bir yanıt parçasının output mülkü, tek bir parçayı temsil eden bir nesne (tek başına geçerli olmayabilir) yerine, o ana kadar üretilen parçaların toplamından oluşturulan bir nesnedir. Her bir yapılandırılmış çıkış parçası, bir anlamda kendisinden önceki parçanın yerini alır.

Örneğin, önceki örnekteki ilk beş çıkış aşağıdaki gibi görünebilir:

null

{ starters: [ {} ] }

{
  starters: [ { name: "Captain's Treasure Chest", description: 'A' } ]
}

{
  starters: [
    {
      name: "Captain's Treasure Chest",
      description: 'A mix of spiced nuts, olives, and marinated cheese served in a treasure chest.',
      calories: 350
    }
  ]
}

{
  starters: [
    {
      name: "Captain's Treasure Chest",
      description: 'A mix of spiced nuts, olives, and marinated cheese served in a treasure chest.',
      calories: 350,
      allergens: [Array]
    },
    { name: 'Shipwreck Salad', description: 'Fresh' }
  ]
}

Çok modlu giriş

Şimdiye kadar gördüğünüz örneklerde, model istemleri olarak metin dizeleri kullanılmıştır. Bu, üretken yapay zeka modellerini istemde bulunmanın en yaygın yolu olmaya devam etse de birçok model, istem olarak diğer medyaları da kabul edebilir. Medya istemleri genellikle modele medyada bir işlem yapmasını (ör. bir resme altyazı ekleme veya ses kaydını metne dönüştürme) talimat veren metin istemleriyle birlikte kullanılır.

Medya girişini kabul etme özelliği ve kullanabileceğiniz medya türleri tamamen modele ve API'sine bağlıdır. Örneğin, Gemini 1.5 serisi modeller istem olarak resim, video ve ses kabul edebilir.

Destekleyen bir modele medya istemi sağlamak için generate'e basit bir metin istemi göndermek yerine medya bölümü ve metin bölümünden oluşan bir dizi gönderin:

const { text } = await ai.generate([
  { media: { url: 'https://example.com/photo.jpg' } },
  { text: 'Compose a poem about this image.' },
]);

Yukarıdaki örnekte, herkese açık bir HTTPS URL'si kullanarak bir resim belirttiniz. Medya verilerini, veri URL'si olarak kodlayarak da doğrudan iletebilirsiniz. Örneğin:

import { readFile } from 'node:fs/promises';
const b64Data = await readFile('photo.jpg', { encoding: 'base64url' });
const dataUrl = `data:image/jpeg;base64,${b64Data}`;

const { text } = await ai.generate([
  { media: { url: dataUrl } },
  { text: 'Compose a poem about this image.' },
]);

Medya girişini destekleyen tüm modeller hem veri URL'lerini hem de HTTPS URL'lerini destekler. Bazı model eklentileri diğer medya kaynakları için destek ekler. Örneğin, Vertex AI eklentisi Cloud Storage (gs://) URL'lerini de kullanmanıza olanak tanır.

Medya oluşturma

Bu sayfadaki örneklerin çoğunda, LLM'ler kullanılarak metin oluşturma ele alınmıştır. Ancak Genkit, resim oluşturma modelleriyle de kullanılabilir. generate()'ü görüntü üretme modeliyle kullanmak, LLM kullanmakla benzerdir. Örneğin, Vertex AI üzerinden Imagen2 modelini kullanarak bir resim oluşturmak için:

  1. Genkit, oluşturulan medya için standart çıkış biçimi olarak data: URL'lerini kullanır. Bu, bunları işleyebilecek birçok kitaplığın bulunduğu standart bir biçimdir. Bu örnekte, jsdom kaynağındaki data-urls paketi kullanılmaktadır:

    npm i --save data-urls
    npm i --save-dev @types/data-urls
  2. Resim oluşturmak ve bir dosyaya kaydetmek için generate() işlevini çağırın. Bu işlev çağrısında, resim oluşturma modelini ve çıkış biçiminin medya türünü belirtin:

    import { imagen3Fast, vertexAI } from '@genkit-ai/vertexai';
    import parseDataURL from 'data-urls';
    import { genkit } from 'genkit';
    
    import { writeFile } from 'node:fs/promises';
    
    const ai = genkit({
      plugins: [vertexAI({ location: 'us-central1' })],
    });
    
    (async () => {
      const { media } = await ai.generate({
        model: imagen3Fast,
        prompt: 'photo of a meal fit for a pirate',
        output: { format: 'media' },
      });
    
      if (media === null) throw new Error('No media generated.');
    
      const data = parseDataURL(media.url);
      if (data === null) throw new Error('Invalid "data:" URL.');
    
      await writeFile(`output.${data.mimeType.subtype}`, data.body);
    })();
    

Sonraki adımlar

Genkit hakkında daha fazla bilgi

  • Uygulama geliştirici olarak üretken yapay zeka modellerinin çıkışını etkilemenin birincil yolu istemlerdir. Genkit'in etkili istemler geliştirmenize ve bunları kod tabanınızda yönetmenize nasıl yardımcı olduğunu öğrenmek için İstem yönetimi başlıklı makaleyi okuyun.
  • generate(), üretken yapay zeka destekli her uygulamanın çekirdeği olsa da gerçek dünyadaki uygulamalar genellikle üretken yapay zeka modelini çağırmadan önce ve çağırdıktan sonra ek çalışma gerektirir. Genkit, bu durumu yansıtmak için işlevler gibi tanımlanan ancak gözlemlenebilirlik ve basitleştirilmiş dağıtım gibi ek özellikler ekleyen akışlar kavramını sunar. Daha fazla bilgi için İş akışlarını tanımlama başlıklı makaleyi inceleyin.

Gelişmiş LLM kullanımı

  • LLM'lerin yeteneklerini geliştirmenin bir yolu, sizden daha fazla bilgi isteebilecekleri veya sizden bir işlem yapmalarını isteyebilecekleri yöntemlerin listesini onlara sunmaktır. Bu işleme araç çağırma veya işlev çağırma denir. Bu özelliği desteklemek için eğitilen modeller, bir istemin özel biçimlendirilmiş bir yanıtıyla yanıt verebilir. Bu yanıt, çağıran uygulamaya bir işlem yapmasını ve sonucu orijinal istemle birlikte LLM'ye geri göndermesini belirtir. Genkit, hem istem oluşturma hem de bir aracı çağıran uygulamanın çağrı-yanıt döngüsü öğelerini otomatikleştiren kitaplık işlevlerine sahiptir. Daha fazla bilgi için Araç arama bölümüne bakın.
  • Almayla artırılmış üretim (RAG), bir modelin çıktısına alana özgü bilgileri eklemek için kullanılan bir tekniktir. Bu, istem dili modele iletilmeden önce istem içine alakalı bilgilerin eklenmesi ile yapılır. Tam bir RAG uygulaması için metin yerleştirme oluşturma modelleri, vektör veritabanları ve büyük dil modelleri gibi çeşitli teknolojileri bir araya getirmeniz gerekir. Genkit'in bu çeşitli öğeleri koordine etme sürecini nasıl basitleştirdiğini öğrenmek için Almayla artırılmış üretim (RAG) başlıklı makaleyi inceleyin.

Model çıkışını test etme

Yazılım mühendisi olarak, aynı girişin her zaman aynı çıkışı ürettiği deterministik sistemlere alışkınsınızdır. Ancak yapay zeka modelleri olasılıksal olduğundan çıkış, girişteki ince nüanslara, modelin eğitim verilerine ve hatta sıcaklık gibi parametreler tarafından kasıtlı olarak sunulan rastgeleliğe bağlı olarak değişiklik gösterebilir.

Genkit'in değerlendiricileri, çeşitli stratejiler kullanarak LLM'nizin yanıtlarının kalitesini değerlendirmenin yapılandırılmış yollarıdır. Daha fazla bilgi için Değerlendirme sayfasını inceleyin.