Firebase Genkit

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

شعار Genkit

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

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

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

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

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

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 بالكامل مع OpenTELmetry والبيانات الوصفية المخصّصة لمراقبة الإنتاج على مستوى المؤسسة.

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

لقطة شاشة لخدمة Cloud Trace

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 عمليات دمج مع نماذج الذكاء الاصطناعي وقواعد بيانات المتجهات ومنصات القياس عن بُعد والمزيد من خلال نظام المكوّنات الإضافية. يتم الاحتفاظ بالمكونات الإضافية التالية بواسطة فريق 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
المقيِّمون: تقييم Vertex AI
ollama النماذج التوليدية: العديد من النماذج المحلية، بما في ذلك Gemma وLlama 3 وMistral وغير ذلك
chroma قاعدة بيانات المتجه: ChromaDB
pinecone قاعدة بيانات المتجه: Pinecone
google-cloud أدوات المراقبة: Google Cloud Trace وGoogle Cloud Logging
firebase النشر على السحابة الإلكترونية: دوال السحابة ومصادقة Firebase و"فحص التطبيقات"
قاعدة بيانات المتجهات: متجر المتجهات في Cloud Firestore
langchain استخدام سلاسل LangChain وأدواتها في تدفقات Genkit

البدء

ما عليك سوى قراءة دليل البدء لمعرفة طريقة تثبيت Genkit وتشغيل أوّل تدفق للذكاء الاصطناعي (AI).