正在產生內容

Firebase Genkit 提供簡單的介面,方便您透過大型語言模型生成內容。

模型

Firebase Genkit 中的模型是一種程式庫和抽象化機制, 是由多個 Google 和非 Google LLM

完整檢測模型的觀測能力,隨附工具 Genkit 開發人員使用者介面提供的整合工具,您可以使用 模型執行器

在 Genkit 中使用模型時,必須先設定要使用的模型, 以及要使用的專案模型設定是由外掛程式系統執行。於 這個範例需要設定 Vertex AI 外掛程式 我們來看評估分類模型成效時 的喚回度和精確度指標

Go

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
}

如要使用外掛程式提供的模型,您需要取得特定模型的參照 以及版本:

Go

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

支援模型

Genkit 透過外掛程式系統提供模型支援。下列外掛程式 的正式支援:

外掛程式 模型
Google 生成式 AI Gemini Pro、Gemini Pro Vision
Google Vertex AI Gemini Pro、Gemini Pro Vision、Gemini 1.5 Flash、Gemini 1.5 Pro、Imagen2
奧拉馬 包含 Gemma、Llama 2、Mistral 等多種本地模型

如需設定與使用資訊,請參閱每個外掛程式的說明文件。

如何產生內容

Genkit 提供簡單的輔助函式,方便你透過模型產生內容。

如要直接呼叫模型,請按照下列步驟操作:

Go

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)

您可以連同模型呼叫傳遞選項。支援的選項 需要完全仰賴模型及其 API

Go

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,
  },
}

串流回應

Genkit 支援透過分塊串流處理模型回應:

Go

如要使用區塊串流,請將回呼函式傳送至 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)

多模態輸入

如果模型支援多模態輸入,您可以傳送圖片提示:

Go

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)

圖片提示的格式 (https 網址、gs 網址、data URI) 是 會因模型而異

函式呼叫 (工具)

Genkit 模型提供函式呼叫介面,適用於支援 基礎架構

Go

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)

這個外掛程式會自動呼叫工具,以完成使用者提示。

正在錄製訊息記錄

Genkit 模型支援保留傳送至模型的訊息記錄 和回應中的回應。您可以藉此打造互動體驗,例如 聊天機器人

Go

工作階段的第一個提示訊息就是使用者提示

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)

當你收到回覆後,請將該回覆新增到記錄中:

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

您可以序列化這項記錄,並保存在資料庫或工作階段儲存空間中。 針對後續的使用者提示,請先將他們加入記錄,再撥打電話 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)

如果您使用的模型支援系統角色,您就可以使用初始值 記錄來設定系統訊息:

Go

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