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

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

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
}

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

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

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

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

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

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

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

const providerID = "yourplugin"

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

ปลั๊กอินทุกตัวควรกำหนดและส่งออกสัญลักษณ์ต่อไปนี้

  • ฟังก์ชัน Init() ที่มีการประกาศดังนี้

    func Init(ctx context.Context, cfg *Config) (err error)
    

    ละเว้นพารามิเตอร์ใดๆ ที่คุณไม่ได้ใช้ (เช่น คุณอาจไม่มี cfg หากปลั๊กอินไม่มีการกำหนดค่าสำหรับทั้งปลั๊กอิน ตัวเลือก)

    ในฟังก์ชันนี้ ให้ทำตามขั้นตอนการตั้งค่าที่ปลั๊กอินของคุณกำหนด สำหรับ ตัวอย่าง:

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

    หากเป็นไปได้ ทรัพยากรที่ได้จากปลั๊กอินของคุณไม่ควร ถือว่าผู้ใช้ได้ดำเนินการใดๆ นอกเหนือไปจากการโทรหา Init

    คุณควรกำหนดและส่งออกฟังก์ชันนี้แม้ว่าปลั๊กอินของคุณจะไม่จำเป็นต้องใช้ การเริ่มต้นใดๆ ในกรณีนี้ Init สามารถแสดงเพียงข้อผิดพลาด nil

  • ประเภทโครงสร้าง Config ประเภทนี้ควรรวมการกำหนดค่าทั้งหมดเอาไว้ ตัวเลือกที่ยอมรับโดย Init

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

    type Config struct {
    	ExampleAPIKey string
    }
    
    func Init(cfg *Config) (err error) {
    	apiKey := cfg.ExampleAPIKey
    	if apiKey == "" {
    		apiKey = os.Getenv("EXAMPLE_API_KEY")
    	}
    	if apiKey == "" {
    		return fmt.Errorf(`the Example plug-in requires you to specify an API
     key for the Example service, either by passing it to example.Init() or by
     setting the EXAMPLE_API_KEY environment variable`)
    	}
    
    	return nil
    }
    

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

ปลั๊กอินเดียวก็เปิดใช้งานสิ่งใหม่ๆ มากมายใน Genkit ได้ ตัวอย่างเช่น พารามิเตอร์ ปลั๊กอิน Vertex AI เปิดใช้งานโมเดลใหม่หลายรายการและเครื่องมือฝังได้

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

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

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

ปลั๊กอิน Telemetry

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

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

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

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

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