المكوّن الإضافي للذكاء الاصطناعي التوليدي من Google

يقدّم المكوّن الإضافي "الذكاء الاصطناعي التوليدي من Google" واجهات لنماذج Gemini من Google من خلال Gemini API.

تثبيت

npm i --save @genkit-ai/googleai

الإعداد

لاستخدام هذا المكوّن الإضافي، حدِّده عند إعداد Genkit:

import { genkit } from 'genkit';
import { googleAI } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
});

يتطلّب المكوّن الإضافي مفتاح واجهة برمجة تطبيقات لخدمة Gemini API، والذي يمكنك الحصول عليه من Google AI Studio.

يمكنك ضبط المكوّن الإضافي لاستخدام مفتاح واجهة برمجة التطبيقات من خلال تنفيذ أحد الإجراءَين التاليَين:

  • اضبط متغيّر البيئة GOOGLE_GENAI_API_KEY على مفتاح واجهة برمجة التطبيقات.
  • حدِّد مفتاح واجهة برمجة التطبيقات عند إعداد المكوّن الإضافي:

    googleAI({ apiKey: yourKey });
    

    ومع ذلك، لا تُدرِج مفتاح واجهة برمجة التطبيقات مباشرةً في الرمز. لا تستخدِم هذه الميزة إلا مع خدمة مثل Cloud Secret Manager أو ما شابه.

الاستخدام

يصدِّر هذا المكوِّن الإضافي بشكلٍ ثابت إشارات إلى النماذج المتوافقة معه:

import {
  gemini15Flash,
  gemini15Pro,
  textEmbedding004,
} from '@genkit-ai/googleai';

يمكنك استخدام هذه المراجع لتحديد النموذج الذي يستخدمه generate():

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

const llmResponse = await ai.generate('Tell me a joke.');

أو استخدام أدوات التضمين (مثل textEmbedding004) مع embed أو برامج الاسترداد:

const ai = genkit({
  plugins: [googleAI()],
});

const embedding = await ai.embed({
  embedder: textEmbedding004,
  content: input,
});

Gemini Files API

يمكنك استخدام الملفات التي تم تحميلها إلى Gemini Files API باستخدام Genkit:

import { GoogleAIFileManager } from '@google/generative-ai/server';
import { genkit } from 'genkit';
import { googleAI } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
});

const fileManager = new GoogleAIFileManager(process.env.GOOGLE_GENAI_API_KEY);
const uploadResult = await fileManager.uploadFile(
  'path/to/file.jpg',
  {
    mimeType: 'image/jpeg',
    displayName: 'Your Image',
  }
);

const response = await ai.generate({
  model: gemini15Flash,
  prompt: [
    {text: 'Describe this image:'},
    {media: {contentType: uploadResult.file.mimeType, url: uploadResult.file.uri}}
  ]
});

النماذج المحسَّنة

يمكنك استخدام النماذج التي تم تحسينها باستخدام Google Gemini API. اتّبِع تعليمات Gemini API أو حسِّن نموذجًا باستخدام AI Studio.

تستخدِم عملية الضبط نموذجًا أساسيًا، مثل Gemini 1.5 Flash، و الأمثلة التي قدّمتها لإنشاء نموذج جديد معدَّل. تذكَّر النموذج الأساسي الذي استخدَمته وانسخ رقم تعريف النموذج الجديد.

عند استدعاء النموذج المحسَّن في Genkit، استخدِم النموذج الأساسي كمَعلمة model ، واضبط رقم تعريف النموذج المحسَّن كجزء من العنصر config. على سبيل المثال، إذا استخدمت نموذج Gemini 1.5 Flash كنموذج أساسي، وحصلت على معرّف النموذج tunedModels/my-example-model-apbm8oqbvuv2، يمكنك استدعاؤه باستخدام:

const ai = genkit({
  plugins: [googleAI()],
});

const llmResponse = await ai.generate({
  prompt: `Suggest an item for the menu of fish themed restruant`,
  model: gemini15Flash.withConfig({
    version: "tunedModels/my-example-model-apbm8oqbvuv2",
  }),
});

تخزين السياق في ذاكرة التخزين المؤقت

يتيح مكوّن الذكاء الاصطناعي التوليدي من Google تخزين السياق في ذاكرة التخزين المؤقت، ما يسمح للنماذج بإعادة استخدام المحتوى المخزّن في ذاكرة التخزين المؤقت سابقًا لتحسين الأداء وتقليل وقت الاستجابة للمهام المتكررة. وتُعدّ هذه الميزة مفيدة بشكل خاص لعمليات الحوار أو السيناريوهات التي يشير فيها النموذج إلى مجموعة كبيرة من النصوص بشكلٍ متسق في طلبات متعددة.

كيفية استخدام ميزة "تخزين السياق"

