Perintah

Manipulasi perintah adalah cara utama yang dapat Anda, sebagai developer aplikasi, output model AI generatif. Misalnya, saat menggunakan LLM, Anda dapat membuat petunjuk yang memengaruhi nada, format, panjang, dan karakteristik lainnya dari respons model.

Genkit dirancang berdasarkan premis bahwa perintah adalah kode. Anda menulis dan mempertahankan perintah Anda di file sumber, melacak perubahan pada perintah tersebut menggunakan versi yang sama sistem kontrol yang digunakan untuk kode Anda, dan Anda men-deploy-nya bersama kode yang memanggil model AI generatif Anda.

Sebagian besar developer akan mendapati bahwa library Dotprompt yang disertakan memenuhi kebutuhan mereka saat menggunakan prompt di Genkit. Namun, alternatif juga didukung dengan bekerja menggunakan prompt secara langsung.

Menentukan prompt

Fungsi bantuan pembuatan Genkit menerima perintah string, dan Anda dapat memanggil model dengan cara ini untuk kasus penggunaan yang jelas.

Go

request := ai.GenerateRequest{Messages: []*ai.Message{
  {Content: []*ai.Part{ai.NewTextPart("You are a helpful AI assistant named Walt.")}},
}}
model.Generate(context.Background(), &request, nil)

Umumnya, Anda harus menyertakan beberapa input yang disediakan pengguna dalam perintah Anda. Anda dapat menentukan fungsi untuk merendernya seperti ini:

Go

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)
}
request := ai.GenerateRequest{Messages: []*ai.Message{
  {Content: []*ai.Part{helloPrompt("Fred")}},
}}
response, err := model.Generate(context.Background(), &request, nil)

Namun, satu kekurangan dalam menentukan prompt dalam kode Anda adalah pengujian mengharuskan eksekusi mereka sebagai bagian dari alur. Untuk memfasilitasi iterasi yang lebih cepat, Genkit menyediakan fasilitas menentukan prompt dan menjalankannya di UI Developer.

Go

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 merupakan analisis terhadap skema input untuk flow. Perintah 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 perintah, dan model yang akan dipanggil.

Go

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 perintah apa pun yang telah ditentukan dengan cara ini. Hal ini memungkinkan Anda bereksperimen dengan setiap perintah di luar cakupan alur di mana mereka mungkin digunakan.

{i>Dotprompt<i}

Genkit menyertakan library Dotprompt yang menambahkan fungsionalitas prompt.

  • Memuat perintah dari .prompt file sumber
  • Template berbasis handlebar
  • Dukungan untuk template perintah multi-turn dan konten multimedia
  • Definisi skema input dan output yang ringkas
  • Penggunaan yang lancar dengan generate()