Yapay zeka modelleriyle içerik oluşturma

Üretken yapay zekanın merkezinde yapay zeka modelleri yer alır. Şu anda en önemli iki üretken modellere örnek olarak büyük dil modelleri (LLM) ve görüntü, modeller. Bu modeller, istem istem adı verilen girişi alır (en yaygın metin, resim veya bunların bir birleşimi) ve çıkış metni olarak üretildiğinde, görseller, hatta ses veya videolar olabilir.

Bu modellerin çıktıları şaşırtıcı derecede ikna edici olabilir: LLM'ler metin oluşturur bir insan tarafından yazılmış gibi görünen bir metin oluşturma modelleri, gerçek fotoğraflara çok yakın görüntüler veya insan tarafından oluşturulan sanat eseri.

Buna ek olarak, LLM'lerin basit metin oluşturma işleminin ötesinde görevler gerçekleştirebildiğini kanıtlamıştır:

  • Bilgisayar programları yazmak
  • Daha büyük bir görevi tamamlamak için gerekli olan alt görevleri planlama
  • Organize edilmemiş verileri düzenleme
  • Metin topluluğundan bilgi verilerini anlama ve ayıklama
  • Şu öğenin metin açıklamasına göre otomatik etkinlikleri takip etmek ve gerçekleştirmek: etkinlik

Birçok farklı sağlayıcıdan kullanabileceğiniz birçok model vardır. Her biri modelin kendi güçlü ve zayıf yönleri vardır ve bir model tek bir görevde başarılı olabilir başkalarında ise daha düşük performans gösterdiğini fark edebilirsiniz. Üretken yapay zekadan yararlanan uygulamalar eldeki göreve bağlı olarak birden çok farklı model kullanmaktan faydalanıyor.

Uygulama geliştirici olarak genellikle üretken yapay zeka ile etkileşimde bulunmazsınız modeli doğrudan değil, web API'leri olarak sunulan hizmetler aracılığıyla gerçekleştirilir. Bu hizmetler genellikle benzer işlevlere sahip olsa da hepsi aynı işleve sahiptir. farklı API'ler üzerinden yapılıyor. Birden çok model hizmetlerinin her birine ait özel SDK'ları kullanmanız gerekir. birbirleriyle uyumlu değildir. Ve bir modelden üst modele yükseltme yapmak isterseniz tespit edebiliyorsanız, bu entegrasyonu işletme boyunca tekrar.

Genkit bu zorluğun üstesinden gelmek için soyutlayan tek bir arayüz sunuyor. üretken yapay zeka model hizmetlerine erişimle ilgili ayrıntıları ortadan kaldırabilirsiniz. halihazırda derlenmiş birkaç uygulama vardır. Yapay zeka destekli geliştirme uygulaması, üretken yapay zeka destekli ilk çağrınızı yapma sürecini basitleştirir ve birden çok modeli birleştirmeyi veya tek bir modeli bir diğeri ise yeni modeller.

Başlamadan önce

Bu sayfadaki kod örneklerini çalıştırmak istiyorsanız önce Başlangıç kılavuzuna göz atın. Tüm örneklerde görüldüğü gibi, Genkit'i projenize bağımlılık olarak zaten yüklemiş olmalısınız.

Genkit tarafından desteklenen modeller

Genkit, tüm üretken yapay zekaları kullanabilecek kadar esnek olacak şekilde tasarlanmıştır. modeli hizmeti. Temel kitaplıkları, ortak çalışma için kullanılacak ortak arayüzü tanımlar modellerin ve model eklentilerinin, bir API'yle çalışmaya ilişkin uygulama ayrıntılarını API'sini kullanabilirsiniz.

Genkit ekibi, Vertex AI'ın sağladığı modellerle çalışmak için gerekli eklentileri Google Üretken Yapay Zeka ve Ollama:

Ayrıca topluluk tarafından desteklenen çeşitli eklentiler de vardır. arayüzleri vardır:

Şu üründe genkit-model ile etiketlenmiş paketleri arayarak daha fazlasını keşfedebilirsiniz: npmjs.org'dur.

Model eklentilerini yükleme ve yapılandırma

İçerik üretmeye başlamak için Genkit'i kullanmadan önce model eklentisi yapılandırabilirsiniz. Başlangıç kılavuzundan geliyorsanız veya bunu zaten yapmıştınız. Aksi takdirde Başlarken bölümüne bakın. kılavuzuna veya bağımsız eklenti dokümanlarına bakın ve yüklemeden önce orada bulunan adımları uygulayın devam ediyor.

