ความสามารถของ Firebase Genkit ออกแบบมาเพื่อเสริมด้วยปลั๊กอิน ปลั๊กอิน Genkit เป็นโมดูลที่กำหนดค่าได้ ซึ่งสามารถจัดหาโมเดล รีทรีฟเวอร์ ตัวจัดทำดัชนี จัดเก็บการติดตาม และอีกมากมาย คุณได้เห็นปลั๊กอินใน ดำเนินการได้ง่ายๆ โดยใช้ Genkit:
import { configureGenkit } from '@genkit-ai/core';
import { vertexAI } from '@genkit-ai/vertexai';
configureGenkit({
plugins: [vertexAI({ projectId: 'my-project' })],
});
ปลั๊กอิน Vertex AI รับการกำหนดค่า (เช่น Google Cloud ของผู้ใช้ รหัสโปรเจ็กต์) และลงทะเบียนโมเดลใหม่ เครื่องมือฝัง และอื่นๆ ที่หลากหลายด้วย รีจิสทรี Genkit รีจิสทรีเป็นตัวขับเคลื่อน UI ในเครื่องของ Genkit สำหรับการเรียกใช้และ ตรวจสอบโมเดล พรอมต์ และอื่นๆ รวมถึงทำหน้าที่เป็นบริการค้นหาสำหรับ การดำเนินการที่มีชื่อขณะรันไทม์
การสร้างปลั๊กอิน
หากต้องการสร้างปลั๊กอิน โดยทั่วไปคุณจะต้องสร้างแพ็กเกจ NPM ใหม่ดังนี้
mkdir genkitx-my-plugin
cd genkitx-my-plugin
npm init -y
npm i --save @genkit-ai/core
npm i --save-dev typescript
npx tsc --init
จากนั้น กำหนดและส่งออกปลั๊กอินจากจุดแรกเข้าหลัก ดังนี้
import { genkitPlugin } from '@genkit-ai/core';
interface MyPluginOptions {
// add any plugin configuration here
}
export const myPlugin = genkitPlugin(
'my-plugin',
async (options: MyPluginOptions) => {
// initialize your plugin here...
}
);
คำแนะนำเกี่ยวกับตัวเลือกปลั๊กอิน
โดยทั่วไป ปลั๊กอินของคุณควรใช้อาร์กิวเมนต์ options
เพียงรายการเดียวที่มี
การกำหนดค่าทั้งปลั๊กอินที่จำเป็นต่อการทำงาน สำหรับตัวเลือกปลั๊กอินที่
ต้องมีค่าข้อมูลลับ เช่น คีย์ API คุณควรเสนอทั้งตัวเลือกและ
ตัวแปรสภาพแวดล้อมเริ่มต้นที่จะกำหนดค่า
import { genkitPlugin, GenkitError } from '@genkit-ai/core';
interface MyPluginOptions {
apiKey?: string;
}
export const myPlugin = genkitPlugin(
'my-plugin',
async (options: MyPluginOptions) => {
const apiKey = options.apiKey || process.env.MY_PLUGIN_API_KEY;
if (!apiKey)
throw new GenkitError({
source: 'my-plugin',
status: 'INVALID_ARGUMENT',
message:
'Must supply either `options.apiKey` or set `MY_PLUGIN_API_KEY` environment variable.',
});
// ... continue initialization
}
);
กำลังสร้างปลั๊กอิน
ปลั๊กอินเดียวก็เปิดใช้งานสิ่งใหม่ๆ มากมายใน Genkit ได้ เช่น ปลั๊กอิน Vertex AI จะเปิดใช้งานโมเดลใหม่ๆ หลายรูปแบบรวมถึงตัวฝัง
ปลั๊กอินโมเดล
ปลั๊กอินโมเดล Genkit จะเพิ่มโมเดล Generative AI อย่างน้อย 1 รายการลงในรีจิสทรี Genkit โมเดลแสดงถึง Generative
โมเดลที่สามารถรับพรอมต์เป็นอินพุตและสร้างข้อความ สื่อ หรือข้อมูลเป็นเอาต์พุต
โดยทั่วไป ปลั๊กอินโมเดลจะทำการเรียก defineModel
อย่างน้อย 1 ครั้งในฟังก์ชันการเริ่มต้น
โดยทั่วไปโมเดลที่กำหนดเองจะมีองค์ประกอบ 3 อย่าง ได้แก่
- ข้อมูลเมตาที่ระบุความสามารถของโมเดล
- สคีมาการกําหนดค่าซึ่งมีพารามิเตอร์เฉพาะที่โมเดลรองรับ
- ฟังก์ชันที่ใช้งานโมเดลที่ยอมรับ
GenerateRequest
และ ส่งคืนGenerateResponse
หากต้องการสร้างปลั๊กอินโมเดล คุณจะต้องใช้แพ็กเกจ @genkit-ai/ai
npm i --save @genkit-ai/ai
ในระดับสูง ปลั๊กอินโมเดลอาจมีลักษณะดังนี้
import { genkitPlugin, GenkitError } from '@genkit-ai/core';
import { defineModel, GenerationCommonConfigSchema } from '@genkit-ai/ai/model';
import { simulateSystemPrompt } from '@genkit-ai/ai/model/middleware';
import { z } from 'zod';
export const myPlugin = genkitPlugin('my-plugin', async (options: {apiKey?: string}) => {
defineModel({
// be sure to include your plugin as a provider prefix
name: 'my-plugin/my-model',
// label for your model as shown in Genkit Developer UI
label: 'My Awesome Model',
// optional list of supported versions of your model
versions: ['my-model-001', 'my-model-001'],
// model support attributes
supports: {
multiturn: true, // true if your model supports conversations
media: true, // true if your model supports multimodal input
tools: true, // true if your model supports tool/function calling
systemRole: true, // true if your model supports the system role
output: ['text', 'media', 'json'], // types of output your model supports
},
// Zod schema for your model's custom configuration
configSchema: GenerationCommonConfigSchema.extend({
safetySettings: z.object({...}),
}),
// list of middleware for your model to use
use: [simulateSystemPrompt()]
}, async request => {
const myModelRequest = toMyModelRequest(request);
const myModelResponse = await myModelApi(myModelRequest);
return toGenerateResponse(myModelResponse);
});
});
การเปลี่ยนแปลงคำขอและการตอบกลับ
การทำงานหลักของปลั๊กอินโมเดล Genkit คือการเปลี่ยนแปลง
GenerateRequest
จากรูปแบบทั่วไปของ Genkit เป็นรูปแบบที่ได้รับการยอมรับ
และรองรับโดย API ของโมเดล จากนั้นจะเปลี่ยนรูปแบบการตอบสนองจาก
เป็นรูปแบบ GenerateResponseData
ที่ Genkit ใช้งาน
ในบางครั้ง วิธีนี้อาจต้องใช้การนวดหรือจัดการข้อมูลเพื่อหลีกเลี่ยงข้อจำกัดของโมเดล เช่น หากโมเดลของคุณไม่รองรับข้อความ system
ตั้งแต่แรก คุณอาจต้องแปลงข้อความของระบบของข้อความแจ้งเป็นคู่ข้อความผู้ใช้/โมเดล
การอ้างอิงโมเดล
เมื่อลงทะเบียนโมเดลโดยใช้ defineModel
แล้ว โมเดลนั้นจะพร้อมใช้งานเสมอเมื่อ
ขอตามชื่อ แต่หากต้องการปรับปรุงการพิมพ์และการเติมข้อความอัตโนมัติ IDE คุณสามารถ
ส่งออกการอ้างอิงโมเดลจากแพ็กเกจที่มีเฉพาะข้อมูลเมตาสำหรับ
แต่ไม่นำไปใช้:
import { modelRef } from "@genkit-ai/ai/model";
export myModelRef = modelRef({
name: "my-plugin/my-model",
configSchema: MyConfigSchema,
info: {
// ... model-specific info
},
})
เมื่อเรียก generate()
คุณสามารถใช้การอ้างอิงโมเดลและชื่อรูปแบบสตริงแทนกันได้ ดังนี้
import { myModelRef } from 'genkitx-my-plugin';
import { generate } from '@genkit-ai/ai';
generate({ model: myModelRef });
// is equivalent to
generate({ model: 'my-plugin/my-model' });
ปลั๊กอิน Telemetry
ดูการเขียนปลั๊กอิน Genkit Telemetry
การเผยแพร่ปลั๊กอิน
ปลั๊กอิน Genkit เผยแพร่เป็นแพ็กเกจ NPM ปกติได้ เพื่อเพิ่ม
การค้นพบได้ของเนื้อหาและเพิ่มความสอดคล้องสูงสุด ควรตั้งชื่อแพ็กเกจของคุณ
genkitx-{name}
เพื่อระบุว่าเป็นปลั๊กอิน Genkit และคุณควรระบุเป็น
keywords
ต่อไปนี้ใน package.json
ของคุณตามที่เกี่ยวข้องกับ
ปลั๊กอิน:
genkit-plugin
: ใส่คีย์เวิร์ดนี้ไว้ในแพ็กเกจเสมอเพื่อระบุว่าเป็นปลั๊กอิน Genkitgenkit-model
: รวมคีย์เวิร์ดนี้หากแพ็กเกจของคุณมีรูปแบบใดๆgenkit-retriever
: ใส่คีย์เวิร์ดนี้หากแพ็กเกจของคุณระบุรีทรีฟเวอร์genkit-indexer
: ใส่คีย์เวิร์ดนี้หากแพ็กเกจของคุณเป็นผู้กำหนดดัชนีgenkit-embedder
: ใส่คีย์เวิร์ดนี้หากแพ็กเกจของคุณเป็นผู้กำหนดดัชนีgenkit-tracestore
: ใส่คีย์เวิร์ดนี้หากแพ็กเกจของคุณระบุร้านค้าการติดตามgenkit-statestore
: ใส่คีย์เวิร์ดนี้หากแพ็กเกจของคุณระบุร้านค้าในรัฐใดเลยgenkit-telemetry
: ใส่คีย์เวิร์ดนี้หากแพ็กเกจของคุณระบุผู้ให้บริการการวัดและส่งข้อมูลทางไกลgenkit-deploy
: ใส่คีย์เวิร์ดนี้หากแพ็กเกจของคุณมีผู้ช่วยในการทำให้แอป Genkit ใช้งานได้สำหรับผู้ให้บริการระบบคลาวด์genkit-flow
: ใส่คีย์เวิร์ดนี้หากแพ็กเกจของคุณช่วยเพิ่มประสิทธิภาพให้กับขั้นตอน Genkit
ปลั๊กอินที่มีรีทรีฟเวอร์ เครื่องมือฝัง และโมเดลอาจมี package.json
ที่มีลักษณะดังนี้
{
"name": "genkitx-my-plugin",
"keywords": ["genkit-plugin", "genkit-retriever", "genkit-embedder", "genkit-model"],
// ... dependencies etc.
}