دستکاری سریع اولین روشی است که شما به عنوان یک توسعه دهنده اپلیکیشن بر خروجی مدل های هوش مصنوعی مولد تاثیر می گذارید. برای مثال، هنگام استفاده از LLM، میتوانید اعلانهایی ایجاد کنید که بر لحن، قالب، طول و سایر ویژگیهای پاسخهای مدلها تأثیر میگذارند.
Genkit با این فرض طراحی شده است که دستورات کد هستند . درخواستهای خود را در فایلهای منبع مینویسید و نگهداری میکنید، تغییرات آنها را با استفاده از سیستم کنترل نسخه مشابهی که برای کد خود استفاده میکنید، ردیابی میکنید، و آنها را همراه با کدی که مدلهای هوش مصنوعی تولیدی شما را فراخوانی میکند، مستقر میکنید.
اکثر توسعه دهندگان متوجه خواهند شد که کتابخانه Dotprompt شامل نیازهای آنها برای کار با دستورات در Genkit است. با این حال، رویکردهای جایگزین نیز با کار مستقیم با دستورات پشتیبانی می شوند.
تعریف دستورات
توابع کمکی نسل Genkit اعلانهای رشتهای را میپذیرند، و میتوانید مدلها را برای موارد استفاده مستقیم از این طریق فراخوانی کنید.
ai.Generate(context.Background(), model, ai.WithTextPrompt("You are a helpful AI assistant named Walt."))
در بیشتر موارد، باید برخی از ورودی های ارائه شده توسط کاربر را در درخواست خود بگنجانید. شما می توانید یک تابع برای ارائه آنها به این صورت تعریف کنید:
func helloPrompt(name string) *ai.Part {
prompt := fmt.Sprintf("You are a helpful AI assistant named Walt. Say hello to %s.", name)
return ai.NewTextPart(prompt)
}
response, err := ai.GenerateText(context.Background(), model,
ai.WithMessages(ai.NewUserMessage(helloPrompt("Fred"))))
با این حال، یک نقص در تعریف دستورات در کد شما این است که آزمایش نیاز به اجرای آنها به عنوان بخشی از یک جریان دارد. برای تسهیل در تکرار سریعتر، Genkit تسهیلاتی را برای تعریف دستورات شما و اجرای آنها در Developer UI فراهم می کند.
از تابع DefinePrompt
برای ثبت درخواست های خود در Genkit استفاده کنید.
type HelloPromptInput struct {
UserName string
}
helloPrompt := ai.DefinePrompt(
"prompts",
"helloPrompt",
nil, // Additional model config
jsonschema.Reflect(&HelloPromptInput{}),
func(ctx context.Context, input any) (*ai.GenerateRequest, error) {
params, ok := input.(HelloPromptInput)
if !ok {
return nil, errors.New("input doesn't satisfy schema")
}
prompt := fmt.Sprintf(
"You are a helpful AI assistant named Walt. Say hello to %s.",
params.UserName)
return &ai.GenerateRequest{Messages: []*ai.Message{
{Content: []*ai.Part{ai.NewTextPart(prompt)}},
}}, nil
},
)
یک عمل سریع تابعی را تعریف میکند که یک GenerateRequest
را برمیگرداند که میتواند با هر مدلی استفاده شود. به صورت اختیاری، شما همچنین می توانید یک طرح ورودی برای اعلان تعریف کنید، که مشابه طرح ورودی برای یک جریان است. درخواستها همچنین میتوانند هر یک از گزینههای رایج پیکربندی مدل، مانند دما یا تعداد نشانههای خروجی را تعریف کنند.
می توانید با تابع کمکی ارائه شده، این درخواست را به یک درخواست مدل ارائه دهید. متغیرهای ورودی مورد انتظار توسط اعلان و مدلی که باید فراخوانی شود را ارائه کنید.
request, err := helloPrompt.Render(context.Background(), HelloPromptInput{UserName: "Fred"})
if err != nil {
return err
}
response, err := model.Generate(context.Background(), request, nil)
در رابط کاربری Genkit Developer، میتوانید هر دستوری را که به این شکل تعریف کردهاید اجرا کنید. این به شما امکان میدهد تا با درخواستهای فردی خارج از محدوده جریانهایی که ممکن است در آنها استفاده شوند آزمایش کنید.
Dotprompt
Genkit شامل کتابخانه Dotprompt است که عملکردهای اضافی را به درخواست ها اضافه می کند.
- در حال بارگیری درخواست ها از فایل های منبع
.prompt
- الگوهای مبتنی بر فرمان
- پشتیبانی از قالب های چند نوبتی سریع و محتوای چند رسانه ای
- تعاریف مختصر طرحواره ورودی و خروجی
- استفاده روان با
generate()