create() işlevi

Genkit'te, üretken yapay zeka ile etkileşime geçtiğiniz birincil arayüz. model, generate() işlevidir.

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

import { generate } from '@genkit-ai/ai';
import { configureGenkit } from '@genkit-ai/core';
import { gemini15Flash } from '@genkit-ai/googleai';

configureGenkit(/* ... */);

(async () => {
  const llmResponse = await generate({
    model: gemini15Flash,
    prompt: 'Invent a menu item for a pirate themed restaurant.',
  });

  console.log(await llmResponse.text());
})();

Bu kısa örneği çalıştırdığınızda bazı hata ayıklama bilgileri yazdırılır. ve ardından generate() çağrısının çıkışı bulunur. Bu, genellikle Markdown olur. metin:

## 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 çıkış alırsınız.

Önceki kod örneği, dışa aktarılan bir model referansını kullanarak modeli belirtiyor model eklentisi tarafından sağlanır. Dize tanımlayıcısı kullanarak da modeli belirtebilirsiniz:

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

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

Ollama eklentisi gibi bazı model eklentileri, modeller vardır. Dolayısıyla tek tek modelleri dışa aktarmazlar. referanslar. Bu gibi durumlarda, modeli yalnızca generate() öğesine belirtebilirsiniz: dize tanımlayıcısı:

const llmResponse = await generate({
  model: 'ollama/gemma2',
  prompt: 'Invent a menu item for a pirate themed restaurant.',
});

Yukarıdaki örneklerin tümü de önemli bir noktayı göstermektedir: Üretken yapay zeka ile model çağrıları yapmak için generate() ve istediğiniz modeli değiştirin kullanımı, model parametresine farklı bir değer iletmektir. Ölçüt yerel model SDK'ları yerine generate() kullanarak, uygulamanızda birkaç farklı modeli daha kolay kullanma ve değişiklikleri daha da iyi hale gelecektir.

Şu ana kadar yalnızca en basit generate() çağrılarına ilişkin örnekler gördünüz. Ancak, generate() ayrıca daha gelişmiş etkileşimler için bir arayüz sunar. üretken modellere bakalım.

Model parametreleri

generate() işlevi, bir config parametresi alır. Bu parametre üzerinden modelin içerik oluşturma şeklini kontrol eden isteğe bağlı ayarları belirtin:

const llmResponse = await generate({
  prompt: "Suggest an item for the menu of a pirate themed restaurant",
  model: gemini15Flash,
  config: {
    maxOutputTokens: 400,
    stopSequences: ["<end>", "<fin>"],
    temperature: 1.2,
    topP: 0.4,
    topK: 50,
  },
});

Desteklenen tam parametreler modele ve modele bağlıdır API'ye gidin. Ancak, önceki örnekte verilen parametreler neredeyse her modeli. Aşağıda bu parametrelerin açıklaması bulunmaktadır:

Çıkış uzunluğunu kontrol eden parametreler

maxExitTokens

LLM'ler, jeton adı verilen birimler üzerinde çalışır. Jeton genellikle görünür ancak belirli bir karakter dizisiyle eşlenmesi gerekir. için atılacak ilk adımlardan biri, istem dizenizi şifrelemektir jeton dizisine dönüştürülür. Ardından LLM, token atanmış bir giriş. Son olarak, jeton dizisi tekrar metne dönüştürülür. O halde çıktınızdır.

Maksimum çıkış jetonları parametresi, oluşturmamız gerekiyor. Her model farklı bir tokenizer kullanır ancak İngilizce tek bir kelimeyi 2 ila 4 karakterden oluşan bir kelime olarak kabul etmek iyi bir genel kuraldır jeton.

Daha önce belirtildiği gibi, bazı simgeler karakter dizileriyle eşleşmeyebilir. Bunlardan biri çoğu zaman dizinin sonunu belirten bir simge bulunur: bir LLM bu jeton oluşturduğunda daha fazla jeton oluşturmayı durdurur. Dolayısıyla, mümkün ve genellikle bir LLM'nin maksimum değerden daha az jeton oluşturması çünkü "durdurma"yı oluşturdu jeton.

stopSequences

Bu parametreyi, oluşturulduysa LLM çıkışının sonunu belirtin. Burada kullanılacak doğru değerler genellikle modelin nasıl eğitildiğine bağlıdır ve modelin ayarları genellikle modelin eklentisidir. Ancak, modelin başka bir durak oluşturmasını istediyseniz istiyorsanız burada belirtebilirsiniz.

