Đang tạo nội dung

Firebase Genkit cung cấp một giao diện dễ dàng để tạo nội dung bằng các mô hình ngôn ngữ lớn (LLM).

Mô hình

Các mô hình trong Firebase Genkit là các thư viện và thành phần trừu tượng cấp quyền truy cập vào nhiều LLM của Google và không phải của Google.

Các mô hình được đo lường đầy đủ để có thể quan sát và đi kèm với công cụ các tiện ích tích hợp do giao diện người dùng Nhà phát triển Genkit cung cấp -- bạn có thể thử bất kỳ mô hình nào sử dụng trình chạy mô hình.

Khi làm việc với các mô hình trong Genkit, trước tiên, bạn cần định cấu hình mô hình mình muốn hợp tác. Cấu hình mô hình do hệ thống trình bổ trợ thực hiện. Ngang bằng trong ví dụ này, bạn đang định cấu hình trình bổ trợ Vertex AI, trình bổ trợ này cung cấp các tính năng người mẫu.

Tiến hành

import "github.com/firebase/genkit/go/ai"
import "github.com/firebase/genkit/go/plugins/vertexai"
// Default to the value of GCLOUD_PROJECT for the project,
// and "us-central1" for the location.
// To specify these values directly, pass a vertexai.Config value to Init.
if err := vertexai.Init(ctx, nil); err != nil {
  return err
}

Để sử dụng các mô hình do trình bổ trợ cung cấp, bạn cần tham chiếu đến mô hình cụ thể và phiên bản:

Tiến hành

gemini15pro := vertexai.Model("gemini-1.5-pro")

Mô hình được hỗ trợ

Genkit hỗ trợ mô hình thông qua hệ thống trình bổ trợ. Các plugin sau được hỗ trợ chính thức:

Trình bổ trợ Mô hình
AI tạo sinh của Google Gemini Pro, Tầm nhìn Gemini Pro
Vertex AI của Google Gemini Pro, Gemini Pro Vision, Gemini 1.5 Flash, Gemini 1.5 Pro, Imagen2
Ollama Nhiều mô hình địa phương, trong đó có Gemma, Llama 2, Mistral, v.v.

Hãy xem tài liệu của mỗi trình bổ trợ để biết thông tin về cách thiết lập và sử dụng.

Cách tạo nội dung

Genkit cung cấp một chức năng trợ giúp đơn giản để tạo nội dung bằng các mô hình.

Để chỉ gọi mô hình:

Tiến hành

request := ai.GenerateRequest{Messages: []*ai.Message{
  {Content: []*ai.Part{ai.NewTextPart("Tell me a joke.")}},
}}
response, err := gemini15pro.Generate(ctx, &request, nil)
if err != nil {
  return err
}

responseText, err := response.Text()
if err != nil {
  return err
}
fmt.Println(responseText)

Bạn có thể truyền các tuỳ chọn cùng với lệnh gọi mô hình. Các lựa chọn được hỗ trợ phụ thuộc vào mô hình và API của mô hình đó.

Tiến hành

request := ai.GenerateRequest{
  Messages: []*ai.Message{
      {Content: []*ai.Part{ai.NewTextPart("Tell me a joke about dogs.")}},
  },
  Config: ai.GenerationCommonConfig{
      Temperature:     1.67,
      StopSequences:   []string{"abc"},
      MaxOutputTokens: 3,
  },
}

Hiện câu trả lời theo thời gian thực

Genkit hỗ trợ phân luồng phản hồi của mô hình:

Tiến hành

Để sử dụng tính năng truyền trực tuyến phân đoạn, hãy truyền một hàm callback đến Generate():

request := ai.GenerateRequest{Messages: []*ai.Message{
  {Content: []*ai.Part{ai.NewTextPart("Tell a long story about robots and ninjas.")}},
}}
response, err := gemini15pro.Generate(
  ctx,
  &request,
  func(ctx context.Context, grc *ai.GenerateResponseChunk) error {
      text, err := grc.Text()
      if err != nil {
          return err
      }
      fmt.Printf("Chunk: %s\n", text)
      return nil
  })
