Menghasilkan konten

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

Model

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

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

Saat menangani model di Genkit, Anda harus terlebih dahulu mengonfigurasi model yang ingin Anda gunakan. Konfigurasi model dilakukan oleh sistem plugin. Dalam beberapa 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 berdasarkan nama (mis. 'vertexai/gemini-1.5-flash') atau beberapa objek referensi model ekspor plugin yang memberikan info jenis tambahan tentang opsi dan kemampuan model.

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

Model yang didukung

Genkit menyediakan dukungan model melalui sistem plugin-nya. Plugin berikut ini didukung secara resmi:

Plugin 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 lainnya

Lihat dokumentasi setiap plugin untuk mengetahui informasi terkait penyiapan dan penggunaan. Ada juga berbagai model yang didukung komunitas yang dapat Anda temukan dengan menelusuri paket yang dimulai dengan genkitx- di npmjs.org.

Cara membuat konten

generate adalah fungsi bantuan untuk menangani model.

Untuk hanya memanggil model:

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

Anda bisa meneruskan berbagai opsi model untuk model tersebut, termasuk menentukan khusus untuk LLM tertentu.

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

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

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

Atau dari file lokal:

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',
      },
    },
  ],
});

Panggilan alat dan fungsi

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

Tindakan ini akan secara otomatis memanggil alat untuk memenuhi prompt pengguna.

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

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

Menambahkan konteks retriever

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

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

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

Konteks dokumen otomatis ditambahkan ke konten perintah dikirim ke model.

Mencatat histori pesan

Model genkit mendukung pemeliharaan 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 toHistory() berikut:

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

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

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

Jika model yang Anda gunakan mendukung peran system, Anda dapat menggunakan untuk menyetel pesan sistem:

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

Respons aliran data

Genkit mendukung streaming respons model potongan melalui metode 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());