İçerik oluşturuluyor

Firebase Genkit, LLM'lerle içerik oluşturmak için kolay bir arayüz sağlar.

Modeller

Firebase Genkit'teki modeller, çeşitli Google ve Google dışı LLM'ler.

Modeller gözlemlenebilirlik için eksiksiz donanıma sahiptir ve çeşitli aletlerle birlikte gelir entegrasyonları entegre edebilirsiniz. Herhangi bir modeli rolünüzün ne olduğunu tartışacağız.

Genkit'te modellerle çalışırken öncelikle oluşturduğunuz modeli yapılandırmanız gerekir. tercih edebilirsiniz. Model yapılandırma, eklenti sistemi tarafından gerçekleştirilir. İçinde Bu örnekte, Gemini'ın yapay zekayı kullanmasını sağlayan Vertex AI eklentisini modeller.

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

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

Eklenti tarafından sağlanan modelleri kullanmak için modellere adlarıyla (ör. 'vertexai/gemini-1.5-flash') veya bazı eklentiler modele referans veren nesneleri dışa aktarır. model özellikleri ve seçenekleri hakkında ek tür bilgisi sağlama.

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

Desteklenen modeller

Genkit, eklenti sistemi aracılığıyla model desteği sağlar. Aşağıdaki eklentiler resmi olarak desteklenmektedir:

Eklenti Modeller
Google Üretken Yapay Zeka Gemini Pro, Gemini Pro, Vizyon
Google Vertex Yapay Zeka Gemini Pro, Gemini Pro Vision, Gemini 1.5 Flash, Gemini 1.5 Pro, Imagen2
Ollama Gemma, Llama 2, Mistral gibi birçok yerel model ve daha fazlası

Kurulum ve kullanım bilgileri için her eklentinin dokümanlarına bakın. Bir de şu var: keşfedebileceğiniz ve topluluk tarafından desteklenen çok çeşitli modelleri npmjs.org'da genkitx- ile başlayan paketler aranıyor.

İçerik oluşturma

generate, modellerle çalışırken yardımcı bir işlevdir.

Yalnızca modeli çağırmak için:

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

Bu model için çeşitli model seçeneklerini aktarabilirsiniz. Bu seçenekler arasında, özel model oluşturabilirsiniz.

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

Model çok modlu girişi destekliyorsa görüntüleri giriş olarak aktarabilirsiniz:

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

Alternatif olarak, yerel bir dosyadan:

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

Araç ve işlev çağırma

Model, araçları ve işlev çağrısını da destekler. Araç desteği, modeller.

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

Bu komut, kullanıcı istemini yerine getirmek için araçları otomatik olarak çağırır.

Araç çağrısının manuel kontrolü için returnToolRequests: true belirtebilirsiniz.

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

Alıcı bağlamı ekleme

Bir retriever'dan gelen belgeler, veri sağlamak üzere doğrudan generate hizmetine iletilebilir temel bağlam:

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

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

Doküman bağlamı, istemin içeriğine otomatik olarak eklenir gönderilir.

Mesaj geçmişi kaydediliyor

Genkit modelleri, modele gönderilen mesajların geçmişinin korunmasını destekler. Bu bilgileri kullanarak etkileşimli deneyimler oluşturmak için kullanabilirsiniz. chatbot'lardan ibarettir.

Bir model yanıtından mesaj geçmişi oluşturmak için toHistory() işlevini çağırın yöntem:

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

Bu geçmişi serileştirebilir ve bir veritabanında veya oturum depolama alanında saklayabilirsiniz. Ardından, geçmişi, gelecekteki çağrılarda yer alan istemle birlikte generate() adlı operatöre iletin:

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

Kullandığınız model system rolünü destekliyorsa sistem mesajını ayarlayın:

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

Yanıtların akış şeklinde gösterilmesi

Genkit, generateStream() yöntemi aracılığıyla model yanıtlarının parçalı akışını destekler:

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