(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:

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