میدلور در Genkit: رهگیری و کنترل کامل اپهای هوش مصنوعی
خلاصهٔ کاملتر
Genkit یه فریمورک متنباز از گوگله که برای ساخت اپهای هوش مصنوعی روی پلتفرمهای مختلف طراحی شده و از TypeScript، Go، Dart و Python پشتیبانی میکنه. آخرین آپدیت مهمش معرفی سیستم میدلور (Middleware) است — یه لایهی قابل ترکیب که بین فراخوانیهای مدل و منطق اصلی برنامهات میشینه و بهت اجازه میده رفتار مدل رو بدون دستزدن به هر پرامپت بهصورت جداگانه، کنترل کنی.
هر بار که generate() فراخوانی میشه، Genkit یه حلقهی ابزار (tool loop) اجرا میکنه: مدل خروجی میده، ابزارهای درخواستشده اجرا میشن، نتایج برمیگردن به مدل، و این چرخه ادامه پیدا میکنه. میدلور میتونه در سه سطح به این حلقه وصل بشه: سطح Generate (یه بار در هر تکرار حلقه)، سطح Model (یه بار در هر فراخوانی مستقیم API مدل)، و سطح Tool (یه بار به ازای هر اجرای ابزار).
Genkit چند میدلور آماده داره. Retry با exponential backoff خطاهای گذرا مثل RESOURCE_EXHAUSTED رو بهصورت خودکار مدیریت میکنه. Fallback وقتی مدل اصلی از دسترس خارج شد، به مدل جایگزین — مثلاً از Gemini به Claude — سوئیچ میکنه. ToolApproval قبل از اجرای ابزارهای خطرناک، درخواست تأیید انسانی میفرسته. Skills فایلهای SKILL.md رو میخونه و محتواشون رو به سیستمپرامپت تزریق میکنه. Filesystem هم دسترسی کنترلشدهای به فایلسیستم لوکال میده بدون اینکه مدل بتونه از پوشهی root فرار کنه.
قدرت اصلی این سیستم در نوشتن میدلور سفارشی هست. مثلاً میتونی یه فیلتر محتوا بنویسی که هر خروجی مدل رو بررسی کنه و اگه کلمهی ممنوعهای داشت، با خطا متوقفش کنه — بدون اینکه این قانون رو توی هر پرامپت تکرار کنی:
func (f ContentFilter) New(ctx context.Context) (*ai.Hooks, error) {
return &ai.Hooks{
WrapModel: func(ctx context.Context, p *ai.ModelParams, next ai.ModelNext) (*ai.ModelResponse, error) {
resp, err := next(ctx, p)
if err != nil {
return nil, err
}
text := strings.ToLower(resp.Text())
for _, term := range f.ForbiddenTerms {
if strings.Contains(text, strings.ToLower(term)) {
return nil, fmt.Errorf("content filter: response contains %q", term)
}
}
return resp, nil
},
}, nil
}میتونی چند میدلور رو روی هم stack کنی؛ ترتیب مهمه و اولی بیرونیترین لایهست. مثلاً Retry رو بیرون از ContentFilter بذاری تا در صورت خطای فیلتر هم retry انجام بشه. Developer UI مخصوص Genkit هم بهت اجازه میده میدلورها رو inspect، تست و دیباگ کنی.
نکات کلیدی:
- میدلور در سه لایهی Generate، Model و Tool کار میکنه
- قابلیتهای آماده: Retry، Fallback، ToolApproval، Skills، Filesystem
- نوشتن میدلور سفارشی سادهست و حدود ۲۰ خط کد کافیه
- میدلورها قابل ترکیب و stackشدن هستن
- الان برای TypeScript، Go و Dart در دسترسه؛ Python هم به زودی
- Developer UI برای تست و دیباگ میدلورها پشتیبانی میکنه




