ความสามารถของ Firebase Genkit ได้รับการออกแบบมาเพื่อให้ขยายความสามารถด้วยปลั๊กอิน ปลั๊กอิน Genkit คือโมดูลที่กำหนดค่าได้ซึ่งสามารถจัดหาโมเดล เครื่องมือดึงข้อมูล ตัวจัดทําดัชนี พื้นที่เก็บข้อมูลการติดตาม และอื่นๆ คุณได้เห็นการทำงานของปลั๊กอินแล้วเพียงใช้ Genkit
import { genkit } from 'genkit';
import { vertexAI } from '@genkit-ai/vertexai';
const ai = genkit({
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
npm i --save-dev typescript
npx tsc --init
จากนั้นกําหนดและส่งออกปลั๊กอินจากจุดแรกเข้าหลัก ดังนี้
import { Genkit, z } from 'genkit';
import { GenkitPlugin, genkitPlugin } from 'genkit/plugin';
interface MyPluginOptions {
// add any plugin configuration here
}
export function myPlugin(options?: MyPluginOptions) {
return genkitPlugin('myPlugin', async (ai: Genkit) => {
ai.defineModel(...);
ai.defineEmbedder(...)
// ....
});
};
คำแนะนำเกี่ยวกับตัวเลือกปลั๊กอิน
โดยทั่วไปแล้ว ปลั๊กอินควรใช้อาร์กิวเมนต์ options
รายการเดียวที่มีการกำหนดค่าทั่วทั้งปลั๊กอินที่จำเป็นต่อการทำงาน สําหรับตัวเลือกปลั๊กอินที่ต้องใช้ค่าลับ เช่น คีย์ API คุณควรระบุทั้งตัวเลือกและตัวแปรสภาพแวดล้อมเริ่มต้นเพื่อกําหนดค่า ดังนี้
import { Genkit, z } from 'genkit';
import { GenkitPlugin, genkitPlugin } from 'genkit/plugin';
import { GenkitError } from '@genkit-ai/core';
interface MyPluginOptions {
apiKey?: string;
}
export function myPlugin(options?: MyPluginOptions) {
return genkitPlugin('myPlugin', async (ai: Genkit) => {
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.',
});
ai.defineModel(...);
ai.defineEmbedder(...)
// ....
});
};
การสร้างปลั๊กอิน
ปลั๊กอินเดียวสามารถเปิดใช้งานสิ่งใหม่ๆ หลายอย่างภายใน 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, GenkitPlugin } from 'genkit/plugin';
import { GenkitError } from '@genkit-ai/core';
import { GenerationCommonConfigSchema } from '@genkit-ai/ai/model';
import { simulateSystemPrompt } from '@genkit-ai/ai/model/middleware';
import { z } from 'genkit';
export function myPlugin(options?: MyPluginOptions) {
return genkitPlugin('my-plugin', async (ai: Genkit) => {
ai.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' });
การเผยแพร่ปลั๊กอิน
ปลั๊กอิน 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.
}