Firebase Genkit

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

شعار 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- فحص آثار الأنشطة

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

8- فتح & قابل للتوسُّع

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

البدء

اقرأ دليل البدء للتعرُّف على كيفية تثبيت Genkit وتنفيذ أول عملية تطوُّر للذكاء الاصطناعي