Genkit 0.9 تعدادی از تغییرات شکسته را در کنار بهبود ویژگی هایی که عملکرد کلی را بهبود می بخشد، معرفی می کند. اگر برنامههایی را با Genkit 0.5 توسعه میدهید، هنگام ارتقا به آخرین نسخه، باید کد برنامه خود را بهروزرسانی کنید. این راهنما مهمترین تغییرات را تشریح میکند و مراحلی را برای انتقال آسان برنامههای موجود شما ارائه میدهد.
راهنمای شروع سریع
مراحل زیر به شما کمک می کند تا به سرعت از Genkit 0.5 به Genkit 0.9 مهاجرت کنید. اطلاعات بیشتر درباره این تغییرات را در Changelog جزئیات زیر بخوانید.
1. CLI جدید را نصب کنید
CLI قدیمی را حذف نصب کنید
npm uninstall -g genkit && npm uninstall genkit
CLI جدید را نصب کنید
npm i -D genkit-cli
2. وابستگی های خود را به روز کنید
بسته های اصلی Genkit را حذف کنید
npm uninstall @genkit-ai/ai @genkit-ai/core @genkit-ai/dotprompt @genkit-ai/flow
بسته جدید
genkit
تلفیقی را نصب کنیدnpm i --save genkit
تمام نسخه های افزونه را ارتقا دهید (مثال زیر)
npm upgrade @genkit-ai/firebase
3. واردات خود را تغییر دهید
واردات بستههای اصلی Genkit را حذف کنید
import { … } from '@genkit-ai/ai'; import { … } from '@genkit-ai/core'; import { … } from '@genkit-ai/flow';
واردات zod را حذف کنید
import * as z from 'zod';
وارد کردن
genkit
وzod
ازgenkit
import { z, genkit } from 'genkit';
4. کد خود را به روز کنید
بلوک های configureGenkit را حذف کنید
پیکربندی Genkit اکنون در هر نمونه انجام می شود. تله متری و ثبت به صورت جهانی و جدا از نمونه Genkit پیکربندی شده است.
بلاک های
configureGenkit
باai = genkit({...})
جایگزین کنید. فقط پیکربندی افزونه را حفظ کنید.import { genkit } from 'genkit'; const ai = genkit({ plugins: [...]});
تله متری را با استفاده از enableFirebaseTelemetry یا فعال کردن GoogleCloudTelemetry پیکربندی کنید
برای Firebase:
import { enableFirebaseTelemetry } from '@genkit-ai/firebase'; enableFirebaseTelemetry({...});
برای Google Cloud:
import { enableGoogleCloudTelemetry } from '@genkit-ai/google-cloud'; enableGoogleCloudTelemetry({...});
سطح ورود به سیستم خود را به طور مستقل تنظیم کنید
import { logger } from 'genkit/logging'; logger.setLogLevel('debug');
برای جزئیات بیشتر در مورد نحوه پیکربندی تله متری و ثبت گزارش، به مستندات نظارت و ثبت گزارش مراجعه کنید.
برای جزئیات بیشتر در مورد نحوه پیکربندی نمونه Genkit، به مستندات Get Started مراجعه کنید.
اقدامات Genkit را برای فراخوانی از نمونه genkit
مهاجرت کنید
کنشها (جریانها، ابزارها، بازیابیکنندهها، نمایهسازها و غیره) برای هر نمونه تعریف میشوند. برای همه ویژگیهایی که باید تغییر دهید، Changelog را بخوانید، اما در اینجا نمونهای از موارد متداول آورده شده است.
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. آن را اجرا کنید
# run the DevUI and your js code genkit start -- <command to run node>
# run a defined flow genkit flow:run <flowName>
تغییرات
1. تغییرات CLI
رابط خط فرمان (CLI) در Genkit 0.9 به روز رسانی های قابل توجهی را تجربه کرده است. دستور شروع Genkit تغییر کرده است و CLI به بسته مستقل خود جدا شده است که اکنون باید آن را جداگانه نصب کنید.
برای نصب CLI:
npm i -g genkit-cli
برخی تغییرات در دستور genkit start
اعمال شده است:
کد برنامه Genkit + Dev UI شما را با هم شروع می کند:
genkit start -- [start command]
genkit start -- tsx src/index.ts
genkit start -- go run main.go
حالت تماشا نیز پشتیبانی می شود:
genkit start -- tsx --watch src/index.ts
فقط کد برنامه شما را در حالت برنامه نویس Genkit شروع می کند:
genkit start --noui -- <start command>
genkit start --noui -- tsx src/index.ts
Dev UI ONLY راه اندازی می شود:
genkit start
قبلاً، دستور genkit start
، Dev UI و کد برنامه شما را با هم شروع می کرد. اگر خطوط لوله CI/CD دارید که بر این فرمان تکیه دارند، ممکن است نیاز به به روز رسانی خط لوله داشته باشید.
Dev UI مستقیماً با سرور جریان تعامل میکند تا بفهمد کدام جریانها ثبت شدهاند و به شما امکان میدهد مستقیماً آنها را با ورودیهای نمونه فراخوانی کنید.
2. بسته های ساده شده و واردات
قبلاً کتابخانههای Genkit به چندین ماژول تفکیک شده بودند که باید آنها را به صورت جداگانه نصب و وارد کنید. این ماژول ها اکنون در یک واردات واحد ادغام شده اند. علاوه بر این، ماژول Zod اکنون توسط Genkit دوباره صادر می شود.
قدیمی:
npm i @genkit-ai/core @genkit-ai/ai @genkit-ai/flow @genkit-ai/dotprompt
جدید:
npm i genkit
قدیمی:
import { … } from '@genkit-ai/ai';
import { … } from '@genkit-ai/core';
import { … } from '@genkit-ai/flow';
import * as z from 'zod';
جدید:
import { genkit, z } from 'genkit';
پلاگین های Genkit همچنان باید به صورت جداگانه نصب و وارد شوند.
3. پیکربندی Genkit
پیش از این، مقداردهی اولیه Genkit یک بار در سطح جهانی با فراخوانی تابع configureGenkit
انجام می شد. منابع Genkit (جریانها، ابزارها، درخواستها، و غیره) همه به طور خودکار با این پیکربندی جهانی سیمکشی میشوند.
Genkit 0.9 نمونههای Genkit
را معرفی میکند که هر کدام یک پیکربندی را در خود گنجانده است. نمونه های زیر را ببینید:
قدیمی:
import { configureGenkit } from '@genkit-ai/core';
configureGenkit({
telemetry: {
instrumentation: ...,
logger: ...
}
});
جدید:
import { genkit } from 'genkit';
import { logger } from 'genkit/logging';
import { enableFirebaseTelemetry } from '@genkit-ai/firebase';
logger.setLogLevel('debug');
enableFirebaseTelemetry({...});
const ai = genkit({ ... });
بیایید آن را تجزیه کنیم:
-
configureGenkit()
باgenkit()
جایگزین شده است و به جای تنظیم پیکربندی در سطح جهانی، یک نمونهGenkit
پیکربندی شده را برمی گرداند. - تابع اولیه سازی Genkit اکنون در بسته
genkit
است. - ثبت گزارش و تله متری هنوز در سطح جهانی با استفاده از روش های صریح خود پیکربندی می شوند. این تنظیمات به طور یکنواخت در تمام نمونه های
Genkit
اعمال می شود.
4. تعریف جریان ها و راه اندازی سرور جریان به طور صریح
اکنون که یک نمونه Genkit
پیکربندی شده دارید، باید جریان های خود را تعریف کنید. همه متدهای API با برنامهنویس اصلی مانند defineFlow
، defineTool
و onFlow
اکنون از طریق این نمونه فراخوانی میشوند.
این متفاوت از روش قبلی است که در آن جریان ها و ابزارها در سطح جهانی ثبت می شدند.
قدیمی:
import { defineFlow, defineTool, onFlow } from '@genkit-ai/core';
defineFlow(...);
defineTool(...);
onFlow(...);
جدید:
// 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});
در حال حاضر، تمام جریان هایی که می خواهید در دسترس قرار دهید باید به صراحت در آرایه flows
بالا ثبت شوند.
5. ابزارها و درخواست ها باید به صورت ایستا تعریف شوند
در نسخههای قبلی Genkit، میتوانید بهطور پویا ابزارها و درخواستها را در زمان اجرا، مستقیماً از درون یک جریان تعریف کنید.
در Genkit 0.9، این رفتار دیگر مجاز نیست. درعوض، باید تمام اقدامات و جریان های خارج از اجرای جریان (یعنی به صورت ایستا) را تعریف کنید.
این تغییر، جداسازی دقیقتری از تعاریف عمل از اجرا را اعمال میکند.
اگر کدهای شما به صورت پویا تعریف شده باشد، باید دوباره فاکتورسازی شوند. در غیر این صورت، هنگام اجرای جریان، یک خطا در زمان اجرا ایجاد می شود.
❌ نکن:
const flow = defineFlow({...}, async (input) => {
const tool = defineTool({...});
await tool(...);
});
✅ انجام دهید:
const tool = ai.defineTool({...});
const flow = ai.defineFlow({...}, async (input) => {
await tool(...);
});
6. API جدید برای جریان جریان
در Genkit 0.9، ما سینتکس را برای تعریف جریان جریان و فراخوانی آن ساده کرده ایم.
ابتدا defineFlow
و defineStreamingFlow
از هم جدا شده اند. اگر جریانی دارید که قرار است پخش شود، باید کد خود را به روز کنید تا آن را از طریق defineStreamingFlow
تعریف کنید.
دوم، به جای فراخوانی توابع stream()
و response()
جداگانه، هم stream و هم پاسخ اکنون مقادیری هستند که مستقیماً از جریان بازگردانده می شوند. این تغییر جریان جریان را ساده می کند.
قدیمی:
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());
جدید:
const myStreamingFlow = ai.defineStreamingFlow(...);
const { stream, response } = await myStreamingFlow(...);
for await (const chunk of stream) {
console.log(chunk);
}
console.log(await response);
7. متدهای کلاس GenerateResponse با خواص getter جایگزین شدند
قبلاً، برای دسترسی به خروجی ساختاریافته یا متن پاسخ با استفاده از متدهای کلاس، مانند output()
یا text()
استفاده میکردید.
در Genkit 0.9، آن روش ها با ویژگی های گیرنده جایگزین شده اند. این کار با پاسخ ها را ساده می کند.
قدیمی:
const response = await generate({ prompt: 'hi' });
console.log(response.text());
جدید:
const response = await ai.generate('hi');
console.log(response.text);
همین امر در مورد output
نیز صدق می کند:
قدیمی:
console.log(response.output());
جدید:
console.log(response.output);
8. نسل نامزد حذف شد
Genkit 0.9 مدیریت پاسخ را با حذف ویژگی candidates
ساده می کند. قبلاً، پاسخها میتوانست شامل چندین نامزد باشد که باید صریحاً به آنها رسیدگی میکردید. اکنون، تنها نامزد اول مستقیماً در یک پاسخ مسطح برگردانده می شود.
هر کدی که مستقیماً به نامزدها دسترسی پیدا کند دیگر کار نخواهد کرد.
قدیمی:
const response = await generate({
messages: [ { role: 'user', content: ...} ]
});
console.log(response.candidates); // previously you could access candidates directly
جدید:
const response = await ai.generate({
messages: [ { role: 'user', content: ...} ]
});
console.log(response.message); // single candidate is returned directly in a flat response
9. ایجاد API - پیشرفت های چند نوبتی
برای مکالمات چند نوبتی، روش قدیمی toHistory()
با messages
جایگزین شده است که نحوه مدیریت تاریخچه مکالمه را بیشتر ساده می کند.
قدیمی:
const history = response.toHistory();
جدید:
const response = await ai.generate({
messages: [ { role: 'user', content: ...} ]
});
const history = response.messages;
10. API چت ساده
در Genkit 0.9، Chat API برای مدیریت و تعامل آسان تر جلسه، دوباره طراحی شده است. در اینجا نحوه استفاده از آن برای تجربه چت همزمان و جریانی آورده شده است:
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');