1. Présentation
Dans cet atelier de programmation, vous allez apprendre à ajouter de puissantes fonctionnalités de recherche à votre application à l'aide de la recherche par similarité vectorielle Firestore. Vous allez implémenter une fonctionnalité de recherche sémantique pour une application de prise de notes écrite en Swift et SwiftUI.
Objectifs de l'atelier
- Comment installer l'extension Vector Search avec Firestore pour calculer les embeddings vectoriels.
- Appeler des fonctions Cloud Firebase à partir d'une application Swift
- Découvrez comment préfiltrer les données en fonction de l'utilisateur connecté.
Prérequis
- Xcode 15.3
- Exemple de code de l'atelier de programmation. Vous le téléchargerez lors d'une prochaine étape de l'atelier de programmation.
2. Créer et configurer un projet Firebase
Pour utiliser l'extension Firebase Vector Search, vous avez besoin d'un projet Firebase. Dans cette partie de l'atelier de programmation, vous allez créer un projet Firebase et activer les services requis, tels que Cloud Firestore et Firebase Authentication.
Créer un projet Firebase
- Connectez-vous à la console Firebase à l'aide de votre compte Google.
- Cliquez sur le bouton pour créer un projet, puis saisissez un nom de projet (par exemple,
Firestore Vector Search Codelab
).
- Cliquez sur Continuer.
- Si vous y êtes invité, lisez et acceptez les Conditions d'utilisation de Firebase, puis cliquez sur Continuer.
- (Facultatif) Activez l'assistance IA dans la console Firebase (appelée "Gemini dans Firebase").
- Pour cet atelier de programmation, vous n'avez pas besoin de Google Analytics. Désactivez donc l'option Google Analytics.
- Cliquez sur Créer un projet, attendez que votre projet soit provisionné, puis cliquez sur Continuer.
Pour en savoir plus sur les projets Firebase, consultez Comprendre les projets Firebase.
Passer à un forfait Firebase supérieur
Pour utiliser les extensions Firebase et leurs services cloud sous-jacents, votre projet Firebase doit être associé au forfait Blaze avec paiement à l'usage, ce qui signifie qu'il est associé à un compte de facturation Cloud.
- Un compte de facturation Cloud nécessite un mode de paiement, comme une carte de crédit.
- Si vous débutez avec Firebase et Google Cloud, vérifiez si vous êtes éligible à un crédit de 300$et à un compte de facturation Cloud pour l'essai sans frais.
- Si vous effectuez cet atelier de programmation dans le cadre d'un événement, demandez à l'organisateur si des crédits Cloud sont disponibles.
Pour passer à la formule Blaze, procédez comme suit :
- Dans la console Firebase, sélectionnez Passer à une formule supérieure.
- Sélectionnez le forfait Blaze. Suivez les instructions à l'écran pour associer un compte de facturation Cloud à votre projet.
Si vous avez dû créer un compte de facturation Cloud lors de cette mise à niveau, vous devrez peut-être revenir au processus de mise à niveau dans la console Firebase pour la finaliser.
Activer et configurer les produits Firebase dans la console
L'application que vous êtes en train de créer utilise plusieurs produits Firebase disponibles pour les applications Apple :
- Firebase Authentication, pour permettre à vos utilisateurs de se connecter facilement à votre application.
- Cloud Firestore, pour sauvegarder des données structurées sur le cloud et être notifié instantanément en cas de modification des données.
- Règles de sécurité Firebase pour sécuriser votre base de données
Certains de ces produits nécessitent une configuration particulière ou doivent être activés via la console Firebase.
Activer l'authentification anonyme pour Firebase Authentication
Cette application utilise l'authentification anonyme pour permettre aux utilisateurs de commencer à utiliser l'application sans avoir à créer de compte au préalable. Cela permet de simplifier le processus d'intégration. Pour en savoir plus sur l'authentification anonyme (et sur la façon de passer à un compte nommé), consultez Bonnes pratiques pour l'authentification anonyme.
- Dans le panneau de gauche de la console Firebase, cliquez sur Créer > Authentification. Cliquez ensuite sur Commencer.
- Vous êtes maintenant dans le tableau de bord "Authentification", où vous pouvez voir les utilisateurs inscrits, configurer les fournisseurs de connexion et gérer les paramètres.
- Sélectionnez l'onglet Méthode de connexion (ou cliquez ici pour accéder directement à l'onglet).
- Cliquez sur Anonyme parmi les options de fournisseur, activez le bouton bascule Activer, puis cliquez sur Enregistrer.
Configurer Cloud Firestore
Cette application Swift utilise Cloud Firestore pour enregistrer des notes.
Voici comment configurer Cloud Firestore dans votre projet Firebase :
- Dans le panneau de gauche de la console Firebase, développez Créer, puis sélectionnez Base de données Firestore.
- Cliquez sur Créer une base de données.
- Laissez le champ ID de la base de données défini sur
(default)
. - Sélectionnez un emplacement pour votre base de données, puis cliquez sur Suivant.
Pour une application réelle, choisissez un emplacement proche de vos utilisateurs. - Cliquez sur Démarrer en mode test. Lisez la clause de non-responsabilité concernant les règles de sécurité.
Dans cet atelier de programmation, vous ajouterez des règles de sécurité pour protéger vos données. Ne distribuez ni n'exposez publiquement une application sans ajouter de règles de sécurité pour votre base de données. - Cliquez sur Créer.
Configurer Cloud Storage for Firebase
L'application Web utilise Cloud Storage for Firebase pour stocker, importer et partager des photos.
Voici comment configurer Cloud Storage for Firebase dans votre projet Firebase :
- Dans le panneau de gauche de la console Firebase, développez Créer, puis sélectionnez Stockage.
- Cliquez sur Commencer.
- Sélectionnez un emplacement pour votre bucket Storage par défaut.
Les buckets situés dans les régionsUS-WEST1
,US-CENTRAL1
etUS-EAST1
peuvent profiter du niveau"Toujours sans frais" pour Google Cloud Storage. Les buckets situés dans toutes les autres régions sont soumis aux tarifs et à l'utilisation de Google Cloud Storage. - Cliquez sur Démarrer en mode test. Lisez la clause de non-responsabilité concernant les règles de sécurité.
Dans une étape ultérieure de cet atelier de programmation, vous ajouterez des règles de sécurité pour protéger vos données. Ne distribuez ni n'exposez publiquement une application sans ajouter de règles de sécurité pour votre bucket Storage. - Cliquez sur Créer.
3. Connecter l'application mobile
Dans cette section de l'atelier de programmation, vous allez télécharger le code source d'une application de prise de notes simple et le connecter au projet Firebase que vous venez de créer.
Téléchargez l'exemple d'application
- Accédez à https://github.com/FirebaseExtended/codelab-firestore-vectorsearch-ios, puis clonez le dépôt sur votre ordinateur local
- Ouvrez le projet Notes.xcodeproj dans Xcode.
Associez l'application à votre projet Firebase.
Pour que votre application puisse accéder aux services Firebase, vous devez la configurer dans la console Firebase. Vous pouvez associer plusieurs applications clientes au même projet Firebase. Par exemple, si vous créez une application Android ou Web, vous devez les associer au même projet Firebase.
Pour en savoir plus sur les projets Firebase, consultez Comprendre les projets Firebase.
- Dans la console Firebase, accédez à la page de présentation de votre projet Firebase.
- Cliquez sur l'icône iOS+ pour ajouter votre application iOS.
- Sur l'écran Ajouter Firebase à votre application Apple, insérez l'ID du bundle du projet Xcode (com.google.firebase.codelab.Notes).
- Si vous le souhaitez, vous pouvez saisir un pseudo pour l'application (Notes pour iOS).
- Cliquez sur "Enregistrer l'application" pour passer à l'étape suivante.
- Téléchargez le fichier GoogleServices-Info.plist.
- Faites glisser GoogleServices-Info.plist dans le dossier Notes de votre projet Xcode. Pour ce faire, déposez-le sous le fichier Assets.xcassets.
- Sélectionnez Copy items if needed (Copier les éléments si nécessaire), assurez-vous que la cible Notes est sélectionnée dans Add to targets (Ajouter aux cibles), puis cliquez sur Finish (Terminer).
- Dans la console Firebase, vous pouvez maintenant cliquer sur le reste de la procédure de configuration : l'exemple que vous avez téléchargé au début de cette section contient déjà le SDK Firebase Apple et la configuration de l'initialisation. Pour terminer le processus, cliquez sur Accéder à la console.
Exécuter l'application
Il est maintenant temps de tester l'application.
- De retour dans Xcode, exécutez l'application sur le simulateur iOS. Dans le menu déroulant Run Destinations (Destinations d'exécution), sélectionnez d'abord l'un des simulateurs iOS.
- Cliquez ensuite sur le bouton Exécuter ou appuyez sur ⌘+R.
- Une fois l'application lancée sur le simulateur, ajoutez quelques notes.
- Dans la console Firebase, accédez au navigateur de données Firestore pour voir les nouveaux documents créés lorsque vous ajoutez des notes dans l'application.
4. Installer l'extension Vector Search avec Firestore
Dans cette partie de l'atelier de programmation, vous allez installer l'extension Vector Search avec Firestore et la configurer en fonction des exigences de l'application de prise de notes sur laquelle vous travaillez.
Lancer l'installation de l'extension
- Toujours dans la section Firestore, cliquez sur l'onglet Extensions.
- Cliquez sur Explorer Extensions Hub.
- Saisissez "vector".
- Cliquez sur "Vector Search with Firestore extension" (Recherche vectorielle avec l'extension Firestore).
Vous serez redirigé vers la page d'informations de l'extension, où vous pourrez en savoir plus sur l'extension, son fonctionnement, les services Firebase qu'elle requiert et la façon de la configurer.
- Cliquez sur Install in Firebase console (Installer dans la console Firebase).
- La liste de tous vos projets s'affiche.
- Sélectionnez le projet que vous avez créé à la première étape de cet atelier de programmation.
Configurer l'extension
- Examinez les API activées et les ressources créées.
- Activez les services requis.
- Une fois tous les services activés, cliquez sur Suivant.
- Examinez l'accès accordé à cette extension.
- Configurez l'extension :
- Sélectionnez Vertex AI comme LLM.
- Chemin de la collection : notes
- Limite de requêtes par défaut : 3
- Nom du champ de saisie : text
- Nom du champ de sortie : embedding
- Nom du champ d'état* : *status*
- Intégrer des documents existants : Oui
- Mettre à jour les documents existants : Oui
- Emplacement de la fonction Cloud : us-central1
- Cliquez sur Installer l'extension pour terminer l'installation.
Cette opération peut prendre quelques minutes. En attendant la fin de l'installation, n'hésitez pas à passer à la section suivante du tutoriel et à lire des informations générales sur les embeddings vectoriels.
5. Arrière-plan
En attendant la fin de l'installation, voici quelques informations générales sur le fonctionnement de l'extension Vector Search avec Firestore.
Que sont les vecteurs, les embeddings et les bases de données vectorielles ?
- Les vecteurs sont des objets mathématiques qui représentent la magnitude et la direction d'une quantité. Ils peuvent être utilisés pour représenter les données de manière à faciliter leur comparaison et leur recherche.
- Les embeddings sont des vecteurs qui représentent la signification d'un mot ou d'une expression. Ils sont créés en entraînant un réseau de neurones sur un grand corpus de texte et en apprenant les relations entre les mots.
- Les bases de données vectorielles sont des bases de données optimisées pour stocker et rechercher des données vectorielles. Ils permettent une recherche efficace des plus proches voisins, qui consiste à trouver les vecteurs les plus similaires à un vecteur de requête donné.
Comment fonctionne la recherche vectorielle ?
La recherche vectorielle fonctionne en comparant le vecteur de requête à tous les vecteurs de la base de données. Les vecteurs les plus semblables au vecteur de requête sont renvoyés en tant que résultats de recherche.
La similarité entre deux vecteurs peut être mesurée à l'aide de différentes métriques de distance. La métrique de distance la plus courante est la similarité cosinus, qui mesure l'angle entre deux vecteurs.
6. Essayer l'extension Vector Search avec Firestore
Avant d'utiliser l'extension Vector Search with Firestore dans l'application iOS que vous avez téléchargée plus tôt dans cet atelier de programmation, vous pouvez tester l'extension dans la console Firebase.
Lire la documentation
Les extensions Firebase incluent une documentation sur leur fonctionnement.
- Une fois l'extension installée, cliquez sur le bouton Commencer.
- Consultez l'onglet "Fonctionnement de l'extension" pour en savoir plus :
- comment calculer les embeddings pour les documents en les ajoutant à la collection
notes
; - comment interroger l'index en appelant la fonction appelable
ext-firestore-vector-search-queryCallable
; - ou comment interroger l'index en ajoutant un document de requête à la collection
_firestore-vector-search/index/queries
. - Il explique également comment configurer une fonction d'embedding personnalisée. Cela peut être utile si aucun des LLM compatibles avec l'extension ne répond à vos besoins et que vous souhaitez utiliser un autre LLM pour calculer les embeddings.
- comment calculer les embeddings pour les documents en les ajoutant à la collection
- Cliquez sur le lien Tableau de bord Cloud Firestore pour accéder à votre instance Firestore.
- Accédez au document
_firestore-vector-search/index
. Il devrait indiquer que l'extension a terminé de calculer les embeddings pour tous les documents de notes que vous avez créés lors d'une étape précédente de cet atelier de programmation. - Pour le vérifier, ouvrez l'un des documents de notes. Vous devriez voir un champ supplémentaire nommé
embedding
de typevector<768>
, ainsi qu'un champstatus
.
Créer un exemple de document
Vous pouvez créer un document dans la console Firebase pour voir l'extension en action.
- Toujours dans l'explorateur de données Firestore, accédez à la collection
notes
et cliquez sur + Ajouter un document dans la colonne du milieu. - Cliquez sur ID automatique pour générer un ID de document unique.
- Ajoutez un champ nommé
text
de type chaîne, puis collez du texte dans le champ value. Il est important que ce ne soit pas du lorem ipsum ni un autre texte aléatoire. Choisissez un article de presse, par exemple. - Cliquez sur Enregistrer.
- Notez que l'extension ajoute un champ d'état pour indiquer qu'elle traite les données.
- Après un court instant, un nouveau champ
embedding
devrait s'afficher avec la valeurvector<768>
.
Effectuer une requête
L'extension Vector Search with Firestore dispose d'une petite fonctionnalité pratique qui vous permet d'interroger l'index de documents sans avoir à connecter d'application.
- Dans la section Firestore de la console Firebase, accédez au document
_firestore-vector-search/index
. - Cliquez sur + Commencer une collection.
- Créez une sous-collection nommée
queries
. - Créez un document et définissez le champ
query
sur un texte qui figure dans l'un de vos documents. Cette fonctionnalité est particulièrement utile pour les requêtes sémantiques, comme "Comment mapper des documents Firestore avec Swift" (à condition qu'au moins l'une des notes que vous avez ajoutées contienne du texte sur ce sujet). - Une erreur peut s'afficher dans l'état
- Cela est dû à un index manquant. Pour configurer la configuration d'index manquante, accédez à la console Google Cloud de votre projet en suivant ce lien, puis sélectionnez votre projet dans la liste
.
- Dans l'explorateur de journaux Cloud, vous devriez maintenant voir un message d'erreur indiquant "FAILED_PRECONDITION: Missing vector index configuration. Veuillez créer l'index requis à l'aide de la commande gcloud suivante : ..."
- Le message d'erreur contient également une commande
gcloud
que vous devez exécuter pour configurer l'index manquant. - Exécutez la commande suivante à partir de votre ligne de commande. Si la CLI
gcloud
n'est pas installée sur votre machine, suivez les instructions ici pour l'installer. La création de l'index prend quelques minutes. Vous pouvez suivre la progression dans l'onglet Index de la section Firestore de la console Firebase.gcloud alpha firestore indexes composite create --project=INSERT-YOUR=PROJECT-ID-HERE --collection-group=notes --query-scope=COLLECTION --field-config=vector-config='{"dimension":"768","flat": "{}"}',field-path=embedding
- Une fois l'index configuré, vous pouvez créer un document de requête.
- Une liste d'ID de documents correspondants devrait maintenant s'afficher dans le champ des résultats
- Copiez l'un de ces ID, puis revenez à la collection
notes
. - Utilisez ⌘+F pour rechercher l'ID du document que vous avez copié. Ce document est celui qui correspond le mieux à votre requête.
7. Implémenter la recherche sémantique
Il est enfin temps de connecter votre application mobile à l'extension Vector Search avec Firestore et d'implémenter une fonctionnalité de recherche sémantique qui permettra à vos utilisateurs de rechercher leurs notes à l'aide de requêtes en langage naturel.
Connecter la fonction appelable pour effectuer des requêtes
L'extension Vector Search with Firestore inclut une fonction Cloud que vous pouvez appeler depuis votre application mobile pour interroger l'index que vous avez créé précédemment dans cet atelier de programmation. Au cours de cette étape, vous allez établir une connexion entre votre application mobile et cette fonction appelable. Le SDK Swift de Firebase inclut des API qui permettent d'appeler des fonctions à distance de manière fluide.
- Revenez à Xcode et assurez-vous d'être dans le projet que vous avez cloné lors d'une étape précédente de cet atelier de programmation.
- Ouvrez le fichier
NotesRepository.swift
. - Recherchez la ligne contenant
private lazy var vectorSearchQueryCallable: Callable
.= functions.httpsCallable("")
Pour appeler une fonction Cloud appelable, vous devez fournir le nom de la fonction que vous souhaitez appeler.
- Accédez à la console Firebase de votre projet, puis ouvrez l'élément de menu Fonctions dans la section Créer.
- La liste des fonctions installées par l'extension s'affiche.
- Recherchez celui nommé
ext-firestore-vector-search-queryCallable
et copiez son nom. - Collez le nom dans votre code. Il devrait maintenant se lire comme suit :
private lazy var vectorSearchQueryCallable: Callable<String, String> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
Appeler la fonction de requête
- Recherchez la méthode
performQuery
. - Appelez votre fonction appelable en invoquant
let result = try await vectorSearchQueryCallable(searchTerm)
Comme il s'agit d'un appel à distance, il peut échouer.
- Ajoutez une gestion des erreurs de base pour détecter les erreurs et les consigner dans la console Xcode.
private func performQuery(searchTerm: String) async -> [String] { do { let result = try await vectorSearchQueryCallable(searchTerm) return [result] } catch { print(error.localizedDescription) return [] } }
Connecter l'UI
Pour permettre aux utilisateurs de rechercher leurs notes, vous allez implémenter une barre de recherche dans l'écran de la liste des notes. Lorsque l'utilisateur saisit un terme de recherche, vous devez appeler la méthode performQuery
que vous avez implémentée à l'étape précédente. Grâce aux modificateurs de vue searchable
et task
fournis par SwiftUI, cela ne nécessite que quelques lignes de code.
- Commencez par ouvrir
NotesListScreen.swift
. - Pour ajouter un champ de recherche à la vue Liste, ajoutez le modificateur de vue
.searchable(text: $searchTerm, prompt: "Search")
juste au-dessus de la ligne.navigationTitle("Notes")
. - Ensuite, appelez la fonction de recherche en ajoutant le code suivant juste en dessous :
.task(id: searchTerm, debounce: .milliseconds(800)) {
await notesRepository.semanticSearch(searchTerm: searchTerm)
}
Cet extrait de code appelle votre méthode semanticSearch
de manière asynchrone. En fournissant un délai de 800 millisecondes, vous demandez au modificateur de tâche de faire rebondir l'entrée de l'utilisateur de 0,8 seconde. Cela signifie que semanticSearch
ne sera appelé que lorsque l'utilisateur aura cessé de taper pendant plus de 0,8 seconde.
Le code devrait se présenter ainsi :
...
List(repository.notes) { note in
NavigationLink(value: note) {
NoteRowView(note: note)
}
.swipeActions {
Button(role: .destructive, action: { deleteNote(note: note) }) {
Label("Delete", systemImage: "trash")
}
}
}
.searchable(text: $searchTerm, prompt: "Search")
.task(id: searchTerm, debounce: .milliseconds(800)) {
await notesRepository.semanticSearch(searchTerm: searchTerm)
}
.navigationTitle("Notes")
...
Exécuter l'application
- Appuyez sur ⌘+R (ou cliquez sur le bouton "Run") pour lancer l'application sur le simulateur iOS.
- Vous devriez voir les mêmes notes que celles que vous avez ajoutées dans l'application plus tôt dans cet atelier de programmation, ainsi que toutes les notes que vous avez ajoutées via la console Firebase.
- Un champ de recherche devrait s'afficher en haut de la liste Notes.
- Saisissez un terme qui figure dans l'un des documents que vous avez ajoutés. Encore une fois, cela fonctionne mieux pour les requêtes sémantiques, comme "Comment puis-je appeler des API Firebase asynchrones depuis Swift ?" (à condition qu'au moins l'une des notes que vous avez ajoutées contienne du texte sur ce sujet).
- Vous vous attendez probablement à voir le résultat de la recherche, mais la vue Liste est vide et la console Xcode affiche un message d'erreur : "The function was called with an invalid argument" (La fonction a été appelée avec un argument non valide).
Cela signifie que vous avez envoyé les données dans un format incorrect.
Analyser le message d'erreur
- Pour identifier le problème, accédez à la console Firebase.
- Accédez à la section Fonctions.
- Recherchez la fonction
ext-firestore-vector-search-queryCallable
, puis ouvrez le menu "Plus" en cliquant sur les trois points verticaux. - Sélectionnez Afficher les journaux pour accéder à l'explorateur de journaux.
- Une erreur devrait s'afficher.
Unhandled error ZodError: [
{
"code": "invalid_type",
"expected": "object",
"received": "string",
"path": [],
"message": "Expected object, received string"
}
]
Cela signifie que vous avez envoyé les données dans un format incorrect.
Utiliser les types de données appropriés
Pour savoir dans quel format l'extension attend les paramètres, consultez sa documentation.
- Accédez à la section Extensions de la console Firebase.
- Cliquez sur Gérer >
.
- Dans la section Fonctionnement de cette extension, vous trouverez une spécification des paramètres d'entrée et de sortie.
- Revenez à Xcode, puis accédez à
NotesRepository.swift
. - Ajoutez le code suivant au début du fichier :
private struct QueryRequest: Codable { var query: String var limit: Int? var prefilters: [QueryFilter]? } private struct QueryFilter: Codable { var field: String var `operator`: String var value: String } private struct QueryResponse: Codable { var ids: [String] }
QueryRequest
correspond à la structure du paramètre d'entrée attendu par l'extension, conformément à sa documentation. Il contient également un attributprefilter
imbriqué dont vous aurez besoin plus tard.QueryResponse
correspond à la structure de la réponse de l'extension. - Recherchez la spécification de la fonction appelable et mettez à jour les types d'entrée et de sortie.
private lazy var vectorSearchQueryCallable: Callable<QueryRequest, QueryResponse> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
- Mettez à jour l'appel de la fonction appelable dans
performQuery
.private func performQuery(searchTerm: String) async -> [String] { do { let queryRequest = QueryRequest(query: searchTerm, limit: 2) let result = try await vectorSearchQueryCallable(queryRequest) print(result.ids) return result.ids } catch { print(error.localizedDescription) return [] } }
Exécuter à nouveau l'application
- Exécuter à nouveau l'application
- Saisissez une requête de recherche contenant des termes inclus dans l'une de vos notes.
- Une liste filtrée de notes devrait maintenant s'afficher.
Préfiltrer les données utilisateur
Avant de vous mettre à danser pour fêter ça, sachez qu'il y a un problème avec la version actuelle de l'application : l'ensemble de résultats contient des données de tous les utilisateurs.
Pour le vérifier, exécutez l'application sur un autre simulateur et ajoutez d'autres documents. Les nouveaux documents ne s'afficheront que dans ce simulateur. Si vous exécutez à nouveau l'application sur l'autre simulateur, vous ne verrez que les documents que vous avez créés la première fois.
Si vous effectuez une recherche, vous remarquerez que l'appel à vectorSearchQueryCallable
renvoie des ID de document qui peuvent appartenir à l'autre utilisateur. Pour éviter cela, nous devons utiliser un préfiltre.
Dans performQuery
, mettez à jour votre code comme suit :
let prefilters: [QueryFilter] = if let uid = user?.uid {
[QueryFilter(field: "userId", operator: "==", value: uid)]
}
else {
[]
}
let queryRequest = QueryRequest(query: searchTerm,
limit: 2,
prefilters: prefilters)
Les données seront alors préfiltrées en fonction de l'ID de l'utilisateur connecté. Comme vous pouvez l'imaginer, cela nécessite la mise à jour de l'index Firestore.
Exécutez la commande suivante à partir de la ligne de commande pour définir un nouvel index Firestore qui inclut à la fois userId
et les embeddings vectoriels dans le champ embedding
.
gcloud alpha firestore indexes composite create --project=INSERT-YOUR-PROJECT-ID-HERE --collection-group=notes --query-scope=COLLECTION --field-config=order=ASCENDING,field-path=userId --field-config=vector-config='{"dimension":"768","flat": "{}"}',field-path=embedding
Une fois l'index créé, exécutez à nouveau l'application pour vérifier qu'elle fonctionne comme prévu.
8. Félicitations
Bravo ! Vous avez terminé cet atelier de programmation.
Dans cet atelier de programmation, vous avez appris à :
- Configurer une base de données Cloud Firestore avec la recherche sémantique activée
- Créez une application SwiftUI simple pour interagir avec la base de données.
- Implémenter une barre de recherche à l'aide du modificateur de vue "searchable" et du modificateur de tâche de SwiftUI.
- Appelez une fonction Cloud pour effectuer une recherche sémantique dans la base de données à l'aide de l'interface Callable du SDK Firestore.
Grâce aux connaissances acquises dans cet atelier de programmation, vous pouvez désormais créer des applications puissantes qui exploitent les capacités de recherche sémantique de Cloud Firestore pour offrir aux utilisateurs une expérience de recherche plus intuitive et efficace.
Pour en savoir plus sur le nouveau champ vectoriel de Firestore et sur le calcul des embeddings vectoriels, consultez la documentation.