Firebase Genkit

Firebase Genkit هو إطار عمل مفتوح المصدر يساعدك في إنشاء ونشر ومراقبة التطبيقات المستندة إلى الذكاء الاصطناعي الجاهزة للإنتاج.

شعار Genkit

حزمة Genkit مصمّمة لمطوّري التطبيقات لمساعدتك في دمج إمكانات الذكاء الاصطناعي الفعّالة بسهولة في تطبيقاتك باستخدام أنماط ونماذج مألوفة. تم إنشاء هذه المنصة بواسطة الفريق نفسه وراء Firebase، ما يستفيد من خبرتنا في أدوات الإنشاء التي يستخدمها ملايين المطوّرين حول العالم.

استخدم Genkit لإنشاء تطبيقات لإنشاء محتوى مخصص، واستخدام البحث الدلالي، والتعامل مع المدخلات غير المنظمة، والإجابة عن الأسئلة باستخدام بيانات العمل، واتخاذ القرارات بشكل مستقل، وتنظيم طلبات الأدوات، والمزيد!

تدعم Genkit حاليًا التطوير من جهة الخادم بلغة JavaScript/TypeScript (Node.js) مع دعم Go في التطوير النشط.

يمكنك متابعة تطويره أو تقديم مساهماتك من خلال مستودع GitHub الخاص به.

الميزات الرئيسية

تساعدك Genkit في كل خطوة من رحلة تطوير الذكاء الاصطناعي، بدءًا من وضع النماذج الأولية ووصولاً إلى المراقبة في مرحلة الإنتاج، لذلك هناك الكثير من الحديث عنه.

في ما يلي 10 ميزات أساسية في Genkit نعتقد أنّها ستعجبك:

1- نماذج عديدة وواجهة واحدة

توفّر Genkit مكوّنات إضافية تتيح لك الوصول إلى النماذج الرائجة بطريقة مباشرة وتجريد النموذج المرن الذي يسهّل دمج أي نموذج من واجهات برمجة التطبيقات واستخدام النماذج التي يحافظ عليها المنتدى. يمكن تجربة نموذج جديد بسهولة مثل تغيير وسيطة واحدة، ولكن يمكن لكل نموذج تحديد إعدادات مخصّصة.

import { geminiPro } from '@genkit-ai/vertexai';
import { ollama } from 'genkitx-ollama';
import { generate } from '@genkit-ai/ai';

function flipACoin(a, b) {
  return Math.random() > 0.5 ? a : b;
}

const result = await generate({
  model: flipACoin(geminiPro, 'ollama/gemma'),
  config: { temperature: 0.3, maxOutputTokens: 200 },
  prompt: 'What makes you the best LLM out there?',
});

console.log(result.text());

2- إخراج منظَّم

أنشئ بيانات مكتوبة بقوة من خلال Genkit باستخدام مخطط Zod. ويمكن أن يساعدك ذلك في تحليل النصوص غير المنظَّمة وإنشاء محتوى إبداعي وتحديد المهام وإرسال النتائج مرة أخرى إلى تطبيقك ككائنات منظَّمة آمنة من حيث النوع.

import { generate } from "@genkit-ai/ai";
import { geminiPro } from "@genkit-ai/vertexai";
import { z } from "zod";

const CreatureSchema = z.object({
  name: z.string().describe('the name of the creature'),
  hitPoints: z.number().describe('hit points, between 5 and 100'),
  attacks: z.array(z.object({
    name: z.string(),
    damage: z.number().describe('amount of damage, between 2 and 25'),
  })).describe('3 attacks the creature can use')
});

const createCreature = defineFlow({
    name: "createCreature",
    inputSchema: z.string(),
    outputSchema: CreatureSchema,
  },
  (habitat) => {
    const result = await generate({
      model: geminiPro,
      prompt: `You are a brilliant RPG designer. Generate a creature that lives in ${habitat}.`,
      output: {schema: CreatureSchema}
    });
    // strongly typed and ready to go
    return result.output();
  }
)

console.log(await createCreature("a developer conference"));

3- متعدد الوسائط والوسائط المتعددة

توفّر Genkit تنسيقًا مشتركًا للمحتوى يتوافق مع مزيج من النصوص والبيانات والوسائط العشوائية. ويتيح لك ذلك استخدام Genkit للنماذج التي تنفّذ أي مهمة من إنشاء الذكاء الاصطناعي التوليدي (مثل إنشاء الصور)، وليس فقط النماذج اللغوية الكبيرة.

import { imagen2, geminiProVision } from '@genkit-ai/vertexai';
import { generate } from '@genkit-ai/ai';