لتفعيل ميزة "تخزين السياق في ذاكرة التخزين المؤقت"، تأكَّد من أنّ النموذج يتيح ذلك. على سبيل المثال، gemini15Flash وgemini15Pro هما طرازان يتيحان ميزة "تخزين السياق في ذاكرة التخزين المؤقت".

يمكنك تحديد آلية تخزين مؤقت في تطبيقك على النحو التالي:

const ai = genkit({
  plugins: [googleAI()],
});

const llmResponse = await ai.generate({
  messages: [
    {
      role: 'user',
      content: [{ text: 'Here is the relevant text from War and Peace.' }],
    },
    {
      role: 'model',
      content: [
        {
          text: 'Based on War and Peace, here is some analysis of Pierre Bezukhov’s character.',
        },
      ],
      metadata: {
        cache: {
          ttlSeconds: 300, // Cache this message for 5 minutes
        },
      },
    },
  ],
  model: gemini15Flash,
  config: {
    version: 'gemini-1.5-flash-001', // Only 001 currently supports context caching
  },
  prompt: 'Describe Pierre’s transformation throughout the novel.',
});

في هذا الإعداد: - messages: يتيح لك تمرير سجلّ المحادثات. ‫- metadata.cache.ttlSeconds: لتحديد مدة البقاء (TTL) لتخزين استجابة معيّنة في ذاكرة التخزين المؤقت.

مثال: الاستفادة من النصوص الكبيرة مع السياق

بالنسبة إلى التطبيقات التي تشير إلى مستندات طويلة، مثل War and Peace أو Lord of the Rings، يمكنك تنظيم طلبات البحث لإعادة استخدام السياقات المخزّنة مؤقتًا:

const fs = require('fs/promises');

const textContent = await fs.readFile('path/to/war_and_peace.txt', 'utf-8');

const llmResponse = await ai.generate({
  messages: [
    {
      role: 'user',
      content: [{ text: textContent }], // Include the large text as context
    },
    {
      role: 'model',
      content: [
        {
          text: 'This analysis is based on the provided text from War and Peace.',
        },
      ],
      metadata: {
        cache: {
          ttlSeconds: 300, // Cache the response to avoid reloading the full text
        },
      },
    },
  ],
  model: gemini15Flash,
  config: {
    version: 'gemini-1.5-flash-001', // Only 001 currently supports context caching
  },
  prompt: 'Analyze the relationship between Pierre and Natasha.',
});

تخزين أوضاع المحتوى الأخرى مؤقتًا

نماذج Gemini متعددة الوسائط، ويُسمح أيضًا بتخزين المحتوى بتنسيقات أخرى في ذاكرة التخزين المؤقت.

على سبيل المثال، لتخزين جزء طويل من محتوى الفيديو مؤقتًا، عليك أولاً تحميله باستخدام مدير الملفات من حزمة تطوير البرامج لتكنولوجيات الذكاء الاصطناعي من Google:

import { GoogleAIFileManager } from '@google/generative-ai/server';

const fileManager = new GoogleAIFileManager(
  process.env.GOOGLE_GENAI_API_KEY
);

// Upload video to Google AI using the Gemini Files API
const uploadResult = await fileManager.uploadFile(videoFilePath, {
  mimeType: 'video/mp4', // Adjust according to the video format
  displayName: 'Uploaded Video for Analysis',
});

const fileUri = uploadResult.file.uri;

يمكنك الآن ضبط ذاكرة التخزين المؤقت في مكالماتك على ai.generate:

const analyzeVideoResponse = await ai.generate({
  messages: [
    {
      role: 'user',
      content: [
        {
          media: {
            url: fileUri, // Use the uploaded file URL
            contentType: 'video/mp4',
          },
        },
      ],
    },
    {
      role: 'model',
      content: [
        {
          text: 'This video seems to contain several key moments. I will analyze it now and prepare to answer your questions.',
        },
      ],
      // Everything up to (including) this message will be cached.
      metadata: {
        cache: true,
      },
    },
  ],
  config: {
    version: 'gemini-1.5-flash-001', // Only 001 versions support context caches
  },
  model: gemini15Flash,
  prompt: query,
});

النماذج المتوافقة لتخزين السياق مؤقتًا

لا تتيح بعض النماذج، مثل gemini15Flash وgemini15Pro، ميزة "تخزين السياق في ذاكرة التخزين المؤقت". في حال استخدام نموذج غير متوافق، سيتم عرض خطأ يشير إلى أنّه لا يمكن تطبيق ميزة التخزين المؤقت.

مراجع إضافية

يمكنك الاطّلاع على مزيد من المعلومات حول ميزة "تخزين السياق في ذاكرة التخزين المؤقت" في مستندات تكنولوجيات الذكاء الاصطناعي من Google.