Genkit 0.9, genel işlevselliği iyileştiren özellik geliştirmelerinin yanı sıra bir dizi önemli değişiklik içerir. Genkit 0.5 ile uygulama geliştiriyorsanız en son sürüme geçtiğinizde uygulama kodunuzu güncellemeniz gerekir. Bu kılavuzda en önemli değişiklikler özetlenmiştir ve mevcut uygulamalarınızı sorunsuz bir şekilde taşımanız için adımlar sunulmaktadır.
Hızlı başlangıç kılavuzu
Aşağıdaki adımlar, Genkit 0.5'ten Genkit 0.9'a hızlı bir şekilde geçiş yapmanıza yardımcı olacaktır. Bu değişiklikler hakkında daha fazla bilgiyi aşağıdaki ayrıntılı değişiklik günlüğünde bulabilirsiniz.
1. Yeni CLI'yi yükleme
Eski CLI'yi kaldırın
npm uninstall -g genkit && npm uninstall genkit
Yeni CLI'yi yükleme
npm i -D genkit-cli
2. Bağımlılıklarınızı güncelleme
Genkit temel paketlerini tek tek kaldırma
npm uninstall @genkit-ai/ai @genkit-ai/core @genkit-ai/dotprompt @genkit-ai/flow
Yeni birleştirilmiş
genkit
paketini yüklemenpm i --save genkit
Tüm eklenti sürümlerini yükseltin (aşağıdaki örnek)
npm upgrade @genkit-ai/firebase
3. İçe aktarma işlemlerinizi değiştirme
Genkit çekirdek paketlerinin içe aktarma işlemlerini tek tek kaldırma
import { … } from '@genkit-ai/ai'; import { … } from '@genkit-ai/core'; import { … } from '@genkit-ai/flow';
Zod içe aktarma işlemlerini kaldırma
import * as z from 'zod';
genkit
vezod
öğelerinigenkit
'ten içe aktarmaimport { z, genkit } from 'genkit';
4. Kodunuzu güncelleme
configureGenkit bloklarını kaldırın
Genkit yapılandırması artık örnek başına yapılır. Telemetri ve günlük kaydı, Genkit örneğinden ayrı olarak global olarak yapılandırılır.
configureGenkit
yerineai = genkit({...})
blokları kullanın. Yalnızca eklenti yapılandırmasını saklayın.import { genkit } from 'genkit'; const ai = genkit({ plugins: [...]});
enableFirebaseTelemetry veya enableGoogleCloudTelemetry'yi kullanarak telemetriyi yapılandırma
Firebase için:
import { enableFirebaseTelemetry } from '@genkit-ai/firebase'; enableFirebaseTelemetry({...});
Google Cloud için:
import { enableGoogleCloudTelemetry } from '@genkit-ai/google-cloud'; enableGoogleCloudTelemetry({...});
Günlük kaydı düzeyinizi bağımsız olarak ayarlama ```js import { logger } from 'genkit/logging';
logger.setLogLevel('debug'); ```
Telemetri ve günlük kaydının nasıl yapılandırılacağıyla ilgili daha fazla bilgi için İzleme ve Günlük Kaydı belgelerine bakın.
Genkit örneğinin nasıl yapılandırılacağı hakkında daha fazla bilgi için Başlangıç dokümanlarını inceleyin.
Genkit işlemlerini genkit
örneğinden çağrılacak şekilde taşıma
İşlemler (akışlar, araçlar, alıcı, dizine ekleyenler vb.) örnek başına tanımlanır. Değiştirmeniz gereken tüm özellikler için değişiklik günlüğünü okuyun. Yaygın olarak kullanılan bazı özellikler aşağıda verilmiştir.
import { genkit } from 'genkit';
import { onFlow } from '@genkit-ai/firebase/functions';
const ai = genkit({ plugins: [...]});
// Flows and tools are defined on the specific genkit instance
// and are directly callable.
const sampleFlow = ai.defineFlow(...);
const sampleTool = ai.defineTool(...);
async function callMyFlow() {
// Previously, text output could accessed via .text()
// Now it is either .output() or .text
return await sampleFlow().output();
}
// onFlow now takes the Genkit instance as first argument
// This registers the flow as a callable firebase function
onFlow(ai, ...);
const flows = [ sampleFlow, ... ];
// Start the flow server to make the registered flows callable over HTTP
ai.startFlowServer({flows});
5. Çalıştırın
# run the DevUI and your js code genkit start -- <command to run node>
# run a defined flow genkit flow:run <flowName>
Değişiklik günlüğü
1. CLI Değişiklikleri
Komut satırı arayüzü (KSA), Genkit 0.9'da önemli güncellemeler geçirdi. Genkit'i başlatma komutu değişti ve CLI, ayrı bir bağımsız pakete ayrıldı. Artık bu paketi ayrı olarak yüklemeniz gerekiyor.
CLI'yi yüklemek için:
npm i -g genkit-cli
genkit start
komutunda bazı değişiklikler yapıldı:
Genkit uygulama kodunuzu ve Geliştirici kullanıcı arayüzünü birlikte başlatır:
genkit start -- [start command]
genkit start -- tsx src/index.ts
genkit start -- go run main.go
İzleme modu da desteklenir:
genkit start -- tsx --watch src/index.ts
YALNIZCA uygulama kodunuzu Genkit geliştirici modunda başlatır:
genkit start --noui -- <start command>
genkit start --noui -- tsx src/index.ts
YALNIZCA Geliştirici kullanıcı arayüzünü başlatır:
genkit start
Daha önce genkit start
komutu, Dev kullanıcı arayüzünü ve uygulama kodunuzu birlikte başlatıyordu. Bu komutu kullanan CI/CD ardışık düzenleriniz varsa ardışık düzeni güncellemeniz gerekebilir.
Geliştirici kullanıcı arayüzü, hangi akışların kaydedildiğini anlamak için doğrudan akış sunucusuyla etkileşim kurar ve bunları doğrudan örnek girişlerle çağırmanıza olanak tanır.
2. Basitleştirilmiş paketler ve içe aktarma işlemleri
Daha önce Genkit kitaplıkları, tek tek yüklemeniz ve içe aktarmanız gereken çeşitli modüllere ayrılmıştı. Bu modüller artık tek bir içe aktarma işleminde birleştirildi. Ayrıca Zod modülü artık Genkit tarafından yeniden dışa aktarılıyor.
Eski:
npm i @genkit-ai/core @genkit-ai/ai @genkit-ai/flow @genkit-ai/dotprompt
Yeni:
npm i genkit
Eski:
import { … } from '@genkit-ai/ai';
import { … } from '@genkit-ai/core';
import { … } from '@genkit-ai/flow';
import * as z from 'zod';
Yeni:
import { genkit, z } from 'genkit';
Genkit eklentileri yine ayrı ayrı yüklenmeli ve içe aktarılmalıdır.
3. Genkit'i yapılandırma
Daha önce Genkit'in başlatılması, configureGenkit
işlevi çağrılarak global olarak bir kez yapılıyordu. Genkit kaynaklarının (akışlar, araçlar, istemler vb.) tümü bu genel yapılandırmayla otomatik olarak bağlanır.
Genkit 0.9, her biri bir yapılandırmayı kapsayan Genkit
örnekleri sunar. Aşağıdaki örneklere bakın:
Eski:
import { configureGenkit } from '@genkit-ai/core';
configureGenkit({
telemetry: {
instrumentation: ...,
logger: ...
}
});
Yeni:
import { genkit } from 'genkit';
import { logger } from 'genkit/logging';
import { enableFirebaseTelemetry } from '@genkit-ai/firebase';
logger.setLogLevel('debug');
enableFirebaseTelemetry({...});
const ai = genkit({ ... });
Bu süreci ayrıntılı şekilde inceleyelim:
configureGenkit()
,genkit()
ile değiştirildi ve yapılandırmaları dünya genelinde ayarlamak yerine yapılandırılmış birGenkit
örneği döndürüyor.- Genkit ilklendirme işlevi artık
genkit
paketindedir. - Günlük kaydı ve telemetri, kendi açık yöntemleri kullanılarak global olarak yapılandırmaya devam eder. Bu yapılandırmalar tüm
Genkit
örnekleri için aynı şekilde geçerlidir.
4. Akışları tanımlama ve akış sunucusunu açıkça başlatma
Yapılandırılmış bir Genkit
örneğiniz olduğuna göre akışlarınızı tanımlamanız gerekir. Geliştiricilere yönelik temel API yöntemleri (ör. defineFlow
, defineTool
ve onFlow
) artık bu örnek üzerinden çağrılıyor.
Bu, akışların ve araçların global olarak kaydedildiği önceki yöntemden farklıdır.
Eski:
import { defineFlow, defineTool, onFlow } from '@genkit-ai/core';
defineFlow(...);
defineTool(...);
onFlow(...);
Yeni:
// Define tools and flows
const sampleFlow = ai.defineFlow(...);
const sampleTool = ai.defineTool(...);
// onFlow now takes the Genkit instance as first argument
// This registers the flow as a callable firebase function
onFlow(ai, ...);
const flows = [ sampleFlow, ... ];
// Start the flow server to make the registered flows callable over HTTP
ai.startFlowServer({flows});
Şu anda, kullanıma sunmak istediğiniz tüm akışların yukarıdaki flows
dizisine açıkça kaydedilmesi gerekir.
5. Araçlar ve istemler statik olarak tanımlanmalıdır
Genkit'in önceki sürümlerinde, araçları ve istemleri çalışma zamanında doğrudan bir akıştan dinamik olarak tanımlayabiliyordunuz.
Genkit 0.9'da bu davranışa artık izin verilmez. Bunun yerine, tüm işlemleri ve akışları akışın yürütülmesinin dışında (yani statik olarak) tanımlamanız gerekir.
Bu değişiklik, işlem tanımlarının yürütme işlemlerinden daha katı bir şekilde ayrılmasını zorunlu kılar.
Kodlarınızdan herhangi biri dinamik olarak tanımlanmışsa yeniden yapılandırılmalıdır. Aksi takdirde, akış yürütüldüğünde çalışma zamanında bir hata meydana gelir.
❌ YAPMAYIN:
const flow = defineFlow({...}, async (input) => {
const tool = defineTool({...});
await tool(...);
});
✅ YAPIN:
const tool = ai.defineTool({...});
const flow = ai.defineFlow({...}, async (input) => {
await tool(...);
});
6. Akış akışları için yeni API
Genkit 0.9'da, bir akış akışını tanımlama ve çağırma söz dizimini basitleştirdik.
Öncelikle defineFlow
ve defineStreamingFlow
ayrıldı. Aktarılmak üzere tasarlanmış bir akışınız varsa kodunuzu defineStreamingFlow
üzerinden tanımlayacak şekilde güncellemeniz gerekir.
İkinci olarak, ayrı stream()
ve response()
işlevleri çağırmak yerine hem akış hem de yanıt artık doğrudan akıştan döndürülen değerlerdir. Bu değişiklik, akış aktarımını basitleştirir.
Eski:
import { defineFlow, streamFlow } from '@genkit-ai/flow';
const myStreamingFlow = defineFlow(...);
const { stream, output } = await streamFlow(myStreamingFlow, ...);
for await (const chunk of stream()) {
console.log(chunk);
}
console.log(await output());
Yeni:
const myStreamingFlow = ai.defineStreamingFlow(...);
const { stream, response } = await myStreamingFlow(...);
for await (const chunk of stream) {
console.log(chunk);
}
console.log(await response);
7. GenerateResponse sınıfı yöntemleri, alıcı mülkleriyle değiştirildi
Daha önce, output()
veya text()
gibi sınıf yöntemlerini kullanarak yanıtın yapılandırılmış çıktısına veya metnine erişiyordunuz.
Genkit 0.9'da bu yöntemler, alıcı mülklerle değiştirildi. Bu sayede yanıtlarla çalışmayı basitleştirebilirsiniz.
Eski:
const response = await generate({ prompt: 'hi' });
console.log(response.text());
Yeni:
const response = await ai.generate('hi');
console.log(response.text);
Aynı durum output
için de geçerlidir:
Eski:
console.log(response.output());
Yeni:
console.log(response.output);
8. Aday Oluşturma İşlemi Kaldırıldı
Genkit 0.9, candidates
özelliğini kaldırarak yanıt işlemeyi basitleştirir. Daha önce yanıtlar birden fazla aday içerebiliyordu ve bu adayları açıkça işlemeniz gerekiyordu. Artık yalnızca ilk aday, düz bir yanıtta doğrudan döndürülür.
Adaylara doğrudan erişen kodlar artık çalışmaz.
Eski:
const response = await generate({
messages: [ { role: 'user', content: ...} ]
});
console.log(response.candidates); // previously you could access candidates directly
Yeni:
const response = await ai.generate({
messages: [ { role: 'user', content: ...} ]
});
console.log(response.message); // single candidate is returned directly in a flat response
9. Generate API - Çoklu Dönüş iyileştirmeleri
Çok turlu görüşmelerde eski toHistory()
yöntemi messages
ile değiştirildi. Bu sayede görüşme geçmişinin işlenme şekli daha da basitleştirildi.
Eski:
const history = response.toHistory();
Yeni:
const response = await ai.generate({
messages: [ { role: 'user', content: ...} ]
});
const history = response.messages;
10. Streamlined Chat API
Genkit 0.9'da Chat API, daha kolay oturum yönetimi ve etkileşim için yeniden tasarlandı. Hem eşzamanlı hem de akışlı sohbet deneyimlerinde bu özelliği nasıl kullanabileceğinizi aşağıda bulabilirsiniz:
import { genkit } from 'genkit';
import { gemini15Flash, googleAI } from '@genkit-ai/googleai';
const ai = genkit({
plugins: [googleAI()],
model: gemini15Flash,
});
const session = ai.createSession({ store: firestoreSessionStore() });
const chat = await session.chat({ system: 'talk like a pirate' });
let response = await chat.send('hi, my name is Pavel');
console.log(response.text()); // "hi Pavel, I'm llm"
// continue the conversation
response = await chat.send("what's my name");
console.log(response.text()); // "Pavel"
// can stream
const { response, stream } = await chat.sendStream('bye');
for await (const chunk of stream) {
console.log(chunk.text());
}
console.log((await response).text());
// can load session from the store
const prevSession = await ai.loadSession(session.id, { store });
const prevChat = await prevSession.chat();
await prevChat.send('bye');