กำลังสร้างเนื้อหา

Firebase Genkit มีอินเทอร์เฟซที่ใช้งานง่ายสำหรับการสร้างเนื้อหาด้วย LLM

โมเดล

โมเดลใน Firebase Genkit คือไลบรารีและนามธรรมที่ให้สิทธิ์เข้าถึง LLM ของ Google และที่ไม่ใช่ของ Google ที่หลากหลาย

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

เมื่อทำงานกับโมเดลใน Genkit คุณต้องกำหนดค่าโมเดลที่คุณ ที่ต้องการร่วมงานด้วย ระบบปลั๊กอินกำหนดค่าโมเดล ใน ตัวอย่างนี้คุณกำลังกำหนดค่าปลั๊กอิน Vertex AI ซึ่งให้ Gemini

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 ให้การสนับสนุนโมเดลผ่านระบบปลั๊กอิน ปลั๊กอินต่อไปนี้ ได้รับการสนับสนุนอย่างเป็นทางการดังต่อไปนี้

ปลั๊กอิน โมเดล
Generative AI ของ Google Gemini Pro, Gemini Pro Vision
AI ของ Google Vertex 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

หากต้องการใช้สตรีมมิงแบบแยกส่วน ให้ส่งฟังก์ชัน Callback ไปยัง 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)

รูปแบบที่แน่นอนของพรอมต์รูปภาพ (URL https, URL 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,
  }}