Tek başına belirteç değil karakter sıraları belirttiğinizi unutmayın. Çoğu zaman durumlarda, modelin tokenizer'ın eşlendiği bir karakter dizisi tek bir jeton.

"Yaratıcılığı" kontrol eden parametreler

temperature, top-p ve top-k parametreleri birlikte "reklam öğesi" istediğiniz modeli seçin. Aşağıda, DMAIC ve Yalın Altı Sigma yaklaşımının ancak bu parametrelerin dikkate alınması gereken bir nokta şudur: parametreleri, LLM çıktısının karakterini ayarlamak için kullanılır. Optimum değerleri, hedeflerinize ve tercihlerinize bağlıdır ve büyük olasılıkla bulunur. yalnızca deneme yoluyla sağlanır.

sıcaklık

LLM'ler temel olarak jeton tahmin eden makinelerdir. Belirli bir jeton dizisi için (ör. istem) LLM, sözlüğündeki her bir jeton için jetonun sırada bir sonraki sıraya alınma olasılığını ifade eder. Sıcaklık bu tahminlerin normalleştirilmeden önce bölündüğü ölçeklendirme faktörü arasında bir olasılıktır.

Düşük sıcaklık değerleri (0,0 ile 1,0 arasında) olasılıkları daha düşük olur. Bunun sonucunda model, olasılığı çok düşük olan bir jeton oluşturmaz. Bu genelde daha az yaratıcı bir çıktı olarak algılanır. 0.0 teknik olarak bir pek çok model bunu, modelin uygun bir değerde olması gerektiğini göz önünde bulundurmalısınız.