if err != nil {
  return err
}

// You can also still get the full response.
responseText, err := response.Text()
if err != nil {
  return err
}
fmt.Println(responseText)

Nhập đa phương thức

Nếu mô hình đó hỗ trợ phương thức nhập đa phương thức, bạn có thể truyền câu lệnh dạng hình ảnh theo cách sau:

Tiến hành

imageBytes, err := os.ReadFile("img.jpg")
if err != nil {
  return err
}
encodedImage := base64.StdEncoding.EncodeToString(imageBytes)

request := ai.GenerateRequest{Messages: []*ai.Message{
  {Content: []*ai.Part{
      ai.NewTextPart("Describe the following image."),
      ai.NewMediaPart("", "data:image/jpeg;base64,"+encodedImage),
  }},
}}
gemini15pro.Generate(ctx, &request, nil)

Định dạng chính xác của lời nhắc về hình ảnh (URL https, URL gs, URI data) là phụ thuộc vào mô hình.

Gọi hàm (công cụ)

Các mô hình Genkit cung cấp giao diện để gọi hàm, đối với những mô hình hỗ trợ nó.

Tiến hành

myJoke := &ai.ToolDefinition{
  Name:        "myJoke",
  Description: "useful when you need a joke to tell",
  InputSchema: make(map[string]any),
  OutputSchema: map[string]any{
      "joke": "string",
  },
}
ai.DefineTool(
  myJoke,
  nil,
  func(ctx context.Context, input map[string]any) (map[string]any, error) {
      return map[string]any{"joke": "haha Just kidding no joke! got you"}, nil
  },
)

request := ai.GenerateRequest{
  Messages: []*ai.Message{
      {Content: []*ai.Part{ai.NewTextPart("Tell me a joke.")},
          Role: ai.RoleUser},
  },
  Tools: []*ai.ToolDefinition{myJoke},
}
response, err := gemini15pro.Generate(ctx, &request, nil)

Thao tác này sẽ tự động gọi các công cụ để hoàn thành lời nhắc của người dùng.

Ghi lại nhật ký tin nhắn

Các mô hình Genkit hỗ trợ duy trì nhật ký tin nhắn được gửi đến mô hình và phản hồi của nó để bạn có thể sử dụng để tạo trải nghiệm tương tác, chẳng hạn như chatbot.

Tiến hành

Trong câu lệnh đầu tiên của một phiên hoạt động, "nhật ký" chỉ đơn giản là lời nhắc của người dùng:

history := []*ai.Message{{
  	Content: []*ai.Part{ai.NewTextPart(prompt)},
  	Role:    ai.RoleUser,
  }}

request := ai.GenerateRequest{Messages: history}
response, err := gemini15pro.Generate(context.Background(), &request, nil)

Khi bạn nhận được câu trả lời, hãy thêm câu trả lời đó vào nhật ký:

history = append(history, response.Candidates[0].Message)

Bạn có thể chuyển đổi tuần tự nhật ký này và lưu trữ trong cơ sở dữ liệu hoặc bộ nhớ phiên. Đối với các lời nhắc người dùng tiếp theo, hãy thêm họ vào nhật ký trước khi gọi Generate():

history = append(history, &ai.Message{
  Content: []*ai.Part{ai.NewTextPart(prompt)},
  Role:    ai.RoleUser,
})

request = ai.GenerateRequest{Messages: history}
response, err = gemini15pro.Generate(ctx, &request, nil)

Nếu mô hình bạn đang sử dụng hỗ trợ vai trò hệ thống, bạn có thể sử dụng tham số ban đầu để đặt thông báo của hệ thống:

Tiến hành

history = []*ai.Message{{
  	Content: []*ai.Part{ai.NewTextPart("Talk like a pirate.")},
  	Role:    ai.RoleSystem,
  }}