Flow adalah fungsi dengan beberapa karakteristik tambahan: memiliki jenis tipe kuat, dapat di-streaming, dapat dipanggil secara lokal dan jarak jauh, serta dapat diamati sepenuhnya. Firebase Genkit menyediakan alat CLI dan UI Developer untuk menangani alur (berjalan, proses debug, dll.).
Menentukan alur
import { defineFlow } from '@genkit-ai/flow';
export const menuSuggestionFlow = defineFlow(
{
name: 'menuSuggestionFlow',
},
async (restaurantTheme) => {
const suggestion = makeMenuItemSuggestion(restaurantTheme);
return suggestion;
}
);
Skema input dan output untuk alur dapat ditentukan menggunakan zod
.
import { defineFlow } from '@genkit-ai/flow';
import * as z from 'zod';
export const menuSuggestionFlow = defineFlow(
{
name: 'menuSuggestionFlow',
inputSchema: z.string(),
outputSchema: z.string(),
},
async (restaurantTheme) => {
const suggestion = makeMenuItemSuggestion(input.restaurantTheme);
return suggestion;
}
);
Jika skema ditentukan, Genkit akan memvalidasi skema untuk input dan output.
Alur berjalan
Gunakan fungsi runFlow
untuk menjalankan flow:
const response = await runFlow(menuSuggestionFlow, 'French');
Anda juga dapat menggunakan CLI untuk menjalankan flow:
genkit flow:run menuSuggestionFlow '"French"'
Di-streaming
Berikut adalah contoh sederhana flow yang dapat mengalirkan nilai dari flow:
export const menuSuggestionFlow = defineFlow(
{
name: 'menuSuggestionFlow',
streamSchema: z.string(),
},
async (restaurantTheme, streamingCallback) => {
if (streamingCallback) {
makeMenuItemSuggestionsAsync(restaurantTheme).subscribe((suggestion) => {
streamingCallback(suggestion);
});
}
}
);
Perlu diperhatikan bahwa streamingCallback
dapat tidak ditentukan. Ini hanya didefinisikan jika klien yang memanggil
meminta respons yang di-streaming.
Untuk memanggil flow dalam mode streaming, gunakan fungsi streamFlow
:
const response = streamFlow(menuSuggestionFlow, 'French');
for await (const suggestion of response.stream()) {
console.log('suggestion', suggestion);
}
Jika flow tidak menerapkan streaming, streamFlow
akan berperilaku identik dengan runFlow
.
Anda juga dapat menggunakan CLI untuk melakukan streaming flow:
genkit flow:run menuSuggestionFlow '"French"' -s
Men-deploy flow
Jika ingin dapat mengakses alur melalui HTTP, Anda harus men-deploy-nya terlebih dahulu. Genkit menyediakan integrasi untuk host Cloud Functions for Firebase dan Express.js seperti Cloud Run.
Flow yang di-deploy mendukung semua fitur yang sama seperti flow lokal (seperti streaming dan kemampuan observasi).
Cloud Function for Firebase
Untuk menggunakan flow dengan Cloud Functions for Firebase, gunakan plugin firebase
, ganti defineFlow
dengan onFlow
dan sertakan authPolicy
.
import { onFlow } from '@genkit-ai/firebase/functions';
import { firebaseAuth } from '@genkit-ai/firebase/auth';
export const menuSuggestionFlow = onFlow(
{
name: 'menuSuggestionFlow',
authPolicy: firebaseAuth((user) => {
if (!user.email_verified) {
throw new Error("Verified email required to run flow");
}
}
},
async (restaurantTheme) => {
// ....
}
);
Express.js
Untuk men-deploy flow menggunakan Cloud Run dan layanan serupa, tentukan flow Anda menggunakan defineFlow
, lalu panggil startFlowsServer()
:
import { defineFlow, startFlowsServer } from '@genkit-ai/flow';
export const menuSuggestionFlow = defineFlow(
{
name: 'menuSuggestionFlow',
},
async (restaurantTheme) => {
// ....
}
);
startFlowsServer();
Secara default, startFlowsServer
akan menyalurkan semua flow yang telah Anda tentukan dalam codebase sebagai endpoint HTTP (misalnya, http://localhost:3400/menuSuggestionFlow
).
Anda dapat memilih flow mana yang ditampilkan melalui server flow. Anda dapat menentukan port kustom (port ini akan menggunakan variabel lingkungan PORT
jika ditetapkan). Anda juga dapat menetapkan setelan CORS.
import { defineFlow, startFlowsServer } from '@genkit-ai/flow';
export const flowA = defineFlow({ name: 'flowA' }, async (subject) => {
// ....
});
export const flowB = defineFlow({ name: 'flowB' }, async (subject) => {
// ....
});
startFlowsServer({
flows: [flowB],
port: 4567,
cors: {
origin: '*',
},
});
Kemampuan observasi alur
Terkadang saat menggunakan SDK pihak ketiga yang tidak diinstrumentasikan untuk kemampuan observasi, Anda mungkin ingin melihatnya sebagai langkah rekaman aktivitas terpisah di UI Developer. Anda hanya perlu menggabungkan kode dalam fungsi run
.
import { defineFlow, run } from '@genkit-ai/flow';
export const menuSuggestionFlow = defineFlow(
{
name: 'menuSuggestionFlow',
outputSchema: z.array(s.string()),
},
async (restaurantTheme) => {
const themes = await run('find-similar-themes', async () => {
return await findSimilarRestaurantThemes(restaurantTheme);
});
const suggestions = makeMenuItemSuggestions(themes);
return suggestions;
}
);