Que fait firebase-ai-logic ?
Compétence officielle pour intégrer Firebase AI Logic (API Gemini) dans les applications web. Couvre la configuration, l'inférence multimodale, les sorties structurées et la sécurité.
Aperçu
Cette compétence permet aux agents IA d'aider les développeurs à intégrer Firebase AI Logic, qui donne accès à l'API Gemini de Google pour des fonctionnalités d'IA générative dans les applications web. Elle guide l'agent à travers l'installation du SDK, l'initialisation du client, la configuration de sessions de chat, l'inférence multimodale (y compris l'analyse d'images, de PDF, d'audio et de vidéo), la génération de sorties structurées, et la mise en œuvre de mesures de sécurité.
Prérequis
- Compte Firebase avec un projet configuré.
- Abonnement Blaze (paiement à l'usage) activé sur le projet Firebase.
- API Gemini (Vertex AI) activée via la console Google Cloud.
- Node.js 18+ et npm.
- Firebase CLI installé (
npm install -g firebase-tools).
Installation
npm install firebase @google-ai/generativelanguage
Configuration
1. Initialiser Firebase dans votre projet
import { initializeApp } from 'firebase/app';
const firebaseConfig = {
apiKey: "VOTRE_CLÉ_API",
authDomain: "votre-projet.firebaseapp.com",
projectId: "votre-id-projet",
storageBucket: "votre-projet.appspot.com",
messagingSenderId: "VOTRE_ID_EMETTEUR",
appId: "VOTRE_ID_APPLICATION"
};
const app = initializeApp(firebaseConfig);
2. Initialiser le client Vertex AI
import { getVertexAI, getGenerativeModel } from 'firebase/vertexai';
const vertexAI = getVertexAI(app);
const model = getGenerativeModel(vertexAI, { model: 'gemini-1.5-pro' });
Utilisation
Génération de texte
const result = await model.generateContent([
{ text: 'Dis-moi une blague' }
]);
console.log(result.response.text());
Inférence multimodale
Analyser une image
import { getStorage, ref, getBytes } from 'firebase/storage';
const storage = getStorage();
const imageRef = ref(storage, 'chemin/vers/image.jpg');
const imageBytes = await getBytes(imageRef);
const result = await model.generateContent([
{ text: 'Décris cette image en détail' },
{
inlineData: {
mimeType: 'image/jpeg',
data: Buffer.from(imageBytes).toString('base64')
}
}
]);
Analyser un PDF
const pdfBytes = await getBytes(ref(storage, 'chemin/vers/document.pdf'));
const result = await model.generateContent([
{ text: 'Résume ce document' },
{
inlineData: {
mimeType: 'application/pdf',
data: Buffer.from(pdfBytes).toString('base64')
}
}
]);
Analyser un fichier audio
const audioBytes = await getBytes(ref(storage, 'chemin/vers/audio.mp3'));
const result = await model.generateContent([
{ text: 'Transcris ce fichier audio' },
{
inlineData: {
mimeType: 'audio/mpeg',
data: Buffer.from(audioBytes).toString('base64')
}
}
]);
Analyser une vidéo
const videoBytes = await getBytes(ref(storage, 'chemin/vers/video.mp4'));
const result = await model.generateContent([
{ text: 'Décris ce qui se passe dans cette vidéo' },
{
inlineData: {
mimeType: 'video/mp4',
data: Buffer.from(videoBytes).toString('base64')
}
}
]);
Sorties structurées
const schema = {
type: 'object',
properties: {
'nom': { type: 'string' },
'age': { type: 'number' },
'email': { type: 'string' }
},
required: ['nom', 'email']
};
const result = await model.generateContent({
contents: [{ role: 'user', parts: [{ text: 'Extrais les informations de ce texte : "John Doe, 30 ans, [email protected]"' }] }],
generationConfig: {
responseMimeType: 'application/json',
responseSchema: schema
}
});
const parsed = JSON.parse(result.response.text());
console.log(parsed); // { nom: 'John Doe', age: 30, email: '[email protected]' }
Sécurité et escorte paramétrique
import { getFunctions, httpsCallable } from 'firebase/functions';
const functions = getFunctions(app);
const callGemini = httpsCallable(functions, 'callGemini');
const result = await callGemini({ prompt: 'Génère un haïku' });
console.log(result.data);
Meilleures pratiques
- Ne partagez jamais votre clé API côté client. Utilisez plutôt les Cloud Functions pour les appels sensibles.
- Gérez les limites de débit et les quotas de l'API en implémentant une logique de retry.
- Validez toutes les entrées utilisateur avant de les utiliser comme prompts.
- Surveillez les coûts avec la console Firebase, car les appels à l'API sont facturés.
- Testez avec différents modèles (
gemini-1.5-pro,gemini-1.5-flash) pour trouver le bon équilibre entre performance et coût.