Câu lệnh

Thao tác với câu lệnh là cách chính để bạn, với tư cách là một nhà phát triển ứng dụng, có tác động đến kết quả của các mô hình AI tạo sinh. Ví dụ: khi sử dụng LLM, bạn có thể tạo những câu lệnh có ảnh hưởng đến giọng điệu, định dạng, thời lượng và các đặc điểm khác của phản hồi của mô hình.

Genkit được thiết kế xung quanh tiền đề lời nhắc là mã. Bạn viết và duy trì lời nhắc trong tệp nguồn, theo dõi các thay đổi đối với các câu lệnh đó bằng cùng một phiên bản hệ thống kiểm soát mà bạn sử dụng cho mã của mình, đồng thời bạn triển khai chúng cùng với mã để gọi các mô hình AI tạo sinh của bạn.

Hầu hết các nhà phát triển sẽ thấy thư viện Dotprompt đi kèm đáp ứng nhu cầu của họ khi xử lý các câu lệnh trong Genkit. Tuy nhiên, phương án thay thế các phương pháp tiếp cận khác bằng cách làm việc trực tiếp với các câu lệnh.

Xác định câu lệnh

Các hàm trợ giúp tạo nội dung của Genkit chấp nhận lời nhắc dạng chuỗi và bạn có thể gọi mô hình theo cách này cho các trường hợp sử dụng đơn giản.

Tiến hành

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)

Trong hầu hết các trường hợp, bạn sẽ cần đưa một số thông tin đầu vào do người dùng cung cấp vào câu lệnh của mình. Bạn có thể xác định một hàm để kết xuất chúng như sau:

Tiến hành

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)

Tuy nhiên, một thiếu sót của việc xác định lời nhắc trong mã là hoạt động kiểm thử đòi hỏi phải thực thi chúng như một phần của luồng. Để tạo điều kiện lặp lại nhanh hơn, Genkit cung cấp một tiện ích để xác định lời nhắc của bạn và chạy chúng trong Giao diện người dùng dành cho nhà phát triển.

Tiến hành

Dùng hàm DefinePrompt để đăng ký câu lệnh của bạn bằng 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
  },
)

Thao tác nhắc xác định một hàm trả về GenerateRequest, có thể sử dụng với bất kỳ mô hình nào. Nếu muốn, bạn cũng có thể xác định một giản đồ đầu vào cho câu lệnh, vốn là giản đồ đầu vào cho một luồng. Lời nhắc cũng có thể xác định bất kỳ tuỳ chọn cấu hình mô hình phổ biến nào, chẳng hạn như nhiệt độ hoặc số lượng mã thông báo đầu ra.

Bạn có thể kết xuất lời nhắc này tới một yêu cầu mô hình bằng hàm trợ giúp được cung cấp. Cung cấp các biến đầu vào dự kiến theo câu lệnh và mô hình cần gọi.

Tiến hành

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

Trong giao diện người dùng dành cho nhà phát triển Genkit, bạn có thể chạy bất kỳ câu lệnh nào mà bạn đã xác định theo cách này. Việc này cho phép bạn thử nghiệm với từng lời nhắc riêng lẻ ngoài phạm vi mà chúng có thể được sử dụng.

Dấu chấm

Genkit bao gồm thư viện Dotprompt, thư viện này bổ sung thêm cho lời nhắc.

  • Đang tải lời nhắc từ .prompt tệp nguồn
  • Mẫu dựa trên tay lái
  • Hỗ trợ các mẫu câu lệnh nhiều lượt và nội dung đa phương tiện
  • Định nghĩa giản đồ đầu vào và đầu ra một cách súc tích
  • Sử dụng thành thạo generate()