Membuat konten

Firebase Genkit menyediakan antarmuka yang mudah untuk menghasilkan konten dengan LLM.

Model

Model di Firebase Genkit adalah library dan abstraksi yang menyediakan akses ke berbagai LLM Google dan non-Google.

Model sepenuhnya diinstrumentasikan untuk kemampuan observasi dan dilengkapi dengan integrasi alat yang disediakan oleh UI Developer Genkit. Anda dapat mencoba model apa pun menggunakan runner model.

Saat menggunakan model di Genkit, Anda harus mengonfigurasi model yang ingin digunakan terlebih dahulu. Konfigurasi model dilakukan oleh sistem plugin. Dalam contoh ini, Anda mengonfigurasi plugin Vertex AI, yang menyediakan model Gemini.

import { configureGenkit } from '@genkit-ai/core';
import { firebase } from '@genkit-ai/firebase';
import { vertexAI } from '@genkit-ai/vertexai';

configureGenkit({
  plugins: [vertexAI()],
});

Untuk menggunakan model yang disediakan oleh plugin, Anda dapat merujuknya dengan nama (misalnya, 'vertexai/gemini-1.0-pro') atau beberapa objek referensi model ekspor plugin yang memberikan info jenis tambahan tentang kemampuan dan opsi model.

import { geminiPro } from '@genkit-ai/vertexai';

Model yang didukung

Genkit memberikan dukungan model melalui sistem pluginnya. Plugin berikut didukung secara resmi:

Pengaya Model
AI Generatif Google Gemini Pro, Gemini Pro Vision
Vertex AI Google Gemini Pro, Gemini Pro Vision, Gemini 1.5 Flash, Gemini 1.5 Pro, Imagen2
Ollama Banyak model lokal, termasuk Gemma, Llama 2, Mistral, dan banyak lagi

Lihat dokumen setiap plugin untuk mengetahui informasi penyiapan dan penggunaan.

Cara membuat konten

generate adalah fungsi bantuan untuk menggunakan model.

Untuk memanggil model saja:

import { generate } from '@genkit-ai/ai';
import { geminiPro } from '@genkit-ai/vertexai';

(async () => {
  const llmResponse = await generate({
    model: geminiPro,
    prompt: 'Tell me a joke.',
  });

  console.log(await llmResponse.text());
})();

Anda dapat meneruskan berbagai opsi model untuk model tersebut, termasuk menentukan model kustom untuk LLM tertentu.

const response = await generate({
  model: geminiPro,
  prompt,
  config: {
    temperature: 1,
    stopSequences: ['abc'],
  },
});

Jika model mendukung input multimodal, Anda dapat meneruskan gambar sebagai input:

const result = await generate({
  model: geminiProVision,
  prompt: [
    { text: 'describe the following image:' },
    { media: { url: imageUrl, contentType: 'image/jpeg' } },
  ],
});

Atau dari file lokal:

const result = await generate({
  model: geminiProVision,
  prompt: [
    { text: 'describe the following image:' },
    {
      data: {
        url: fs.readFileSync(__dirname + '/image.jpeg', {
          encoding: 'base64',
          flag: 'r',
        }),
        contentType: 'image/jpeg',
      },
    },
  ],
});

Model juga mendukung alat dan panggilan fungsi. Dukungan alat bergantung pada model tertentu.

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: geminiPro,
  prompt: 'Tell me a joke.',
  tools: [myTool],
  config: {
    temperature: 0.5,
  },
});

Tindakan ini akan otomatis memanggil alat untuk memenuhi perintah pengguna.

Anda dapat menentukan returnToolRequests: true untuk kontrol manual terhadap panggilan alat.

const llmResponse = await generate({
  model: geminiPro,
  prompt: 'Tell me a joke.',
  tools: [myTool],
  returnToolRequests: true,
  config: {
    temperature: 0.5,
  },
});

Anda juga dapat melakukan streaming output dari model yang mendukungnya:

await generate({
  model: geminiPro,
  prompt: 'Tell me a very long joke.',
  streamingCallback: (chunk) => {
    console.log(chunk);
  },
});

Menambahkan konteks retriever

Dokumen dari retriever dapat diteruskan langsung ke generate untuk memberikan konteks grounding:

const docs = await companyPolicyRetriever({ query: question });

await generate({
  model: geminiPro,
  prompt: `Answer using the available context from company policy: ${question}`,
  context: docs,
});

Konteks dokumen otomatis ditambahkan ke konten perintah yang dikirim ke model.

Merekam histori pesan

Model Genkit mendukung penyimpanan histori pesan yang dikirim ke model dan responsnya, yang dapat Anda gunakan untuk membangun pengalaman interaktif, seperti chatbot.

Untuk menghasilkan histori pesan dari respons model, panggil metode toHistory():

let response = await generate({
  model: geminiPro,
  prompt: "How do you say 'dog' in French?",
});
let history = response.toHistory();

Anda dapat membuat serialisasi histori ini dan mempertahankannya dalam penyimpanan database atau sesi. Lalu, teruskan histori dengan perintah pada panggilan mendatang ke generate():

response = await generate({
  model: geminiPro,
  prompt: 'How about in Spanish?',
  history,
});
history = response.toHistory();

Jika model yang Anda gunakan mendukung peran system, Anda dapat menggunakan histori awal untuk menetapkan pesan sistem:

let history: MessageData[] = [
  { role: 'system', content: [{ text: 'Talk like a pirate.' }] },
];
let response = await generate({
  model: geminiPro,
  prompt: "How do you say 'dog' in French?",
  history,
});
history = response.toHistory();

Respons aliran data

Genkit mendukung streaming potongan respons model melalui metode generateStream():

// import { generateStream } from '@genkit-ai/ai';
const { response, stream } = await generateStream({
  model: geminiPro,
  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());