Firebase Genkit มีอินเทอร์เฟซที่ใช้งานง่ายสำหรับการสร้างเนื้อหาด้วย LLM
โมเดล
โมเดลใน Firebase Genkit คือไลบรารีและนามธรรมที่ให้สิทธิ์เข้าถึง LLM ของ Google และที่ไม่ใช่ของ Google ที่หลากหลาย
โมเดลมีเครื่องมือสำหรับความสามารถในการสังเกตเต็มรูปแบบและมาพร้อมกับเครื่องมือ จาก UI ของนักพัฒนาซอฟต์แวร์ Genkit ซึ่งคุณสามารถลองใช้โมเดลใดก็ได้โดยใช้ โมเดลวิ่ง
เมื่อทำงานกับโมเดลใน Genkit คุณต้องกำหนดค่าโมเดลที่คุณ ที่ต้องการร่วมงานด้วย ระบบปลั๊กอินกำหนดค่าโมเดล ใน ตัวอย่างนี้คุณกำลังกำหนดค่าปลั๊กอิน Vertex AI ซึ่งให้ Gemini
import {
"github.com/firebase/genkit/go/ai"
"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
}
หากต้องการใช้โมเดลที่ปลั๊กอินมีให้ คุณจำเป็นต้องมีการอ้างอิงไปยังโมเดลที่เฉพาะเจาะจง และเวอร์ชัน
model := vertexai.Model("gemini-1.5-flash")
รุ่นที่รองรับ
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 มีฟังก์ชันตัวช่วยง่ายๆ ในการสร้างเนื้อหาด้วยโมเดล
หากต้องการเรียกโมเดลเท่านั้น:
responseText, err := ai.GenerateText(ctx, model, ai.WithTextPrompt("Tell me a joke."))
if err != nil {
return err
}
fmt.Println(responseText)
คุณสามารถส่งตัวเลือกไปพร้อมกับการเรียกใช้โมเดลได้ ตัวเลือกที่รองรับ ขึ้นอยู่กับโมเดลและ API ของโมเดล
response, err := ai.Generate(ctx, model,
ai.WithTextPrompt("Tell me a joke about dogs."),
ai.WithConfig(ai.GenerationCommonConfig{
Temperature: 1.67,
StopSequences: []string{"cat"},
MaxOutputTokens: 3,
}))
คำตอบสตรีมมิง
Genkit รองรับการสตรีมคำตอบโมเดลเป็นส่วนย่อยๆ หากต้องการใช้สตรีมมิงแบบแยกส่วน
ส่งฟังก์ชัน Callback ไปยัง Generate()
:
response, err := ai.Generate(ctx, gemini15pro,
ai.WithTextPrompt("Tell a long story about robots and ninjas."),
// stream callback
ai.WithStreaming(
func(ctx context.Context, grc *ai.GenerateResponseChunk) error {
fmt.Printf("Chunk: %s\n", grc.Text())
return nil
}))
if err != nil {
return err
}
// You can also still get the full response.
fmt.Println(response.Text())
อินพุตในหลายโมดัล
หากโมเดลรองรับการป้อนข้อมูลแบบหลายโมดัล คุณจะส่งพรอมต์รูปภาพได้โดยทำดังนี้
imageBytes, err := os.ReadFile("img.jpg")
if err != nil {
return err
}
encodedImage := base64.StdEncoding.EncodeToString(imageBytes)
resp, err := ai.Generate(ctx, gemini15pro, ai.WithMessages(
ai.NewUserMessage(
ai.NewTextPart("Describe the following image."),
ai.NewMediaPart("", "data:image/jpeg;base64,"+encodedImage))))
รูปแบบที่แน่นอนของพรอมต์รูปภาพ (URL https
, URL gs
, data
URI) คือ
ขึ้นอยู่กับโมเดล
การเรียกใช้ฟังก์ชัน (เครื่องมือ)
โมเดล Genkit มีอินเทอร์เฟซสำหรับการเรียกใช้ฟังก์ชันสำหรับรุ่นที่รองรับ ได้
myJokeTool := ai.DefineTool(
"myJoke",
"useful when you need a joke to tell",
func(ctx context.Context, input *any) (string, error) {
return "haha Just kidding no joke! got you", nil
},
)
response, err := ai.Generate(ctx, gemini15pro,
ai.WithTextPrompt("Tell me a joke."),
ai.WithTools(myJokeTool))
ซึ่งจะเรียกใช้เครื่องมือโดยอัตโนมัติเพื่อดำเนินการตามข้อความแจ้งของผู้ใช้
กำลังบันทึกประวัติข้อความ
โมเดล Genkit รองรับการรักษาประวัติข้อความที่ส่งไปยังโมเดล และการตอบสนองด้วย ซึ่งจะนำไปใช้สร้างประสบการณ์แบบอินเทอร์แอกทีฟได้ เช่น แชทบ็อต
ในข้อความแจ้งแรกของเซสชัน "ประวัติ" คือสิ่งที่ผู้ใช้ถาม
history := []*ai.Message{{
Content: []*ai.Part{ai.NewTextPart(prompt)},
Role: ai.RoleUser,
}}
response, err := ai.Generate(context.Background(), gemini15pro, ai.WithMessages(history...))
เมื่อได้รับการตอบกลับ ให้เพิ่มคำตอบลงในประวัติดังนี้
history = append(history, response.Candidates[0].Message)
คุณสามารถทำให้ประวัตินี้ต่อเนื่องและเก็บไว้ในฐานข้อมูลหรือพื้นที่เก็บข้อมูลของเซสชันได้
สำหรับข้อความแจ้งของผู้ใช้ที่ตามมา ให้เพิ่มข้อความแจ้งในประวัติก่อนโทร
Generate()
:
history = append(history, &ai.Message{
Content: []*ai.Part{ai.NewTextPart(prompt)},
Role: ai.RoleUser,
})
response, err = ai.Generate(ctx, gemini15pro, ai.WithMessages(history...))
ถ้าโมเดลที่คุณใช้อยู่สนับสนุนบทบาทของระบบ คุณสามารถใช้ ประวัติเพื่อตั้งค่าข้อความระบบ
history = []*ai.Message{{
Content: []*ai.Part{ai.NewTextPart("Talk like a pirate.")},
Role: ai.RoleSystem,
}}