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