جریان ها توابعی با برخی ویژگی های اضافی هستند: آنها به شدت تایپ شده، قابل جریان، قابل فراخوانی محلی و از راه دور و کاملاً قابل مشاهده هستند. Firebase Genkit ابزارهای CLI و Developer UI را برای کار با جریان ها (اجرا، اشکال زدایی و غیره) فراهم می کند.
تعریف جریان ها
import { defineFlow } from '@genkit-ai/flow';
export const menuSuggestionFlow = defineFlow(
{
name: 'menuSuggestionFlow',
},
async (restaurantTheme) => {
const suggestion = makeMenuItemSuggestion(restaurantTheme);
return suggestion;
}
);
طرحواره های ورودی و خروجی برای جریان ها را می توان با استفاده از 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;
}
);
وقتی طرحواره مشخص شد Genkit طرحواره را برای ورودی ها و خروجی ها تأیید می کند.
در حال اجرا جریان دارد
از تابع runFlow
برای اجرای جریان استفاده کنید:
const response = await runFlow(menuSuggestionFlow, 'French');
می توانید از CLI برای اجرای جریان ها نیز استفاده کنید:
genkit flow:run menuSuggestionFlow '"French"'
پخش شد
در اینجا یک مثال ساده از یک جریان است که می تواند مقادیر یک جریان را جریان دهد:
export const menuSuggestionFlow = defineFlow(
{
name: 'menuSuggestionFlow',
streamSchema: z.string(),
},
async (restaurantTheme, streamingCallback) => {
if (streamingCallback) {
makeMenuItemSuggestionsAsync(restaurantTheme).subscribe((suggestion) => {
streamingCallback(suggestion);
});
}
}
);
توجه داشته باشید که streamingCallback
می تواند تعریف نشده باشد. تنها در صورتی تعریف میشود که کلاینت فراخوان درخواست پاسخ جریانی را داشته باشد.
برای فراخوانی یک جریان در حالت پخش از تابع streamFlow
استفاده کنید:
const response = streamFlow(menuSuggestionFlow, 'French');
for await (const suggestion of response.stream()) {
console.log('suggestion', suggestion);
}
اگر جریان پخش جریانی را اجرا نکند streamFlow
همانند runFlow
رفتار خواهد کرد.
همچنین میتوانید از CLI برای استریم جریانها استفاده کنید:
genkit flow:run menuSuggestionFlow '"French"' -s
استقرار جریان ها
اگر می خواهید بتوانید به جریان خود از طریق HTTP دسترسی داشته باشید، ابتدا باید آن را مستقر کنید. Genkit ادغام هایی را برای توابع Cloud برای میزبان های Firebase و Express.js مانند Cloud Run ارائه می دهد.
جریانهای مستقر از همه ویژگیهای مشابه جریانهای محلی (مانند جریان و قابلیت مشاهده) پشتیبانی میکنند.
Cloud Function برای Firebase
برای استفاده از جریانها با توابع ابری برای Firebase از افزونه firebase
استفاده کنید، defineFlow
با onFlow
جایگزین کنید و یک 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
برای استقرار جریان ها با استفاده از Cloud Run و سرویس های مشابه، جریان های خود را با استفاده از defineFlow
تعریف کنید و سپس startFlowsServer()
فراخوانی کنید:
import { defineFlow, startFlowsServer } from '@genkit-ai/flow';
export const menuSuggestionFlow = defineFlow(
{
name: 'menuSuggestionFlow',
},
async (restaurantTheme) => {
// ....
}
);
startFlowsServer();
بهطور پیشفرض startFlowsServer
تمام جریانهایی را که در پایگاه کد خود تعریف کردهاید بهعنوان نقاط پایانی HTTP ارائه میکند (مثلا http://localhost:3400/menuSuggestionFlow
).
شما می توانید انتخاب کنید که کدام جریان ها از طریق سرور جریان ها در معرض دید قرار گیرند. شما می توانید یک پورت سفارشی را مشخص کنید (اگر تنظیم شود از متغیر محیطی PORT
استفاده می کند). همچنین می توانید تنظیمات 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: '*',
},
});
قابلیت مشاهده جریان
گاهی اوقات هنگام استفاده از SDK های شخص ثالث که برای مشاهده قابل مشاهده نیستند، ممکن است بخواهید آنها را به عنوان یک مرحله ردیابی جداگانه در رابط کاربری توسعه دهنده ببینید. تنها کاری که باید انجام دهید این است که کد را در تابع 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;
}
);