พรอมต์

การจัดการพรอมต์เป็นวิธีหลักที่คุณในฐานะนักพัฒนาแอปโน้มน้าว เอาต์พุตของโมเดล Generative AI ตัวอย่างเช่น เมื่อใช้ LLM คุณจะสร้าง ที่มีผลต่อน้ำเสียง รูปแบบ ความยาว และลักษณะอื่นๆ ของ คำตอบของโมเดล

Genkit ได้รับการออกแบบภายใต้พื้นที่ที่ข้อความแจ้งเป็นโค้ด คุณเขียนและ เก็บข้อความแจ้งในไฟล์ต้นฉบับ ติดตามการเปลี่ยนแปลงการแก้ไขโดยใช้เวอร์ชันเดียวกัน ระบบควบคุมที่คุณใช้สำหรับโค้ดของคุณ และคุณทำให้ใช้งานได้พร้อมกับโค้ด ที่เรียกโมเดล Generative AI ของคุณ

นักพัฒนาซอฟต์แวร์ส่วนใหญ่จะพบว่าไลบรารี Dotprompt ที่รวมอยู่ ตอบสนองความต้องการในการใช้พรอมต์ใน Genkit อย่างไรก็ตาม ก็ใช้กับพรอมต์โดยตรงได้เช่นกัน

การกำหนดพรอมต์

ฟังก์ชันตัวช่วยการสร้างของ Genkit จะยอมรับพรอมต์สตริงและคุณสามารถ ในลักษณะนี้สำหรับ Use Case ที่ตรงไปตรงมา

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)

ในกรณีส่วนใหญ่ คุณจะต้องป้อนข้อมูลที่ผู้ใช้ให้ไว้ในพรอมต์ คุณสามารถกำหนดฟังก์ชันให้แสดงผลในลักษณะต่อไปนี้

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)

อย่างไรก็ตาม ข้อบกพร่องอย่างหนึ่งของการกำหนดข้อความแจ้งในโค้ดของคุณคือ การทดสอบจำเป็นต้องมีการดำเนินการ ให้เป็นส่วนหนึ่งของขั้นตอน Genkit ได้ให้บริการอำนวยความสะดวกแก่การปรับปรุงอย่างรวดเร็ว เพื่อกำหนดพรอมต์ของคุณและเรียกใช้ใน UI สำหรับนักพัฒนาซอฟต์แวร์

Go

ใช้ฟังก์ชัน 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 ที่สามารถใช้กับโมเดลใดก็ได้ หรือคุณจะกำหนดสคีมาอินพุตก็ได้ สําหรับพรอมต์ ซึ่งเป็นสิ่งที่คล้ายกับสคีมาอินพุตสำหรับโฟลว์ พรอมต์ยังสามารถกำหนดตัวเลือกการกำหนดค่าโมเดลทั่วไปใดก็ได้ เช่น อุณหภูมิหรือจำนวนโทเค็นเอาต์พุต

คุณแสดงผลข้อความแจ้งนี้ไปยังคำขอโมเดลได้ด้วยฟังก์ชันตัวช่วยที่มีให้ ระบุตัวแปรอินพุตที่พรอมต์ต้องการ และโมเดลที่จะเรียกใช้

Go

request, err := helloPrompt.Render(context.Background(), HelloPromptInput{UserName: "Fred"})
if err != nil {
  return err
}
response, err := model.Generate(context.Background(), request, nil)

ใน UI สำหรับนักพัฒนาซอฟต์แวร์ Genkit คุณสามารถเรียกใช้พรอมต์ที่คุณกำหนดไว้ด้วยวิธีนี้ ซึ่งช่วยให้คุณสามารถทดสอบกับข้อความแจ้งแต่ละรายการภายนอกขอบเขตของ ขั้นตอนที่อาจใช้

ดอทพรอมพ์

Genkit มีไลบรารี Dotprompt ซึ่งจะเพิ่มส่วนเพิ่มเติม ฟังก์ชันการทำงานของข้อความแจ้ง

  • กำลังโหลดข้อความแจ้งจากไฟล์ต้นฉบับ .prompt ไฟล์
  • เทมเพลตที่ใช้แฮนเดิล
  • รองรับเทมเพลตพรอมต์แบบมัลติเทิร์นและเนื้อหามัลติมีเดีย
  • คำจำกัดความของสคีมาอินพุตและเอาต์พุตที่กระชับ
  • การใช้งานอย่างคล่องแคล่วกับ generate()