Viết trình bổ trợ mô hình Genkit

Các trình bổ trợ mô hình của Genkit sẽ thêm một hoặc nhiều mô hình AI tạo sinh vào Genkit sổ đăng ký tên miền. Một mô hình đại diện cho bất kỳ mô hình tạo sinh nào có khả năng nhận làm đầu vào và tạo văn bản, nội dung nghe nhìn hoặc dữ liệu làm đầu ra.

Trước khi bắt đầu

Đọc trình bổ trợ Viết Genkit để biết thông tin về cách viết bất kỳ loại trình bổ trợ Genkit nào, bao gồm cả trình bổ trợ mẫu. Cụ thể, xin lưu ý rằng mỗi trình bổ trợ đều phải xuất một hàm Init. Đây là hàm mà người dùng dự kiến sẽ gọi trước khi sử dụng trình bổ trợ.

Định nghĩa mô hình

Nói chung, một trình bổ trợ mô hình sẽ thực hiện một hoặc nhiều lệnh gọi ai.DefineModel trong Hàm Init — một lần cho mỗi mô hình mà trình bổ trợ cung cấp một giao diện sang.

Một định nghĩa mô hình bao gồm ba thành phần:

  1. Siêu dữ liệu khai báo khả năng của mô hình.
  2. Một loại cấu hình có bất kỳ tham số cụ thể nào mà mô hình hỗ trợ.
  3. Một hàm tạo chấp nhận ai.GenerateRequest và trả về một ai.GenerateResponse, có thể là bằng cách sử dụng một mô hình AI để tạo ra đối tượng sau.

Nhìn chung, mã sẽ có dạng như sau:

type MyModelConfig struct {
	ai.GenerationCommonConfig
	CustomOption int
	AnotherCustomOption string
}
ai.DefineModel(
	providerID, "my-model",
	&ai.ModelMetadata{
		Label: "my-model",
		Supports: ai.ModelCapabilities{
			Multiturn:  true,  // Does the model support multi-turn chats?
			SystemRole: true,  // Does the model support syatem messages?
			Media:      false, // Can the model accept media input?
			Tools:      false, // Does the model support function calling (tools)?
		},
	},
	func(ctx context.Context,
		genRequest *ai.GenerateRequest,
		_ ai.ModelStreamingCallback,
	) (*ai.GenerateResponse, error) {
		// Verify that the request includes a configuration that conforms to
		// your schema .
		if _, ok := genRequest.Config.(MyModelConfig); !ok {
			return nil, fmt.Errorf("request config must be type MyModelConfig")
		}

		// Use your custom logic to convert Genkit's ai.GenerateRequest
		// into a form usable by the model's native API.
		apiRequest, err := apiRequestFromGenkitRequest(genRequest)
		if err != nil {
			return nil, err
		}

		// Send the request to the model API, using your own code or the
		// model API's client library.
		apiResponse, err := callModelAPI(apiRequest)
		if err != nil {
			return nil, err
		}

		// Use your custom logic to convert the model's response to Genkin's
		// ai.GenerateResponse.
		response, err := genResponseFromAPIResponse(apiResponse)
		if err != nil {
			return nil, err
		}

		return response, nil
	},
)

Khai báo khả năng của mô hình

Mỗi định nghĩa mô hình phải chứa, như một phần của siêu dữ liệu, Giá trị ai.ModelCapabilities khai báo những tính năng mà mô hình hỗ trợ. Genkit sử dụng thông tin này để xác định một số hành vi nhất định, chẳng hạn như xác minh liệu một số dữ liệu đầu vào có hợp lệ với mô hình hay không. Ví dụ: nếu mô hình không hỗ trợ tương tác nhiều lượt, thì sẽ xảy ra lỗi khi chuyển thông báo nhật ký.

Lưu ý rằng các nội dung khai báo này đề cập đến khả năng của mô hình như được cung cấp theo trình bổ trợ của mình, và không nhất thiết phải ánh xạ một với một đến khả năng của mô hình cơ bản và API mô hình. Ví dụ: ngay cả khi API mô hình không cung cấp một cách cụ thể để xác định thông báo hệ thống, trình bổ trợ của bạn vẫn có thể khai báo hỗ trợ cho vai trò hệ thống và triển khai dưới dạng logic đặc biệt chèn thông báo của hệ thống vào lời nhắc người dùng.

Xác định giản đồ cấu hình của mô hình

Để chỉ định các tuỳ chọn tạo mà một mô hình hỗ trợ, hãy xác định và xuất một loại cấu hình. Genkit có một loại ai.GenerationCommonConfig chứa các lựa chọn thường được các dịch vụ mô hình AI tạo sinh hỗ trợ. Bạn có thể nhúng hoặc sử dụng ngay.

Hàm tạo của bạn phải xác minh rằng yêu cầu chứa nội dung chính xác loại tùy chọn.

Thay đổi yêu cầu và phản hồi

Hàm tạo thực hiện công việc chính của trình bổ trợ mô hình Genkit: chuyển đổi ai.GenerateRequest từ định dạng phổ biến của Genkit thành định dạng được API của mô hình hỗ trợ, sau đó chuyển đổi phản hồi từ mô hình của bạn sang định dạng ai.GenerateResponse mà Genkit sử dụng.

Đôi khi, quá trình này có thể đòi hỏi việc xoa bóp hoặc thao tác với dữ liệu để xử lý mô hình hạn chế. Ví dụ: nếu mô hình của bạn vốn không hỗ trợ system , bạn có thể sẽ cần biến đổi thông báo trên hệ thống của lời nhắc thành mô hình người dùng cặp tin nhắn.

Xuất

Ngoài các tài nguyên mà tất cả trình bổ trợ phải xuất ra—một Init và loại Config – một trình bổ trợ mô hình cũng sẽ xuất sau:

  • Loại cấu hình tạo, như đã thảo luận trước đó.

  • Hàm Model trả về thông tin tham chiếu đến mô hình do trình bổ trợ xác định. Thông thường, điều này có thể đơn giản là:

    func Model(name string) *ai.Model {
        return ai.LookupModel(providerID, name)
    }
    
  • Không bắt buộc: Hàm DefineModel, cho phép người dùng xác định các mô hình plugin của bạn có thể cung cấp, nhưng bạn không tự động xác định. Có hai lý do chính khiến bạn nên cung cấp chức năng này:

    • Trình bổ trợ của bạn cung cấp quyền truy cập vào quá nhiều mô hình để thực tế đăng ký từng mô hình một. Ví dụ: trình bổ trợ Ollama có thể cung cấp quyền truy cập vào hàng chục các mô hình khác nhau, được bổ sung thường xuyên hơn. Vì lý do này, công cụ này không tự động xác định bất kỳ mô hình nào và thay vào đó yêu cầu người dùng gọi DefineModel cho mỗi mô hình mà họ muốn sử dụng.

    • Để giúp người dùng có thể sử dụng các mô hình mới được phát hành mà bạn có chưa được thêm vào trình bổ trợ của bạn.

    Hàm DefineModel của một trình bổ trợ thường là một giao diện người dùng của ai.DefineModel xác định hàm tạo, nhưng cho phép người dùng chỉ định tên mô hình và năng lực của mô hình.