نوشتن پلاگین های Genkit

قابلیت های Firebase Genkit به گونه ای طراحی شده است که توسط افزونه ها گسترش یابد. افزونه‌های Genkit ماژول‌های قابل تنظیمی هستند که می‌توانند مدل‌ها، رتریورها، فهرست‌کننده‌ها، فروشگاه‌های ردیابی و موارد دیگر را ارائه دهند. شما قبلاً پلاگین ها را فقط با استفاده از Genkit در عمل مشاهده کرده اید:

import {
	"github.com/firebase/genkit/go/ai"
	"github.com/firebase/genkit/go/plugins/vertexai"
}
// Default to the value of GCLOUD_PROJECT for the project,
// and "us-central1" for the location.
// To specify these values directly, pass a vertexai.Config value to Init.
if err := vertexai.Init(ctx, nil); err != nil {
	return err
}

افزونه Vertex AI پیکربندی (مانند شناسه پروژه Google Cloud کاربر) را می گیرد و انواع مدل های جدید، جاسازی ها و موارد دیگر را در رجیستری Genkit ثبت می کند. رجیستری به عنوان یک سرویس جستجو برای اقدامات نامگذاری شده در زمان اجرا عمل می کند و رابط کاربری محلی Genkit را برای اجرا و بازرسی مدل ها، درخواست ها و موارد دیگر نیرو می دهد.

ایجاد یک افزونه

در Go، یک پلاگین Genkit به سادگی بسته ای است که به مجموعه کوچکی از قراردادها پایبند است. یک ماژول واحد می تواند شامل چندین پلاگین باشد.

شناسه ارائه دهنده

هر افزونه باید یک رشته شناسه منحصر به فرد داشته باشد که آن را از سایر افزونه ها متمایز کند. Genkit از این شناسه به عنوان فضای نام برای هر منبعی که افزونه شما تعریف می کند استفاده می کند تا از تداخل نامگذاری با سایر افزونه ها جلوگیری کند.

به عنوان مثال، اگر افزونه شما دارای شناسه پلاگین yourplugin باشد و مدلی به نام text-generator ارائه دهد، شناسه کامل مدل yourplugin/text-generator خواهد بود.

نیازی نیست شناسه ارائه دهنده خود را صادر کنید، اما باید آن را یک بار برای پلاگین خود تعریف کنید و در صورت نیاز یک تابع Genkit به طور مداوم از آن استفاده کنید.

const providerID = "yourplugin"

صادرات استاندارد

هر افزونه باید نمادهای زیر را تعریف و صادر کند:

  • یک تابع Init() با اعلانی مانند زیر:

    func Init(ctx context.Context, cfg *Config) (err error)
    

    هر پارامتری را که استفاده نمی کنید حذف کنید (به عنوان مثال، اگر افزونه شما هیچ گزینه پیکربندی گسترده پلاگین را ارائه نمی دهد، ممکن است پارامتر cfg نداشته باشید).

    در این تابع، هر مرحله راه اندازی مورد نیاز پلاگین خود را انجام دهید. به عنوان مثال:

    • تأیید کنید که مقادیر مورد نیاز پیکربندی مشخص شده است و مقادیر پیش فرض را به تنظیمات اختیاری نامشخص اختصاص دهید.
    • بررسی کنید که گزینه های پیکربندی داده شده با هم معتبر هستند.
    • هر منبع مشترک مورد نیاز بقیه افزونه خود را ایجاد کنید. به عنوان مثال، برای هر سرویسی که افزونه شما به آن دسترسی دارد، کلاینت ایجاد کنید.

    تا حد امکان، منابع ارائه شده توسط افزونه شما نباید فرض را بر این بگذارند که کاربر اقدامی غیر از فراخوانی Init انجام داده است.

    شما باید این تابع را تعریف و صادر کنید حتی اگر افزونه شما نیازی به مقداردهی اولیه نداشته باشد. در این مورد، Init فقط می تواند یک خطای nil را برگرداند.

  • یک نوع ساختار Config . این نوع باید تمام گزینه های پیکربندی پذیرفته شده توسط Init را در خود جای دهد.

    برای هر گزینه افزونه‌ای که مقادیر مخفی هستند، مانند کلیدهای API، باید هم یک گزینه Config و هم یک متغیر محیط پیش‌فرض برای پیکربندی آن ارائه دهید. این به افزونه شما امکان می دهد از ویژگی های مدیریت مخفی ارائه شده توسط بسیاری از ارائه دهندگان میزبانی (مانند Cloud Secret Manager که می توانید با Cloud Run استفاده کنید) استفاده کند. به عنوان مثال:

    type Config struct {
    	ExampleAPIKey string
    }
    
    func Init(cfg *Config) (err error) {
    	apiKey := cfg.ExampleAPIKey
    	if apiKey == "" {
    		apiKey = os.Getenv("EXAMPLE_API_KEY")
    	}
    	if apiKey == "" {
    		return fmt.Errorf(`the Example plug-in requires you to specify an API
     key for the Example service, either by passing it to example.Init() or by
     setting the EXAMPLE_API_KEY environment variable`)
    	}
    
    	return nil
    }
    

ساخت ویژگی های افزونه

یک پلاگین می تواند بسیاری از چیزهای جدید را در Genkit فعال کند. به عنوان مثال، افزونه Vertex AI چندین مدل جدید و همچنین یک embedder را فعال می کند.

پلاگین های مدل

پلاگین های مدل Genkit یک یا چند مدل هوش مصنوعی مولد را به رجیستری Genkit اضافه می کنند. مدل هر مدل تولیدی را نشان می‌دهد که قادر به دریافت یک اعلان به عنوان ورودی و تولید متن، رسانه یا داده به عنوان خروجی است.

به نوشتن افزونه مدل Genkit مراجعه کنید.

پلاگین های تله متری

پلاگین‌های تله‌متری Genkit ابزار ابزار OpenTelemetry Genkit را برای صادرات ردیابی‌ها، معیارها و گزارش‌ها به یک ابزار نظارت یا تجسم خاص پیکربندی می‌کنند.

به نوشتن افزونه تله متری Genkit مراجعه کنید.

انتشار یک افزونه

پلاگین های Genkit را می توان به عنوان بسته های عادی Go منتشر کرد. برای افزایش قابلیت کشف، بسته شما باید genkit در جایی به نام خود داشته باشد تا با یک جستجوی ساده در pkg.go.dev آن را پیدا کنید. هر یک از موارد زیر انتخاب های خوبی هستند:

  • github.com/yourorg/genkit-plugins/servicename
  • github.com/yourorg/your-repo/genkit/servicename