Manipulasi prompt adalah cara utama yang dapat Anda gunakan untuk memengaruhi output model AI generatif sebagai developer aplikasi. Misalnya, saat menggunakan LLM, Anda dapat membuat prompt yang memengaruhi nada, format, panjang, dan karakteristik lainnya dari respons model.
Genkit dirancang berdasarkan premis bahwa prompt adalah kode. Anda menulis dan mempertahankan prompt dalam file sumber, melacak perubahannya menggunakan sistem kontrol versi yang sama dengan yang Anda gunakan untuk kode, dan men-deploy-nya bersama dengan kode yang memanggil model AI generatif.
Sebagian besar developer akan mendapati bahwa library Dotprompt yang disertakan memenuhi kebutuhan mereka saat menggunakan prompt di Genkit. Namun, pendekatan lainnya juga didukung dengan bekerja menggunakan prompt secara langsung.
Menentukan prompt
Fungsi bantuan pembuatan Genkit menerima prompt string, dan Anda dapat memanggil model dengan cara ini untuk kasus penggunaan yang jelas.
ai.Generate(context.Background(), model, ai.WithTextPrompt("You are a helpful AI assistant named Walt."))
Umumnya, Anda harus menyertakan beberapa input yang disediakan pengguna dalam prompt Anda. Anda dapat menentukan fungsi untuk merendernya seperti ini:
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"))))
Namun, menentukan prompt di kode Anda memiliki satu kekurangan, yaitu pengujian mengharuskan eksekusi prompt tersebut sebagai bagian dari flow. Untuk memfasilitasi iterasi yang lebih cepat, Genkit menyediakan fasilitas untuk menentukan prompt dan menjalankannya di UI Developer.
Gunakan fungsi DefinePrompt
untuk mendaftarkan prompt ke 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
},
)
Tindakan prompt menentukan fungsi yang menampilkan GenerateRequest
,
yang dapat digunakan dengan model apa pun. Anda juga dapat menentukan skema input
untuk prompt, yang serupa dengan skema input untuk suatu flow.
Prompt juga dapat menentukan opsi konfigurasi model yang umum, seperti
temperatur atau jumlah token output.
Anda dapat merender prompt ini ke permintaan model dengan fungsi bantuan yang disediakan. Berikan variabel input yang diharapkan oleh prompt, dan model yang akan dipanggil.
request, err := helloPrompt.Render(context.Background(), HelloPromptInput{UserName: "Fred"})
if err != nil {
return err
}
response, err := model.Generate(context.Background(), request, nil)
Di UI Developer Genkit, Anda dapat menjalankan prompt apa pun yang telah ditentukan dengan cara ini. Hal ini memungkinkan Anda bereksperimen dengan prompt individual di luar cakupan alur penggunaannya.
Dotprompt
Genkit menyertakan library Dotprompt yang menambahkan fungsi tambahan ke prompt.
- Memuat prompt dari file sumber
.prompt
- Template berbasis handlebar
- Dukungan untuk template propmt multi-turn dan konten multimedia
- Definisi skema input dan output yang ringkas
- Penggunaan yang lancar dengan
generate()