جارٍ إنشاء المحتوى

توفّر أداة Firebase Genkit واجهة سهلة لإنشاء المحتوى باستخدام النماذج اللغوية الكبيرة.

الطرُز

النماذج في Firebase Genkit هي مكتبات وتجريدات توفر إمكانية الوصول إلى النماذج اللغوية الكبيرة المختلفة التي توفّرها Google وغير التابعة لها

النماذج مُعدَّة بالكامل للملاحظة وهي مزوّدة بأدوات التي تقدمها واجهة مستخدم مطوّري برامج 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 دعمها للنموذج من خلال نظام المكوّنات الإضافية الخاص بها. المكونات الإضافية التالية مدعومة رسميًا:

المكوّن الإضافي الطرُز
الذكاء الاصطناعي التوليدي من Google Gemini Pro وGemini Pro Vision
Google Vertex AI 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());
})();

يمكنك تمرير خيارات نموذج مختلفة لهذا النموذج، بما فيها تحديد نموذج مخصّص لنماذج لغوية معيّنة محددة.

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