Genkit 0.9 memperkenalkan sejumlah perubahan yang dapat menyebabkan gangguan bersama dengan peningkatan fitur yang meningkatkan fungsi secara keseluruhan. Jika telah mengembangkan aplikasi dengan Genkit 0.5, Anda harus mengupdate kode aplikasi saat mengupgrade ke versi terbaru. Panduan ini menguraikan perubahan yang paling signifikan dan menawarkan langkah-langkah untuk memigrasikan aplikasi yang ada dengan lancar.
Panduan memulai cepat
Langkah-langkah berikut akan membantu Anda bermigrasi dari Genkit 0.5 ke Genkit 0.9 dengan cepat. Baca informasi selengkapnya tentang perubahan ini dalam Log Perubahan mendetail di bawah.
1. Menginstal CLI baru
Meng-uninstal CLI lama
npm uninstall -g genkit && npm uninstall genkit
Menginstal CLI baru
npm i -D genkit-cli
2. Memperbarui dependensi
Menghapus setiap paket inti Genkit
npm uninstall @genkit-ai/ai @genkit-ai/core @genkit-ai/dotprompt @genkit-ai/flow
Menginstal paket
genkit
gabungan barunpm i --save genkit
Mengupgrade semua versi plugin (contoh di bawah)
npm upgrade @genkit-ai/firebase
3. Mengubah impor
Menghapus impor untuk setiap paket inti Genkit
import { … } from '@genkit-ai/ai'; import { … } from '@genkit-ai/core'; import { … } from '@genkit-ai/flow';
Menghapus impor zod
import * as z from 'zod';
Mengimpor
genkit
danzod
darigenkit
import { z, genkit } from 'genkit';
4. Memperbarui kode
Menghapus blok configureGenkit
Konfigurasi untuk Genkit kini dilakukan per instance. Telemetri dan logging dikonfigurasi secara global dan terpisah dari instance Genkit.
Ganti
configureGenkit
dengan blokai = genkit({...})
. Hanya simpan konfigurasi plugin.import { genkit } from 'genkit'; const ai = genkit({ plugins: [...]});
Mengonfigurasi telemetri menggunakan enableFirebaseTelemetry atau enableGoogleCloudTelemetry
Untuk Firebase:
import { enableFirebaseTelemetry } from '@genkit-ai/firebase'; enableFirebaseTelemetry({...});
Untuk Google Cloud:
import { enableGoogleCloudTelemetry } from '@genkit-ai/google-cloud'; enableGoogleCloudTelemetry({...});
Tetapkan level logging secara independen ```js import { logger } from 'genkit/logging';
logger.setLogLevel('debug'); ```
Lihat dokumentasi Pemantauan dan Logging untuk mengetahui detail selengkapnya tentang cara mengonfigurasi telemetri dan logging.
Lihat dokumentasi Memulai untuk mengetahui detail selengkapnya tentang cara mengonfigurasi instance Genkit.
Memigrasikan tindakan Genkit untuk dipanggil dari instance genkit
Tindakan (alur, alat, pengambil, pengindeksan, dll.) ditentukan per instance. Baca Log Perubahan untuk semua fitur yang perlu Anda ubah, tetapi berikut adalah contoh beberapa fitur umum.
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. Menjalankan aplikasi
# run the DevUI and your js code genkit start -- <command to run node>
# run a defined flow genkit flow:run <flowName>
Log perubahan
1. Perubahan CLI
Antarmuka command line (CLI) telah mengalami update yang signifikan di Genkit 0.9. Perintah untuk memulai Genkit telah berubah, dan CLI telah dipisahkan ke dalam paket mandirinya sendiri, yang kini harus Anda instal secara terpisah.
Untuk menginstal CLI:
npm i -g genkit-cli
Beberapa perubahan telah dilakukan pada perintah genkit start
:
Memulai kode aplikasi Genkit + UI Dev secara bersamaan:
genkit start -- [start command]
genkit start -- tsx src/index.ts
genkit start -- go run main.go
Mode tonton juga didukung:
genkit start -- tsx --watch src/index.ts
HANYA memulai kode aplikasi Anda dalam mode pengembangan Genkit:
genkit start --noui -- <start command>
genkit start --noui -- tsx src/index.ts
HANYA Memulai UI Developer:
genkit start
Sebelumnya, perintah genkit start
akan memulai UI Dev dan kode aplikasi Anda secara bersamaan. Jika memiliki pipeline CI/CD yang mengandalkan perintah ini, Anda mungkin perlu memperbarui pipeline.
UI Dev akan berinteraksi langsung dengan server alur untuk mengetahui alur mana yang terdaftar dan memungkinkan Anda memanggilnya langsung dengan input sampel.
2. Paket dan impor yang disederhanakan
Sebelumnya, library Genkit dipisahkan menjadi beberapa modul, yang perlu Anda instal dan impor satu per satu. Modul ini kini telah digabungkan menjadi satu impor. Selain itu, modul Zod kini diekspor ulang oleh Genkit.
Lama:
npm i @genkit-ai/core @genkit-ai/ai @genkit-ai/flow @genkit-ai/dotprompt
Baru:
npm i genkit
Lama:
import { … } from '@genkit-ai/ai';
import { … } from '@genkit-ai/core';
import { … } from '@genkit-ai/flow';
import * as z from 'zod';
Baru:
import { genkit, z } from 'genkit';
Plugin Genkit masih harus diinstal dan diimpor satu per satu.
3. Mengonfigurasi Genkit
Sebelumnya, inisialisasi Genkit dilakukan satu kali secara global dengan memanggil fungsi configureGenkit
. Semua resource Genkit (alur, alat, perintah, dll.) akan otomatis terhubung dengan konfigurasi global ini.
Genkit 0.9 memperkenalkan instance Genkit
, yang masing-masing mengenkapsulasi konfigurasi. Lihat contoh berikut:
Lama:
import { configureGenkit } from '@genkit-ai/core';
configureGenkit({
telemetry: {
instrumentation: ...,
logger: ...
}
});
Baru:
import { genkit } from 'genkit';
import { logger } from 'genkit/logging';
import { enableFirebaseTelemetry } from '@genkit-ai/firebase';
logger.setLogLevel('debug');
enableFirebaseTelemetry({...});
const ai = genkit({ ... });
Mari kita uraikan:
configureGenkit()
telah diganti dengangenkit()
, dan menampilkan instanceGenkit
yang dikonfigurasi, bukan menyiapkan konfigurasi secara global.- Fungsi inisialisasi Genkit kini ada dalam paket
genkit
. - Logging dan telemetri masih dikonfigurasi secara global menggunakan metode eksplisit mereka sendiri. Konfigurasi ini berlaku secara seragam di semua instance
Genkit
.
4. Menentukan alur dan memulai server alur secara eksplisit
Setelah memiliki instance Genkit
yang dikonfigurasi, Anda harus menentukan alur. Semua metode API inti yang ditampilkan kepada developer seperti defineFlow
, defineTool
, dan onFlow
kini dipanggil melalui instance ini.
Hal ini berbeda dengan cara sebelumnya, saat alur dan alat didaftarkan secara global.
Lama:
import { defineFlow, defineTool, onFlow } from '@genkit-ai/core';
defineFlow(...);
defineTool(...);
onFlow(...);
Baru:
// 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});
Mulai sekarang, semua alur yang ingin Anda sediakan harus didaftarkan secara eksplisit dalam array flows
di atas.
5. Alat dan Perintah harus ditentukan secara statis
Di Genkit versi sebelumnya, Anda dapat menentukan alat dan perintah secara dinamis saat runtime, langsung dari dalam alur.
Di Genkit 0.9, perilaku ini tidak lagi diizinkan. Sebagai gantinya, Anda harus menentukan semua tindakan dan alur di luar eksekusi alur (yaitu secara statis).
Perubahan ini menerapkan pemisahan definisi tindakan yang lebih ketat dari eksekusi.
Jika ada kode Anda yang ditentukan secara dinamis, kode tersebut harus difaktorkan ulang. Jika tidak, error akan ditampilkan saat runtime saat alur dieksekusi.
❌ JANGAN:
const flow = defineFlow({...}, async (input) => {
const tool = defineTool({...});
await tool(...);
});
✅ LAKUKAN:
const tool = ai.defineTool({...});
const flow = ai.defineFlow({...}, async (input) => {
await tool(...);
});
6. API Baru untuk Alur Streaming
Di Genkit 0.9, kami telah menyederhanakan sintaksis untuk menentukan alur streaming dan memanggilnya.
Pertama, defineFlow
dan defineStreamingFlow
telah dipisahkan. Jika memiliki alur yang dimaksudkan untuk di-streaming, Anda harus memperbarui kode untuk menentukannya melalui defineStreamingFlow
.
Kedua, alih-alih memanggil fungsi stream()
dan response()
yang terpisah, aliran data dan respons kini merupakan nilai yang ditampilkan langsung dari alur. Perubahan ini menyederhanakan streaming alur.
Lama:
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());
Baru:
const myStreamingFlow = ai.defineStreamingFlow(...);
const { stream, response } = await myStreamingFlow(...);
for await (const chunk of stream) {
console.log(chunk);
}
console.log(await response);
7. Metode class GenerateResponse diganti dengan properti pengambil
Sebelumnya, Anda biasa mengakses output terstruktur atau teks respons menggunakan metode class, seperti output()
atau text()
.
Di Genkit 0.9, metode tersebut telah diganti dengan properti pengambil. Hal ini menyederhanakan penggunaan respons.
Lama:
const response = await generate({ prompt: 'hi' });
console.log(response.text());
Baru:
const response = await ai.generate('hi');
console.log(response.text);
Hal yang sama berlaku untuk output
:
Lama:
console.log(response.output());
Baru:
console.log(response.output);
8. Pembuatan Kandidat Dihapus
Genkit 0.9 menyederhanakan penanganan respons dengan menghapus atribut candidates
. Sebelumnya, respons dapat berisi beberapa kandidat, yang perlu Anda tangani secara eksplisit. Sekarang, hanya kandidat pertama yang ditampilkan langsung dalam respons datar.
Setiap kode yang mengakses kandidat secara langsung tidak akan berfungsi lagi.
Lama:
const response = await generate({
messages: [ { role: 'user', content: ...} ]
});
console.log(response.candidates); // previously you could access candidates directly
Baru:
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 - Peningkatan Multi-Giliran
Untuk percakapan multi-giliran, metode toHistory()
lama telah diganti dengan messages
, yang lebih menyederhanakan cara penanganan histori percakapan.
Lama:
const history = response.toHistory();
Baru:
const response = await ai.generate({
messages: [ { role: 'user', content: ...} ]
});
const history = response.messages;
10. Chat API yang Disederhanakan
Di Genkit 0.9, Chat API telah didesain ulang untuk memudahkan pengelolaan dan interaksi sesi. Berikut cara memanfaatkannya untuk pengalaman chat sinkron dan streaming:
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');