Firebase Genkit มีอินเทอร์เฟซที่ใช้งานง่ายสำหรับการสร้างเนื้อหาด้วย LLM
โมเดล
โมเดลใน Firebase Genkit คือไลบรารีและนามธรรมที่ให้สิทธิ์เข้าถึง LLM ของ Google และที่ไม่ใช่ของ Google ที่หลากหลาย
โมเดลมีเครื่องมือสำหรับความสามารถในการสังเกตเต็มรูปแบบและมาพร้อมกับเครื่องมือ จาก UI ของนักพัฒนาซอฟต์แวร์ Genkit ซึ่งคุณสามารถลองใช้โมเดลใดก็ได้โดยใช้ โมเดลวิ่ง
เมื่อทำงานกับโมเดลใน Genkit คุณต้องกำหนดค่าโมเดลที่คุณ ที่ต้องการร่วมงานด้วย ระบบปลั๊กอินกำหนดค่าโมเดล ใน ตัวอย่างนี้คุณกำลังกำหนดค่าปลั๊กอิน Vertex AI ซึ่งให้ Gemini
import { configureGenkit } from '@genkit-ai/core';
import { firebase } from '@genkit-ai/firebase';
import { vertexAI } from '@genkit-ai/vertexai';
configureGenkit({
plugins: [vertexAI()],
});
หากต้องการใช้โมเดลที่ปลั๊กอินมีให้ คุณสามารถอ้างอิงโมเดลตามชื่อ (เช่น
'vertexai/gemini-1.5-flash'
) หรือปลั๊กอินบางอย่างจะส่งออกออบเจ็กต์โมเดลอ้างอิงที่
จะให้ข้อมูลเพิ่มเติมประเภทเกี่ยวกับความสามารถและตัวเลือกของโมเดล
import { gemini15Flash } from '@genkit-ai/vertexai';
รุ่นที่รองรับ
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 และอีกมากมาย |
ดูเอกสารของปลั๊กอินแต่ละรายการเพื่อดูข้อมูลการตั้งค่าและการใช้งาน นอกจากนี้ยังมี
มีโมเดลต่างๆ ที่ได้รับการสนับสนุนโดยชุมชน ซึ่งคุณสามารถค้นพบได้โดย
ค้นหาแพ็กเกจที่ขึ้นต้นด้วย genkitx-
ใน npmjs.org
วิธีสร้างเนื้อหา
generate
เป็นฟังก์ชันตัวช่วยสำหรับการทำงานกับโมเดล
หากต้องการเรียกโมเดลเท่านั้น:
import { generate } from '@genkit-ai/ai';
import { gemini15Flash } from '@genkit-ai/vertexai';
(async () => {
const llmResponse = await generate({
model: gemini15Flash,
prompt: 'Tell me a joke.',
});
console.log(await llmResponse.text());
})();
คุณสามารถส่งตัวเลือกโมเดลต่างๆ สำหรับโมเดลนั้น รวมถึงการระบุ โมเดลที่กำหนดเองสำหรับ LLM เฉพาะ
const response = await generate({
model: gemini15Flash,
prompt,
config: {
temperature: 1,
stopSequences: ['abc'],
},
});
หากโมเดลรองรับการป้อนข้อมูลหลายรูปแบบ คุณสามารถส่งรูปภาพเป็นอินพุตได้ดังนี้
const result = await generate({
model: gemini15Flash,
prompt: [
{ text: 'describe the following image:' },
{ media: { url: imageUrl, contentType: 'image/jpeg' } },
],
});
หรือจากไฟล์ในเครื่อง:
const result = await generate({
model: gemini15Flash,
prompt: [
{ text: 'describe the following image:' },
{
data: {
url: fs.readFileSync(__dirname + '/image.jpeg', {
encoding: 'base64',
flag: 'r',
}),
contentType: 'image/jpeg',
},
},
],
});
การเรียกใช้เครื่องมือและฟังก์ชัน
Model
ยังรองรับเครื่องมือและการเรียกใช้ฟังก์ชันด้วย การรองรับเครื่องมือขึ้นอยู่กับ
รุ่นที่เจาะจง
const myTool = action(
{
name: 'myJoke',
description: 'useful when you need a joke to tell.',
inputSchema: z.object({ subject: z.string() }),
outputSchema: z.string(),
},
async (input) => 'haha Just kidding no joke! got you'
);
const llmResponse = await generate({
model: gemini15Flash,
prompt: 'Tell me a joke.',
tools: [myTool],
config: {
temperature: 0.5,
},
});
ซึ่งจะเรียกใช้เครื่องมือโดยอัตโนมัติเพื่อดำเนินการตามข้อความแจ้งของผู้ใช้
คุณระบุ returnToolRequests: true
เพื่อควบคุมการเรียกใช้เครื่องมือด้วยตนเองได้
const llmResponse = await generate({
model: gemini15Flash,
prompt: 'Tell me a joke.',
tools: [myTool],
returnToolRequests: true,
config: {
temperature: 0.5,
},
});
กำลังเพิ่มบริบทรีทรีฟเวอร์
คุณสามารถส่งเอกสารจากรีทรีฟเวอร์ไปยัง generate
โดยตรงเพื่อส่ง
พื้นฐานของบริบท:
const docs = await companyPolicyRetriever({ query: question });
await generate({
model: gemini15Flash,
prompt: `Answer using the available context from company policy: ${question}`,
context: docs,
});
บริบทของเอกสารจะต่อท้ายเนื้อหาของข้อความแจ้งโดยอัตโนมัติ ที่ส่งไปยังโมเดล
กำลังบันทึกประวัติข้อความ
โมเดล Genkit รองรับการรักษาประวัติข้อความที่ส่งไปยังโมเดล และการตอบสนองด้วย ซึ่งจะนำไปใช้สร้างประสบการณ์แบบอินเทอร์แอกทีฟได้ เช่น แชทบ็อต
หากต้องการสร้างประวัติข้อความจากการตอบกลับโมเดล ให้เรียกใช้ toHistory()
วิธีการ:
let response = await generate({
model: gemini15Flash,
prompt: "How do you say 'dog' in French?",
});
let history = response.toHistory();
คุณสามารถทำให้ประวัตินี้ต่อเนื่องและเก็บไว้ในฐานข้อมูลหรือพื้นที่เก็บข้อมูลของเซสชันได้
จากนั้นส่งประวัติพร้อมกับข้อความแจ้งเกี่ยวกับการโทรในอนาคตไปยัง generate()
response = await generate({
model: gemini15Flash,
prompt: 'How about in Spanish?',
history,
});
history = response.toHistory();
หากโมเดลที่คุณใช้อยู่รองรับบทบาท system
คุณสามารถใช้ค่าเริ่มต้น
ประวัติเพื่อตั้งค่าข้อความระบบ
let history: MessageData[] = [
{ role: 'system', content: [{ text: 'Talk like a pirate.' }] },
];
let response = await generate({
model: gemini15Flash,
prompt: "How do you say 'dog' in French?",
history,
});
history = response.toHistory();
คำตอบสตรีมมิง
Genkit รองรับการสตรีมคำตอบโมเดลเป็นส่วนย่อยๆ ผ่านเมธอด generateStream()
:
// import { generateStream } from '@genkit-ai/ai';
const { response, stream } = await generateStream({
model: gemini15Flash,
prompt: 'Tell a long story about robots and ninjas.',
});
for await (const chunk of stream()) {
console.log(chunk.text());
}
// you can also await the full response
console.log((await response()).text());