يقدّم المكوّن الإضافي Firebase عمليات دمج مع خدمات Firebase، ما يتيح لك إنشاء تطبيقات ذكية وقابلة للتطوير باستخدام الذكاء الاصطناعي. تشمل الميزات الرئيسية ما يلي:
- Firestore Vector Store: استخدِم Firestore للفهرسة والاسترجاع باستخدام عمليات تضمين المتجهات.
- إحصاءات الأداء: يمكنك تصدير إحصاءات الأداء إلى مجموعة عمليات Google Cloud التي تشغِّل وحدة تحكّم مراقبة Firebase Genkit.
تثبيت
ثبِّت المكوّن الإضافي Firebase باستخدام npm:
npm install @genkit-ai/firebase
المتطلبات الأساسية
إعداد مشروع Firebase
- تتطلّب جميع منتجات Firebase إنشاء مشروع على Firebase. يمكنك إنشاء مشروع جديد أو تفعيل Firebase في مشروع حالي على Google Cloud باستخدام وحدة تحكُّم Firebase.
- في حال نشر عمليات المعالجة باستخدام وظائف السحابة الإلكترونية، عليك ترقية مشروعك على Firebase إلى خطة Blaze.
- إذا كنت تريد تشغيل رمز برمجي محليًا يصدِّر بيانات القياس، يجب تثبيت أداة Google Cloud CLI.
إعداد حزمة SDK لإدارة Firebase
يجب إعداد حزمة تطوير البرامج (SDK) الخاصة بمسؤول Firebase في تطبيقك. ولا يعالج المكوّن الإضافي هذا تلقائيًا.
import { initializeApp } from 'firebase-admin/app';
initializeApp({
projectId: 'your-project-id',
});
يطلب منك المكوّن الإضافي تحديد رقم تعريف مشروعك على Firebase. يمكنك تحديد رقم تعريف مشروعك على Firebase بإحدى الطريقتَين التاليتَين:
اضبط
projectId
في عنصر الضبطinitializeApp()
كما هو موضّح في المقتطف أعلاه.اضبط متغيّر البيئة
GCLOUD_PROJECT
. إذا كنت تُشغِّل تدفقك من بيئة Google Cloud (Cloud Functions وCloud Run وما إلى ذلك)، يتم ضبطGCLOUD_PROJECT
تلقائيًا على معرّف المشروع للبيئة.في حال ضبط
GCLOUD_PROJECT
، يمكنك حذف مَعلمة الإعداد فيinitializeApp()
.
بيانات الاعتماد
لتقديم بيانات اعتماد Firebase، عليك أيضًا إعداد ملف "بيانات الاعتماد التلقائية للتطبيق" في Google Cloud. لتحديد بيانات الاعتماد، يُرجى اتّباع الخطوات التالية:
إذا كنت تشغّل عملية المعالجة من بيئة Google Cloud (Cloud Functions وCloud Run وما إلى ذلك)، يتم ضبط هذا الإعداد تلقائيًا.
بالنسبة إلى البيئات الأخرى:
- أنشئ بيانات اعتماد حساب الخدمة لمشروعك على Firebase و نزِّل ملف مفتاح JSON. ويمكنك إجراء ذلك في صفحة حساب الخدمة في وحدة تحكُّم Firebase.
- اضبط متغيّر البيئة
GOOGLE_APPLICATION_CREDENTIALS
على ملف مسار ملف JSON الذي يحتوي على مفتاح حساب الخدمة، أو يمكنك ضبط متغيّر البيئةGCLOUD_SERVICE_ACCOUNT_CREDS
على محتوى ملف JSON.
الميزات وطريقة الاستخدام
القياس عن بُعد
تستند ميزة "مراقبة Genkit في Firebase" إلى مجموعة عمليات Google Cloud. يتطلب ذلك تفعيل واجهات برمجة التطبيقات ذات الصلة بالقياسات لمشروعك. يُرجى الرجوع إلى مستندات مكوّن Google Cloud الإضافي للحصول على مزيد من التفاصيل.
امنح الأدوار التالية إلى "حساب خدمة الحوسبة التلقائي" ضمن وحدة تحكّم إدارة الهوية وإمكانية الوصول في Google Cloud:
- كاتب مقاييس المراقبة (roles/monitoring.metricWriter)
- موظّف دعم Cloud Trace (roles/cloudtrace.agent)
- كاتب السجلات (roles/logging.logWriter)
لتفعيل تصدير بيانات القياس عن بُعد، يُرجى الاتصال على enableFirebaseTelemetry()
:
import { enableFirebaseTelemetry } from '@genkit-ai/firebase';
enableFirebaseTelemetry({
forceDevExport: false, // Set this to true to export telemetry for local runs
});
يشترك هذا المكوّن الإضافي في خيارات الضبط مع مكوّن Google Cloud الإضافي.
البحث باستخدام الرسومات في Cloud Firestore
يمكنك استخدام Cloud Firestore كمساحة تخزين للأشكال الهندسية لفهرسة وعرض "العناصر القابلة للاستخدام".
يحتوي هذا القسم على معلومات خاصة بالإضافة firebase
وميزة البحث المتجه في Cloud
Firestore. اطّلِع على صفحة
الإنشاء المعزّز بالاسترداد للحصول على مناقشة أكثر تفصيلاً
حول تنفيذ ميزة "الإنشاء المعزّز بالاسترداد" باستخدام Genkit.
استخدام GCLOUD_SERVICE_ACCOUNT_CREDS
وFirestore
إذا كنت تستخدم بيانات اعتماد حساب الخدمة من خلال تمرير بيانات الاعتماد مباشرةً
من خلال GCLOUD_SERVICE_ACCOUNT_CREDS
وكنت تستخدم أيضًا Firestore كمخزن
متجهات، عليك تمرير بيانات الاعتماد مباشرةً إلى مثيل Firestore
أثناء الإعداد أو قد يتم إعداد العنصر الفردي باستخدام بيانات الاعتماد
التلقائية للتطبيق استنادًا إلى ترتيب إعداد المكوّن الإضافي.
import {initializeApp} from "firebase-admin/app";
import {getFirestore} from "firebase-admin/firestore";
const app = initializeApp();
let firestore = getFirestore(app);
if (process.env.GCLOUD_SERVICE_ACCOUNT_CREDS) {
const serviceAccountCreds = JSON.parse(process.env.GCLOUD_SERVICE_ACCOUNT_CREDS);
const authOptions = { credentials: serviceAccountCreds };
firestore.settings(authOptions);
}
تحديد أداة استرجاع في Firestore
استخدِم defineFirestoreRetriever()
لإنشاء أداة استرجاع طلبات البحث المستندة إلى defineFirestoreRetriever()
في Firestore.
import { defineFirestoreRetriever } from '@genkit-ai/firebase';
import { initializeApp } from 'firebase-admin/app';
import { getFirestore } from 'firebase-admin/firestore';
const app = initializeApp();
const firestore = getFirestore(app);
const retriever = defineFirestoreRetriever(ai, {
name: 'exampleRetriever',
firestore,
collection: 'documents',
contentField: 'text', // Field containing document content
vectorField: 'embedding', // Field containing vector embeddings
embedder: yourEmbedderInstance, // Embedder to generate embeddings
distanceMeasure: 'COSINE', // Default is 'COSINE'; other options: 'EUCLIDEAN', 'DOT_PRODUCT'
});
استرداد المستندات
لاسترداد المستندات باستخدام أداة الاسترداد المحدّدة، يجب تمرير مثيل أداة الاسترداد
وخيارات طلب البحث إلى ai.retrieve
.
const docs = await ai.retrieve({
retriever,
query: 'search query',
options: {
limit: 5, // Options: Return up to 5 documents
where: { category: 'example' }, // Optional: Filter by field-value pairs
collection: 'alternativeCollection', // Optional: Override default collection
},
});
خيارات الاسترداد المتاحة
يمكن تمرير الخيارات التالية إلى حقل options
في ai.retrieve
:
limit
: (عدد) حدِّد الحد الأقصى لعدد المستندات التي تريد استرجاعها. القيمة التلقائية هي10
.
where
: (Record<string, any>) يمكنك إضافة فلاتر إضافية استنادًا إلى حقول Firestore. مثال:where: { category: 'news', status: 'published' }
collection
: (سلسلة) تجاهل المجموعة التلقائية المحدّدة في إعدادات أداة الاسترجاع.ويُعدّ ذلك مفيدًا لاستعلام المجموعات الفرعية أو التبديل ديناميكيًا بين
المجموعات.
تعبئة Firestore بالعناصر المضمّنة
لتعبئة مجموعة Firestore، استخدِم أداة إنشاء محتوى مضمّن مع حزمة SDK للمشرف. على سبيل المثال، يمكن تعديل نص القائمة البرمجي من صفحة الإنشاء المعزّز بالاسترداد لكي يعمل مع Firestore بالطريقة التالية:
import { genkit } from 'genkit';
import { vertexAI, textEmbedding004 } from "@genkit-ai/vertexai";
import { applicationDefault, initializeApp } from "firebase-admin/app";
import { FieldValue, getFirestore } from "firebase-admin/firestore";
import { chunk } from "llm-chunk";
import pdf from "pdf-parse";
import { readFile } from "fs/promises";
import path from "path";
// Change these values to match your Firestore config/schema
const indexConfig = {
collection: "menuInfo",
contentField: "text",
vectorField: "embedding",
embedder: textEmbedding004,
};
const ai = genkit({
plugins: [vertexAI({ location: "us-central1" })],
});
const app = initializeApp({ credential: applicationDefault() });
const firestore = getFirestore(app);
export async function indexMenu(filePath: string) {
filePath = path.resolve(filePath);
// Read the PDF.
const pdfTxt = await extractTextFromPdf(filePath);
// Divide the PDF text into segments.
const chunks = await chunk(pdfTxt);
// Add chunks to the index.
await indexToFirestore(chunks);
}
async function indexToFirestore(data: string[]) {
for (const text of data) {
const embedding = (await ai.embed({
embedder: indexConfig.embedder,
content: text,
}))[0].embedding;
await firestore.collection(indexConfig.collection).add({
[indexConfig.vectorField]: FieldValue.vector(embedding),
[indexConfig.contentField]: text,
});
}
}
async function extractTextFromPdf(filePath: string) {
const pdfFile = path.resolve(filePath);
const dataBuffer = await readFile(pdfFile);
const data = await pdf(dataBuffer);
return data.text;
}
يعتمد Firestore على الفهارس لتقديم طلبات بحث سريعة وفعّالة في المجموعات. (يُرجى العِلم أنّ "الفهرس" هنا يشير إلى فهارس قاعدة البيانات، وليس إلى العناصر المجردة لفهرس Genkit ومسترجعه).
يتطلّب المثال السابق فهرسة الحقل embedding
لكي يعمل.
لإنشاء الفهرس:
نفِّذ الأمر
gcloud
الموضّح في القسم إنشاء فهرس متّجه لحقل واحد من مستندات Firestore.يظهر الأمر على النحو التالي:
gcloud alpha firestore indexes composite create --project=your-project-id \ --collection-group=yourCollectionName --query-scope=COLLECTION \ --field-config=vector-config='{"dimension":"768","flat": "{}"}',field-path=yourEmbeddingField
ومع ذلك، تعتمد عملية ضبط الفهرسة الصحيحة على طلبات البحث التي تشكلها ونموذج التضمين الذي تستخدمه.
بدلاً من ذلك، يمكنك الاتصال بـ
ai.retrieve()
وسيُظهر Firestore خطأ يتضمن الأمر الصحيح لإنشاء الفهرس.
مزيد من المعلومات
- اطّلِع على صفحة إنشاء المحتوى باستخدام ميزة "تحسين الاسترجاع" لمعرفة المزيد عن أدوات الفهرسة والاسترجاع في Genkit.
- اطّلِع على البحث باستخدام عمليات تضمين المتجهات في مستندات Cloud Firestore للحصول على مزيد من ข้อมูล حول ميزة البحث عن المتجهات.
نشر مسارات الإحالات الناجحة كوظائف Cloud
لنشر مسار باستخدام Cloud Functions، استخدِم الميزة المضمّنة في مكتبة Firebase Functions لمعالجة genkit. تتيح لك طريقة onCallGenkit
إنشاء دالة قابلة للاستدعاء
من عملية. وتتيح تلقائيًا
طلبات البث وJSON. يمكنك استخدام
حِزم تطوير البرامج (SDK) لعملاء Cloud Functions
للاتصال بها.
import { onCallGenkit } from 'firebase-functions/https';
import { defineSecret } from 'firebase-functions/params';
export const exampleFlow = ai.defineFlow({
name: "exampleFlow",
}, async (prompt) => {
// Flow logic goes here.
return response;
}
);
// WARNING: This has no authentication or app check protections.
// See github.com/firebase/genkit/blob/main/docs/auth.md for more information.
export const example = onCallGenkit({ secrets: [apiKey] }, exampleFlow);
يمكنك نشر مسار الإحالة الناجحة باستخدام واجهة سطر أوامر Firebase:
firebase deploy --only functions