(Cet article de blog fait suite Ă cet article focalisé sur ZurichGPT et sa version lausannoise LausanneGPT)
Tu peux dĂ©sormais poser Ă GenevaGPT toute question sur la République et Canton de Genève. Et obtenir une rĂ©ponse directe Ă ta question, et pas uniquement une collection de liens de pages potentiellement pertinentes.
Le bot va pouvoir renvoyer des rĂ©ponses utiles, pour autant que le contenu du site puisse couvrir la requĂȘte. Et pas nĂ©cessaire de poser sa question en français, d'autres langues fonctionnent Ă©galement, le robot rĂ©pondant dans la mĂȘme langue.
Alors, quelles questions poser? Voici quelques exemples:
- Combien d'habitants compte Genève?
- Qui est syndic de Lausanne?
- La plage des Eaux-Vives est-elle ouverte toute l'année?
- Quelles sont les dates de vacances scolaires 2024?
- Que faire pour obtenir un nouveau passeport?
- Quelle est la hauteur du jet d'eau de genève?
- Comment puis-je recycler mes pneus?
- Comment Genève s'engage-t-elle pour le climat?
- Quand Rousseau a-t-il vécu à Genève?
- Que fait Genève pour favoriser le cyclisme et la mobilité douce?
- Que fait Genève pour être plus accueillante pour les piétons?
- Genève produit-elle de l'énergie renouvelable?
- Existe-t-il un réseau de vélos en libre-service?
Et ce ne sont lĂ que quelques exemples de questions Ă poser.
Le bot n'est pas infaillible, et il est fortement recommandé de vérifier les réponses avec les pages officielles fournies pour s'assurer de leur exactitude.
Au niveau technique: comment a été développé GenevaGPT
Inspiré par un article de blog de Supabase partagé sur notre Slack, voici ce que nous avons fait:
Récupérer et indexer le contenu:
- Pour le backend, nous avons utilisé NestJS.
- Le frontend est une application React trÚs simple, qui envoie la question au backend et affiche le résultat.
- Nous avons mis en place une base de données utilisant PostgreSQL et l'extension pgvector.
- Nous avons parcouru l'intégralité du site web de maniÚre responsable en utilisant SimpleCrawler et avons introduit les données dans la base de données.
- Nous avons extrait le contenu pertinent grùce à Cheerio et l'avons intégré dans la base de données.
- Nous avons ensuite envoyé ces extraits de texte aux API d'intégration d'OpenAI et avons stocké les intégrations reçues dans la base de données.
Interroger le contenu:
- DÚs réception d'une question, nous l'envoyons aux API d'intégration d'OpenAI pour obtenir un vecteur d'intégration.
- Nous utilisons ce vecteur pour rechercher dans la base de données, extrayant des extraits de textes et URLs.
- Un prompt est créé, incluant les extraits jusqu'à ce que la taille limite des caractÚres soit atteinte.
- Ces informations sont ensuite envoyées à l'API d'OpenAI "createChatCompletion" et le résultat est renvoyé au navigateur avec Server Sent Events.
- Tous les liens utiles trouvés dans notre base de données sont aussi affichés pour référence et source.
Nous avons rĂ©cemment procĂ©dĂ© Ă quelques ajustements. Nous n'utilisons dĂ©sormais que les premiers extraits de contenu pour le prompt, en remplissant la fin avec les liens et le titre uniquement. Cela donne un peu plus de contexte Ă ChatGPT, mais apparemment pas autant que le contenu entier. Au dĂ©part, nous avons essayĂ© d'envoyer uniquement des liens, mais cela n'a pas toujours fourni des rĂ©sultats concluants et a mĂȘme conduit Ă des rĂ©ponses "hallucinĂ©es", puisque gpt-3.5 ne rĂ©sout pas rĂ©ellement tous ces liens.
Attention, cet outil n'est pas affiliĂ© Ă Genève et il sert principalement d'Ă©tude de faisabilitĂ©.
Cependant, nous sommes ravis du potentiel de cette technologie pour améliorer l'accessibilité à l'information publique, et nous espérons que tu prendras plaisir à explorer GenÚve avec GenevaGPT. Et si tu cherches des infos sur le canton de Zurich, nous avons aussi mis en place ZueriCantonGPT.
Photo par Lukas Blaskevicius sur Unsplash