กำลังสร้างเนื้อหา

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());