const imageResult = await generate({
  model: imagen2,
  prompt: 'Generate an image of a very specific historical time and place.',
});
const generatedImage = imageResult.media();

const descriptionResult = await generate({
  model: geminiProVision,
  prompt: [
    {
      text: 'What is the historical time and place represented in this picture?',
    },
    { media: generatedImage },
  ],
});
console.log(descriptionResult.text());

4- تقديم أدوات النماذج اللغوية الكبيرة

تسهّل Genkit إجراء الطلبات الوظيفية باستخدام النماذج اللغوية الكبيرة من خلال الأدوات. وتتيح الأدوات للذكاء الاصطناعي (AI) جلب البيانات أو عرض واجهة المستخدم أو الكتابة في قاعدة بيانات أو اتّخاذ أي إجراء آخر في الترميز.

import { generate, defineTool } from '@genkit-ai/ai';
import { geminiPro } from '@genkit-ai/vertexai';
import { z } from 'zod';

const createReminder = defineTool(
  {
    name: 'createReminder',
    description: 'Use this to create reminders for things in the future',
    inputSchema: z.object({
      time: z
        .string()
        .describe('ISO timestamp string, e.g. 2024-04-03T12:23:00Z'),
      reminder: z.string().describe('the content of the reminder'),
    }),
    outputSchema: z.number().describe('the ID of the created reminder'),
  },
  (reminder) => db.reminders.create(reminder)
);

const searchNotes = defineTool(
  {
    name: 'searchNotes',
    description: "Use this to search the user's notes for people or phrases",
    inputSchema: z.string().describe('the search query'),
    outputSchema: z.object({ notes: z.array(NoteSchema) }),
  },
  (query) => db.notes.search(query)
);

const result = await generate({
  model: geminiPro,
  tools: [createReminder, searchNotes],
  prompt: `
  You are a note-taking assistant. Using the tools available, try to answer the provided query.
  If you create a reminder, describe in text the reminder you created as a response.

  Query: I took a note about a meeting with Anna - can you set a reminder for the time?
  `,
});
console.log(result.text());

5- إدارة الطلبات باستخدام Dotprompt

لا تقتصر هندسة الطلبات على مجرد تعديل النص. يؤثر النموذج الذي تستخدمه والمعلمات التي تقدمها والتنسيق الذي تطلبه في جودة مخرجاتك. توفر Genkit تنسيق ملفات Dotprompt وهو يتيح لك وضعها جميعًا في ملف واحد لتسهيل عملية الاختبار والتنظيم.

---
model: vertexai/gemini-1.0-pro
config:
  temperature: 0.9
input:
  schema:
    properties:
      location: {type: string}
      style: {type: string}
      name: {type: string}
    required: [location]
  default:
    location: a restaurant
---

You are the world's most welcoming AI assistant and are currently working at {{location}}.