Yüksek sıcaklık değerleri (1,0'dan yüksek olanlar) jetonlar arasındaki olasılıklardaki farklılıklar, sonuçta modelin daha önce değerlendirdiği jetonları oluşturma ihtimali artar. pek olası değildir. Bu genellikle daha yaratıcı bir çıktı olarak algılanır. Bazı modeller API'ler maksimum sıcaklık uygular (genellikle 2, 0).

topP

Üst-p, 0,0 ile 1,0 arasında bir değerdir ve olası kümülatif olasılığı belirterek modelin dikkate almasını istediğiniz jetonlar anlamına gelir. Örneğin, 1,0 değeri, olası her bir (ancak yine de her bir jetonun olasılığını göz önünde bulundurun). A 0,4, yalnızca olasılıklarının toplamına eşit olan, en olası 0, 4 ve kalan simgeleri değerlendirmeden hariç tutar.

ilkK

Üst-k, kullanabileceğiniz olası jetonların sayısını da kontrol eden bir tam sayı değeridir ancak bu kez maksimum değeri açıkça belirterek jeton sayısı. 1 değeri belirtilmesi modelin belirlemektir.

Model parametreleriyle denemeler yapın

Bu parametrelerin, oluşturulan çıkış üzerindeki etkisiyle denemeler yapabilirsiniz. farklı model ve istem kombinasyonlarına göre optimize edilir. genkit start komutu içeren geliştirici kullanıcı arayüzü. Bu komut otomatik olarak tüm öğeleri yükler projenizde yapılandırılan eklentilerin tanımladığı modellerden birini seçin. Bu sayede tekrar tekrar tekrar yazmak zorunda kalmadan farklı istemler ve yapılandırma kodda değişikliğe gidemez.

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

Uygulamanızda üretken yapay zekayı bir bileşen olarak kullanırken, düz metin dışında bir biçimde olması gerekir. Sadece içerik üretiyor olsanız bile Böylece, yapılandırılmış çıktılardan yararlanarak yalnızca kullanıcıya daha ilgi çekici bir şekilde sunmaktır. Ancak daha gelişmiş üretken yapay zeka uygulamalarını (ör. model çıktısının programatik kullanımı) ya da bir modelin çıktısını başka bir modele aktarmak için yapılandırılmış çıktıların kullanılması şarttır.

Genkit'te şema belirterek bir modelden yapılandırılmış çıkış isteyebilirsiniz. generate() numaralı telefonu aradığınızda:

import { z } from "zod";
const MenuItemSchema = z.object({
  name: z.string(),
  description: z.string(),
  calories: z.number(),
  allergens: z.array(z.string()),
});

const llmResponse = await generate({
  prompt: "Suggest an item for the menu of a pirate themed restaurant",
  model: gemini15Flash,
  output: {
    schema: MenuItemSchema,
  },
});

Model çıkış şemaları, Zod kullanılarak belirtilir kitaplığını açar. Zod, şema tanımlama dilinin yanı sıra çalışma zamanı statik TypeScript türleri ile öngörülemeyen sonuçlar ortaya çıktı. Zod, kullanıcıların ilgi alanlarını başarılı bir oluşturma çağrısının her zaman sizin TypeScript türlerinize uygun olduğundan emin olun.

generate() ürününde bir şema belirlediğinizde Genkit, sahneler:

  • İstemi, istenen çıkış biçimi hakkında ek bilgilerle güçlendirir. Bu, aynı zamanda, modele tam olarak hangi içeriğin (örneğin, yalnızca bir menü öğesi önermekle kalmıyor, aynı zamanda bir açıklama, alerjenler listesi vb. oluşturun).
  • Model çıkışını JavaScript nesnesine ayrıştırır.
  • Çıkışın şemaya uygun olduğunu doğrular.

Başarılı bir oluşturma çağrısından yapılandırılmış çıkış almak için yanıtı kullanın nesnenin output() yöntemi:

type MenuItem = z.infer<typeof MenuItemSchema>;

const output: MenuItem | null = llmResponse.output();

Hataları işleme

Önceki örnekte, çıkış yönteminin null değerini döndürebileceğini unutmayın. Bu model şemaya uygun bir çıkış oluşturamadığında ortaya çıkar. Siz NoValidCandidatesError yakalayarak da bu durumu algılayabilir özel durum oluşturma tarafından atıldı:

import { NoValidCandidatesError } from "@genkit-ai/ai";
try {
  llmResponse = await generate(/* ... */);
} catch (e) {
  if (e instanceof NoValidCandidatesError) {
    // Output doesn't conform to schema.
  }
}

Bu tür hatalarla başa çıkmaya yönelik en iyi strateji, tam olarak kendi ama genel bazı ipuçları vereceğim:

  • Farklı bir model deneyin. Yapılandırılmış çıkışın başarılı olması için modelin JSON biçiminde çıkış üretebilir. Gemini ve benzerleri gibi en güçlü büyük dil modelleri Claude, bunu yapacak kadar çok yönlü. Ancak bazı küçük modellerde model oluşturamasanız bile, Ollama'da oluşturacağınız bu konuda özel olarak eğitilmedikleri sürece güvenilir bir şekilde öyle.

  • Zod'un zorlama yeteneklerinden yararlan: Şemalarınızda Zod, uygun olmayan türleri şema. Şemanız dizeler dışında temel türler içeriyorsa Zod'yi kullanarak baskı, karşılaştığınız generate() hatalarının sayısını azaltabilir. İlgili içeriği oluşturmak için kullanılan Aşağıdaki MenuItemSchema, dönüşüm işlemini otomatik olarak gerçekleştirmek için tür dönüştürme özelliğini kullanır. modelin, kalori bilgilerini dize olarak ürettiği doğru durumlar kodunu ekleyin:

    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 nadiren ve uyumlu çıktı üretiyorsanız, hatayı bir tablodaki bir tür artımlılık kullanarak isteği yeniden deneyin. teklif stratejisi olabilir.

Akış

Büyük miktarda metin oluştururken, kullanıcılarınızın deneyimini iyileştirmek için üretildiğinde çıkışın akışını sağlayarak kullanıcılara sunacaktır. CEVAP bilindik eylem akışı örneğini çoğu büyük dil modeli sohbet uygulamasında görebilirsiniz: mesaj üretilirken modelin mesajlarına verdiği yanıtı okuyabilir ve bu yanıtı uygulamanın algılanan yanıt verme düzeyini artırır bir temsilciyle sohbet etme illüzyonu.

Genkit'te generateStream() işlevini kullanarak çıkış yayınlayabilirsiniz. Bu söz dizimi, generate() işlevine benzer:

import { generateStream } from "@genkit-ai/ai";
import { GenerateResponseChunk } from "@genkit-ai/ai/lib/generate";
const llmResponseStream = await generateStream({
  prompt: 'Suggest a complete menu for a pirate themed restaurant',
  model: gemini15Flash,
});

Ancak bu işlev, yanıt parçalarının eşzamansız bir iterasyonunu döndürür. Bu parçaların her birini kullanılabilir olduklarında işleyin:

for await (const responseChunkData of llmResponseStream.stream()) {
  const responseChunk = responseChunkData as GenerateResponseChunk;
  console.log(responseChunk.text());
}

Yanıtın tamamını tek seferde almaya devam edebilirsiniz:

const llmResponse = await llmResponseStream.response();

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

const MenuSchema = z.object({
  starters: z.array(MenuItemSchema),
  mains: z.array(MenuItemSchema),
  desserts: z.array(MenuItemSchema),
});
type Menu = z.infer<typeof MenuSchema>;

const llmResponseStream = await generateStream({
  prompt: "Suggest a complete menu for a pirate themed restaurant",
  model: gemini15Flash,
  output: { schema: MenuSchema },
});

for await (const responseChunkData of llmResponseStream.stream()) {
  const responseChunk = responseChunkData as GenerateResponseChunk<Menu>;
  // output() returns an object representing the entire output so far
  const output: Menu | null = responseChunk.output();
  console.log(output);
}

Yapılandırılmış çıkış akışı, akıştaki metinden biraz farklı şekilde çalışır. Zaman yanıt parçasının output() yöntemini çağırırsanız şimdiye kadar üretilen parçaların birikmesiyle tek bir parçayı temsil eden bir nesne değildir (bu, . Bir anlamda yapılandırılmış çıktının her parçası, parçanın yerini alır yardımcı olur.

Örneğin, bir önceki örnekteki ilk beş çıkış şu şekildedir:

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ş

Şu ana kadar gördüğünüz örneklerde, model istemleri olarak metin dizeleri kullanılmıştır. Bu sırada Bu, üretken yapay zeka modellerini yönlendirmenin en yaygın yöntemi olmaya devam ediyor. Birçok model istem olarak diğer medyaları da kabul eder. Medya istemleri en sık kullanılan modele bazı işlemleri gerçekleştirmesi için talimat veren metin istemleriyle birlikte medyada kullanım (ör. bir görüntüye altyazı eklemek veya ses kaydını metne dönüştürmek).

Medya girişini kabul etme özelliği ve kullanabileceğiniz medya türleri şunlardır: tamamen modele ve sahip olduğu API'ye bağlıdır. Örneğin, Gemini 1.5 Resim, video ve sesi istem olarak kabul edebilen modeller.

Bunu destekleyen bir modele medya istemini iletmek yerine, basit metin istemi aracılığıyla, bir medya bölümünden ve bir metin bölümü:

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

Yukarıdaki örnekte, herkesin erişebileceği bir HTTPS kullanarak bir görüntüyü belirttiniz URL'yi tıklayın. Medya verilerini, veri URL'si olarak kodlayarak da doğrudan aktarabilirsiniz. Örneğin:

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

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

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

Medya oluşturuluyor

Şu ana kadar bu sayfadaki örneklerin çoğunda LLM'ler. Bununla birlikte Genkit, görüntü oluşturma modelleriyle de kullanılabilir. Kullanım Resim oluşturma modeliyle generate(), büyük dil modeli kullanmaya benzer. Örneğin, Örneğin, Vertex AI aracılığıyla Imagen2 modelini kullanarak bir görüntü oluşturmak için:

  1. Genkit, oluşturulan medyalar için standart çıkış biçimi olarak data: URL'lerini kullanır. Bu, işlemek için kullanılabilecek birçok kitaplık içeren standart bir biçimdir. Bu örneği, jsdom kaynağından data-urls paketini kullanır:

    npm i data-urls
    npm i --save-dev @types/data-urls
    
  2. Resim oluşturmak ve bunu bir dosyaya kaydetmek için generate() öğesini çağırarak bir resim üretme modeli ve çıkış biçiminin medya türü:

    import { generate } from '@genkit-ai/ai';
    import { configureGenkit } from '@genkit-ai/core';
    import { vertexAI, imagen2 } from '@genkit-ai/vertexai';
    import parseDataURL from 'data-urls';
    
    import { writeFile } from 'node:fs/promises';
    
    configureGenkit({
      plugins: [vertexAI({ location: 'us-central1' })],
    });
    
    (async () => {
      const mediaResponse = await generate({
        model: imagen2,
        prompt: 'photo of a meal fit for a pirate',
        output: { format: 'media' },
      });
    
      const media = mediaResponse.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);
    })();
    

Mesaj geçmişi kaydediliyor

Kullanıcılarınızın birçoğunun, ilk oturum boyunca büyük dil modelleriyle etkileşime zaman geçirebilir. LLM'ler, simüle etmekten çok daha fazlasını yapabilse de her zaman bilinen ve yararlı bir etkileşim tarzıdır. Şu zaman bile: kullanıcılarınız modelle doğrudan etkileşime girmez; Konuşmaya dayalı bir istem, sonucu etkilemek için güçlü bir yöntemdir. bir yapay zeka modeli tarafından üretilmiştir.

Bir model yanıtından mesaj geçmişi oluşturmak için toHistory() işlevini çağırın yöntem:

let response = await generate({
  model: gemini15Flash,
  prompt: "How do you say 'dog' in French?",
});
let history = response.toHistory();

Bu geçmişi serileştirebilir ve bir veritabanında veya oturum depolama alanında saklayabilirsiniz. Ardından, geçmişi, gelecekteki çağrılarda yer alan istemle birlikte generate() adlı operatöre iletin:

response = await generate({
  model: gemini15Flash,
  prompt: 'How about in Spanish?',
  history,
});
history = response.toHistory();

Kullandığınız model system rolünü destekliyorsa sistem mesajını ayarlayın:

import { MessageData } from "@genkit-ai/ai/model";
let history: MessageData[] = [
  { role: 'system', content: [{ text: 'Talk like a pirate.' }] },
];
let response = await generate({
  model: gemini15Flash,
  prompt: "How do you say 'dog' in French?",
  history,
});

Sonraki adımlar

Genkit hakkında daha fazla bilgi

  • Uygulama geliştirici olarak, üretken yapay zekanın çıktısını etkilemenin birincil yöntemi modellerden biri de istemdir. Nasıl yapılacağını öğrenmek için İstem yönetimi'ni okuyun Genkit, etkili istemler geliştirmenize ve bunları kod tabanınızda yönetmenize yardımcı olur.
  • generate(), her ne kadar üretken yapay zeka destekli tüm teknolojilerin çekirdeği olsa da uygulamalar geliştirilmeden önce genellikle ek işlem gerektirir. elde edildi. Genkit bunu yansıtmak için akışlar kavramıdır. Bunlar, fonksiyonlar gibi tanımlanır ancak özellikler (ör. gözlemlenebilirlik ve basitleştirilmiş dağıtım) Daha fazla bilgi edinmek için bkz. İş akışlarını tanımlama.

Gelişmiş LLM kullanımı

  • LLM'lerin yeteneklerini geliştirmenin bir yolu, aşağıdakileri içeren bir liste sunarak onları sizden daha fazla bilgi isteyebilir veya sizden daha fazla biraz eyleme dökülebilir. Bu işlem, araç çağrısı veya işlev çağrısı olarak bilinir. Modeller Bu yeteneği desteklemek üzere eğitilmiş olan yöneticiler, istemlere biçimi budur. Bu, çağrı uygulamasına bir işlem gerçekleştirmeli ve sonucu LLM'ye geri göndermesi karar verebilirsiniz. Genkit, hem bir araca çağrıda bulunan istem oluşturma ve çağrı-yanıt döngüsü öğeleri bazı ipuçları vereceğim. Daha fazla bilgi edinmek için Araç çağrısı başlıklı makaleye bakın.
  • Almayla artırılmış oluşturma (RAG), planlama aşamasına alana özgü bilgileri modelin çıktısına ekleme. Bu, bir isteme iletmeden önce ilgili bilgiyi dil modeli. Eksiksiz bir RAG uygulaması, ekibinizin teknolojilerimizi birleştiriyoruz: metin yerleştirme oluşturma modelleri, vektör veritabanları ve kullanır. Aşağıdaki işlemler için Almayla artırılmış oluşturma (RAG) bölümüne bakın Genkit'in bu çeşitli ekip üyelerini koordine etme sürecini nasıl basitleştirdiğini öğrenin. öğeler.

Model çıkışını test etme

Siz bir yazılım mühendisi olarak, aynı hataların, girdisi her zaman aynı çıktıyı verir. Ancak yapay zeka modelleri, varsayımsal olarak, çıktı, girişteki ince nüanslara göre değişebilir. ve hatta parametreler tarafından kasıtlı olarak sunulan rastgelelik sıcaklık gibi.

Genkit'in değerlendiricileri, büyük dil modelinizin kalitesini değerlendirmek için yapılandırılmış yollardır. çeşitli stratejiler kullanarak yanıt veriyor. Daha fazla bilgi için: Değerlendirme sayfası.