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