Greet a guest{{#if name}} named {{name}}{{/if}}{{#if style}} in the style of {{style}}{{/if}}.

6- تشغيل التدفقات محليًا

للذكاء الاصطناعي التوليدي تفاوت كبير في النتائج، لذا فإنّ التجربة مهمة للغاية. تتيح لك واجهة مستخدم المطوّرين على Genkit المحلية إمكانية التفاعل مع مكوّنات الذكاء الاصطناعي الأساسية مثل النماذج وأدوات استرداد البيانات، بالإضافة إلى اختبار التدفقات اليدوية من البداية إلى النهاية بما في ذلك جميع الرموز المخصّصة التي كتبتها.

7- فحص آثار الأنشطة

قد يمثّل تصحيح الأخطاء في سير العمل المعقّد والمتعدّد الخطوات باستخدام الذكاء الاصطناعي تحديًا بسبب العمليات العشوائية والمخفية. توفّر Genkit أداة فحص تتبُّع في واجهة مستخدم المطوّرين تتيح لك فحص آثار الأنشطة لكل طلب نموذج وخطوة في التدفق. ويمكنه عرض آثار الأنشطة في مرحلة الإنتاج وعرض الصور أيضًا.

8- مفتوحة وقابلة للتوسيع

تنمو المنظومة المتكاملة للذكاء الاصطناعي بشكل أسرع من فريق واحد. تضم Genkit نموذج مكونات إضافية مفتوحة يوفّر عمليات تكامل سابقة الإنشاء مع نماذج جديدة وأجهزة استرداد والمزيد. في حين أن فريق Genkit يحتفظ بمجموعة صغيرة من المكونات الإضافية الرسمية، يمكن لأي شخص عدم التردد في نشر مكونات Genkit الإضافية الخاصة به على NPM.

ألا يمكنك العثور على مكون إضافي لعملية دمج معينة تريدها؟ حسنًا، ليس هناك مشكلة. تمتاز تجريد Genkit بالمرونة وتسهِّل إنشاء مكونات مخصصة تتكامل مع إطار العمل، مثل أداة استرداد Firestore المخصصة هذه:

import { embed } from '@genkit-ai/ai/embedder';
import { Document, defineRetriever } from '@genkit-ai/ai/retriever';
import { textEmbeddingGecko } from '@genkit-ai/vertexai';
import {
  FieldValue,
  VectorQuery,
  VectorQuerySnapshot,
} from '@google-cloud/firestore';
import { Firestore } from 'firebase-admin/firestore';
import * as z from 'zod';
import { augmentedPrompt } from './prompt';

const QueryOptions = z.object({
  k: z.number().optional(),
});

const firestoreArtifactsRetriever = defineRetriever(
  {
    name: 'firestore/artifacts',
    configSchema: QueryOptions,
  },
  async (input, options) => {
    const embedding = await embed({
      embedder: textEmbeddingGecko,
      content: input,
    });

    const db = new Firestore();
    const coll = db.collection('vectors' /* your collection name */);

    const vectorQuery: VectorQuery = coll.findNearest(
      'embedding' /* the name of the field that contains the vector */,
      FieldValue.vector(embedding),
      {
        limit: options.k ?? 3,
        distanceMeasure: 'COSINE',
      }
    );

    const vectorQuerySnapshot: VectorQuerySnapshot = await vectorQuery.get();
    return {
      documents: vectorQuerySnapshot.docs.map((doc) =>
        // doc.data() represents the Firestore document. You may process
        // it as needed to generate a Genkit document object, depending on your
        // storage format.
        Document.fromText(doc.data().content.text)
      ),
    };
  }
);

9- مصمّمة للإنتاج

يمكنك بسهولة نشر مساراتك على أي نظام أساسي يمكنه عرض تطبيق Express.js. تعمل Genkit بالكامل مع OpenTelemetry والبيانات الوصفية المخصّصة لمراقبة الإنتاج على مستوى المؤسسة.

تتوفّر أيضًا مكوّنات إضافية رسمية لمنصّة Google Cloud وFirebase تساعدك في تصدير البيانات إلى مجموعة عمليات Google Cloud والتكامل مع خدمات Firebase، مثل دوال Cloud Functions في Firebase ومصادقة Firebase وفحص التطبيقات وFirestore.

لقطة شاشة لتتبُّع السحابة الإلكترونية

10- معالجة الأذونات والأمان

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

توفِّر Genkit آليات لإدارة سياسات التفويض والسياقات.

import { defineFlow, runFlow } from '@genkit-ai/flow';

export const selfSummaryFlow = defineFlow(
  {
    name: 'selfSummaryFlow',
    inputSchema: z.object({uid: z.string()}),
    outputSchema: z.string(),
    authPolicy: (auth, input) => {
      if (!auth) {
        throw new Error('Authorization required.');
      }
      if (input.uid !== auth.uid) {
        throw new Error('You may only summarize your own profile data.');
      }
    }
  },
  async (input) => { ... });

عمليات الدمج

توفّر Genkit عمليات دمج مع نماذج الذكاء الاصطناعي (AI) وقواعد بيانات المتجهات ومنصات القياس عن بُعد وغيرها من خلال نظام المكوّنات الإضافية الخاص بها. يقوم فريق Genkit بصيانة المكونات الإضافية التالية:

المكوّنات الإضافية الرسمية
googleai النماذج التوليدية: Gemini Pro وGemini 1.5 Pro وGemini Pro Vision
النماذج المضمَّنة: تضمين النص عن Gecko
vertexai النماذج التوليدية: Gemini Pro وGemini Pro Vision وGemini 1.5 Flash وGemini 1.5 Pro وImagen2 وAnthropic Claude 3
نماذج التضمين: تضمين نصوص Gecko
Evaluters: تقييم Vertex AI
ollama النماذج التوليدية: العديد من النماذج المحلية، بما في ذلك Gemma وLlama 3 وMistral وغيرها
chroma قاعدة بيانات المتجهات: ChromaDB
pinecone قاعدة بيانات المتجه: Pinecone
google-cloud أدوات المراقبة: Google Cloud Trace وتسجيل التسجيل في Google Cloud
firebase النشر على السحابة الإلكترونية: دوال Cloud، ومصادقة Firebase، والتحقّق من التطبيقات
قاعدة بيانات Vector: مخزن المتجهات Cloud Firestore
langchain استخدام سلاسل LangChain والأدوات المساعدة في مسارات Genkit

البدء

اقرأ دليل البدء لمعرفة كيفية تثبيت Genkit وتشغيل أول عملية من خطوات الذكاء الاصطناعي.