การเขียนปลั๊กอิน Genkit

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

import (
    "github.com/firebase/genkit/go/ai"
    "github.com/firebase/genkit/go/genkit"
    "github.com/firebase/genkit/go/plugins/googlegenai"
    "github.com/firebase/genkit/go/plugins/server"
)
g, err := genkit.Init(ctx,
    ai.WithPlugins(
        &googlegenai.GoogleAI{APIKey: ...},
        &googlegenai.VertexAI{ProjectID: "my-project", Location: "us-central1"},
    ),
)

ปลั๊กอิน Vertex AI จะรับการกําหนดค่า (เช่น รหัสโปรเจ็กต์ Google Cloud ของผู้ใช้) และลงทะเบียนโมเดลใหม่ เครื่องมือฝัง และอื่นๆ อีกมากมายกับรีจิสทรี Genkit รีจิสทรีทำหน้าที่เป็นบริการค้นหาการดำเนินการที่มีชื่อที่รันไทม์ และขับเคลื่อน UI ในเครื่องของ Genkit เพื่อเรียกใช้และตรวจสอบโมเดลพรอมต์ และอื่นๆ

การสร้างปลั๊กอิน

ใน Go ปลั๊กอิน Genkit คือแพ็กเกจที่เป็นไปตามรูปแบบการเขียนโค้ดชุดเล็กๆ โมดูลเดียวอาจมีปลั๊กอินหลายรายการ

รหัสผู้ให้บริการ

ปลั๊กอินทุกรายการต้องมีสตริงตัวระบุที่ไม่ซ้ำกันซึ่งแยกความแตกต่างจากปลั๊กอินอื่นๆ Genkit ใช้ตัวระบุนี้เป็นเนมสเปซสําหรับทรัพยากรทั้งหมดที่ปลั๊กอินของคุณกําหนดเพื่อป้องกันไม่ให้ชื่อทับซ้อนกับปลั๊กอินอื่นๆ

เช่น หากปลั๊กอินมีรหัส yourplugin และมีโมเดลชื่อ text-generator ตัวระบุโมเดลแบบเต็มจะเป็น yourplugin/text-generator

คุณต้องส่งออกรหัสผู้ให้บริการนี้และควรกำหนดรหัสเพียงครั้งเดียวสำหรับปลั๊กอิน และใช้รหัสดังกล่าวอย่างสม่ำเสมอเมื่อฟังก์ชัน Genkit กำหนด

const providerID = "yourplugin"

การส่งออกมาตรฐาน

ปลั๊กอินทุกรายการควรกำหนดและส่งออกสัญลักษณ์ต่อไปนี้เพื่อให้เป็นไปตามอินเทอร์เฟซ genkit.Plugin

  • ประเภทสตรูคเจอร์ที่รวมตัวเลือกการกําหนดค่าทั้งหมดที่ปลั๊กอินยอมรับ

    สําหรับตัวเลือกปลั๊กอินที่เป็นค่าลับ เช่น คีย์ API คุณควรเสนอทั้งตัวเลือกการกําหนดค่าและตัวแปรสภาพแวดล้อมเริ่มต้นเพื่อกําหนดค่า ซึ่งจะช่วยให้ปลั๊กอินใช้ประโยชน์จากฟีเจอร์การจัดการข้อมูลลับที่ให้บริการโดยผู้ให้บริการโฮสติ้งหลายราย (เช่น Cloud Secret Manager ซึ่งคุณใช้กับ Cloud Run ได้) เช่น

    type MyPlugin struct {
        APIKey string
        // Other options you may allow to configure...
    }
    
  • เมธอด Name() ในโครงสร้างที่แสดงรหัสผู้ให้บริการ

  • เมธอด Init() ในโครงสร้างที่มีการประกาศดังต่อไปนี้

    func (m *MyPlugin) Init(ctx context.Context, g *genkit.Genkit) error
    

    ในฟังก์ชันนี้ ให้ทําตามขั้นตอนการตั้งค่าที่จําเป็นสําหรับปลั๊กอิน เช่น

    • ยืนยันว่ามีการระบุค่าการกําหนดค่าที่จําเป็นและกำหนดค่าเริ่มต้นให้กับการตั้งค่าที่ไม่บังคับที่ไม่ได้ระบุ
    • ยืนยันว่าตัวเลือกการกําหนดค่าที่ระบุใช้ได้ร่วมกัน
    • สร้างทรัพยากรที่แชร์ซึ่งพลิแกนส่วนที่เหลือต้องใช้ เช่น สร้างไคลเอ็นต์สําหรับบริการที่พลิแกนเข้าถึง

    ทรัพยากรที่ได้จากปลั๊กอินไม่ควรสมมติว่ามีการติดตั้งปลั๊กอินอื่นไว้ก่อนหน้าปลั๊กอินนี้

    ระบบจะเรียกใช้เมธอดนี้โดยอัตโนมัติระหว่าง genkit.Init() เมื่อผู้ใช้ส่งผ่านปลั๊กอินไปยังตัวเลือก WithPlugins()

การสร้างฟีเจอร์ปลั๊กอิน

ปลั๊กอินเดียวสามารถเปิดใช้งานสิ่งใหม่ๆ หลายอย่างภายใน Genkit ตัวอย่างเช่น ปลั๊กอิน Vertex AI จะเปิดใช้งานโมเดลใหม่หลายรายการ รวมถึงเครื่องมือฝัง

ปลั๊กอินโมเดล

ปลั๊กอินโมเดล Genkit จะเพิ่มโมเดล Generative AI อย่างน้อย 1 รายการลงในรีจิสทรี Genkit โมเดลแสดงถึงโมเดล Generative ที่สามารถรับพรอมต์เป็นอินพุตและสร้างข้อความ สื่อ หรือข้อมูลเป็นเอาต์พุต

ดูการเขียนปลั๊กอินรูปแบบ Genkit

ปลั๊กอินของ Telemetry

ปลั๊กอินการวัดและส่งข้อมูลทางไกลของ Genkit จะกำหนดค่าเครื่องมือวัด OpenTelemetry ของ Genkit เพื่อส่งออกร่องรอย เมตริก และบันทึกไปยังเครื่องมือตรวจสอบหรือการแสดงภาพ

ดูการเขียนปลั๊กอินการวัดและส่งข้อมูลทางไกลของ Genkit

การเผยแพร่ปลั๊กอิน

ปลั๊กอิน Genkit สามารถเผยแพร่เป็นแพ็กเกจ Go ปกติได้ หากต้องการเพิ่มความค้นพบได้ แพ็กเกจของคุณควรมี genkit อยู่ในชื่อเพื่อให้ผู้ใช้ค้นพบแพ็กเกจได้ด้วยการค้นหาง่ายๆ ใน pkg.go.dev ตัวเลือกต่อไปนี้เป็นตัวเลือกที่ดี

  • github.com/yourorg/genkit-plugins/servicename
  • github.com/yourorg/your-repo/genkit/servicename