Google Duet AI pour les développeurs

Un nouveau concurrent dans l’univers de la génération de code

Quentin Collette
Lior Agency
8 min readSep 12, 2023

--

“Vas-y, code à ma place vu que tu fais le malin !”

Depuis l’annonce de Duet AI par Google en mai dernier, la firme californienne cherche à couper l’herbe sous le pied d’OpenAI et de chatGPT, en proposant un assistant virtuel aux capacités similaires. Son petit plus ? Il est totalement intégré à Google Workspace, et peut ainsi être utilisé pour rédiger des mails, générer des Google Docs ou des Slides, créer des illustrations (encore impossible via chatGPT) sans jamais quitter l’interface Workspace.

Aujourd’hui, Google propose également une version “Google Cloud” de Duet AI, afin de simplifier l’utilisation de différents services de la plateforme GCP, par exemple :

  • Analyser des données en générant des requêtes SQL à partir de questions
  • Offrir des suggestions ou de l’assistance pour analyser des erreurs
  • Mettre en place des règles IAM
  • Générer et debugger du code (22 languages supportés), écrire des tests unitaires

🤫Encore en phase preview et accessible sur demande, j’ai voulu tester les capacités de développement de Duet AI via le plugin Cloud Code intégré à l’éditeur VS Code. Ce plugin vient directement concurrencer des solutions largement adoptées que sont Codeium et GitHub Copilot. Voyons ce qu’il a dans le ventre !

🎯 Mon objectif est simple : créer un projet minimaliste en python et le déployer sur Cloud Run, en utilisant uniquement Duet AI.

🧔‍♂️Pour mettre cela en pratique, essayons de créer une page web qui renvoie un Chuck Norris fact aléatoirement.

Bonus : je compare ensuite le résultat avec Codeium. #LaFinVaVousEtonner !

L’interface Duet AI Chat de VSCode une fois le plugin configuré (il doit être relié à un projet GCP)

Après configuration du plugin, vous obtiendrez un volet de chat vous permettant d’interagir avec Duet AI directement dans VSCode. Premier constat, il n’est pas très loquace dans ses réponses, mais à priori il speak la France 🇫🇷 (je n’ai pas trouvé les langues supportées dans la doc).

L’idée est de créer le prompt le plus précis possible, pour obtenir l’ensemble des étapes à réaliser en partant de 0, comme si j’étais un noob du python et de Google Cloud.

Prompt 1 : Aide-moi à créer un projet python, en utilisant la librairie flask, afin de créer une application qui affiche une page web. Cette page web s’intitule “Chuck Norris Facts” et elle doit afficher une image de Chuck Norris , avec une blague de Chuck Norris centrée en-dessous de l’image. A chaque fois que la page est rafraîchie, tu dois afficher une nouvelle blague. Tu peux utiliser l’api https://api.chucknorris.io/jokes/random pour cela. L’application doit ensuite être déployée sur Cloud Run

Première remarque : le lien imgur (i.imgur.com/0mGK95X.jpg) n’existe pas, mais cela est normal, car c’est un lien vraisemblable, donc valable du point de vue d’un LLM.

Deuxième remarque : le code comporte 2 erreurs.

  1. La librairie requests, permettant d’appeler l’API n’est pas importée.
  2. Il n’est pas précisé que le fichier index.html doit se trouver dans le dossier templates.

Donc on se permet de le signaler à notre ami Duet AI.

Pour l’autre erreur, on lui demande de se débrouiller avec le message.

Plus de réponse en français, je tente en anglais !

Note : le message “Sorry I can’t help you with this” apparaît régulièrement au cours de mes tests. C’est plus un problème de stabilité (l’outil en toujours en beta) qu’un lien avec la langue.

Malheureusement, il continue à me dire que le fichier index.html doit être au même niveau que app.py. Sauf qu’il ferait mieux de lire la doc ! Donc on lui dit calmement.

Alors il s’excuse, formidable, sauf que maintenant, il me dit que je dois changer le chemin du fichier dans le code, ce qui est faux. Donc, je ne touche pas au app.py, et je déplace mon fichier index.html dans un sous-dossier “templates”.

Et après ces échanges laborieux, voici le résultat en local ! ⬇️

Le lien étant inexistant, pas de beau portait de Chuck. Il a aussi oublié de centrer l’image.🧅

Tout ça pour ça ?! Et en plus il me laisse me débrouiller pour déployer sur Cloud Run. Sympa Martine. 🤷

On respire, on reprend le prompt, et on applique quelques règles de base du prompt engineering :

  • On lui colle un rôle
  • On lui demande de nous expliquer comme si on était son stagiaire, étape par étape.

Prompt 2 : Tu es un expert en développement Python sur Google Cloud. Aide-moi à créer un projet python, en utilisant la librairie flask, afin de créer une application qui affiche une page web. Cette page web s’intitule “Chuck Norris Facts” et elle doit afficher une image de Chuck Norris , avec une blague de Chuck Norris centrée en-dessous de l’image. A chaque fois que la page est rafraîchie, tu dois afficher une nouvelle blague. Tu peux utiliser l’api https://api.chucknorris.io/jokes/random pour cela. L’application doit ensuite être déployée sur Cloud Run. J’ai besoin que tu me guides étape par étape pour créer ce projet, comme si j’étais un développeur débutant.

Remarque 1 : c’est déjà beaucoup plus détaillé, et on a les instructions pour déployer sur Cloud Run. Par contre il a zappé le pip install requests même s’il l’importe correctement cette fois.

Remarque 2 : il ne nous dit toujours pas de mettre index.html dans un sous-dossier templates. Soyons indulgents… 🧘‍♂️

Deuxième test en local. J’en profite pour générer une image avec Dall-e, l’ajouter manuellement dans un répertoire static et modifier la balise img pour qu’il aille chercher Chuck.

<img src="{{url_for('static', filename='chuck.jpeg')}}" alt="Chuck Norris">

Et voilà le travail ⬇️

Passons maintenant au déploiement sur Cloud Run.

Les explications pour créer le Dockerfile et construire l’image à partir de notre projets sont fonctionnelles. MAIS encore quelques remarques.

  1. Il nous propose d’utiliser l’url gcr.io qui correspond au service déprécié Container Registry au lieu de proposer le nouveau service Artifact Registry. Dommage.
Bon, j’aurais essayé. Le code python après mes questions est vraisemblablement un bug de l’UI.

2. Par défaut, le port utilisé sur Cloud Run est le 8080, à l’inverse de Flask qui utilise le 5000. Modifions le fichier app.py en changeant le port par défaut app.run(port=8080, host=”0.0.0.0")

Sans rentrer dans les détails, afin d’exécuter les étapes 12 et 13 correctement, il est nécessaire de créer un nouveau repository dans le service Artifact Registry de notre projet GCP, nous l’appelerons “docker-registry”.

Ensuite, on build l’image :

docker build -t facts-lior-agency .

Note : si vous êtes sur un Mac avec processeur M1/M2, il faut utiliser la commande suivante à la place (source)

docker buildx build --platform linux/amd64 -t facts-lior-agency .

Puis on tague et on pousse l’image vers Artifact Registry :

docker tag facts-lior-agency europe-west9-docker.pkg.dev/[PROJECT_ID]/docker-registry/facts-lior-agency

docker push europe-west9-docker.pkg.dev/[PROJECT_ID]/docker-registry/facts-lior-agency

Et enfin, on déploie (et on rejoue avec Dall-e) :

gcloud run deploy --image europe-west9-docker.pkg.dev/[PROJECT_ID]/docker-registry/facts-lior-agency

Ca y est, c’est déployé Didier ! ⬇️

Le projet déployé sur Cloud Run 🥄🥩

Là encore, difficile de s’en sortir uniquement avec les instructions de Duet AI. Les stagiaires vont encore avoir la vie dure quelques temps.

🥊 Duet AI vs Codeium

Comme promis, en repartant de mon prompt n°2, voici le résultat obtenu avec Codeium.

Le niveau de détail est plus élevé : non seulement il liste les étapes une à une, mais propose aussi une explication de celles-ci.

Un peu de pédagogie 🤓, c’est toujours bon à prendre.

Comme Duet AI, il oublie de mentionner l’installation du package requests.

Au niveau du code, pas d’erreur à signaler, et la création d’un dossier templates est bien mentionnée.

Maintenant, comment se débrouille-t-il avec les instructions spécifique à Google Cloud ?

Pour le déploiement sur Cloud Run, les commandes gcloud auth login

et gcloud config set project sont rappelées, ce qui est appréciable.

On retrouve ensuite la même problématique que Duet AI sur la dépréciation du service Container Registry. Je tente la même chose qu’avec Duet pour le mettre sur la piste, au début il hallucine un peu mais ensuite il me donne la bonne réponse. \o/

Bilan

Le produit étant toujours en phase de preview, évitons de tirer des conclusions hâtives. Au moment de réaliser ce test (septembre 2023) force est de constater que Duet AI a encore du chemin à faire pour rivaliser avec les solutions actuelles.

L’intégration au plugin Cloud Code fonctionne bien, mais les réponses actuelles manquent de précisions, de ‘pédagogie’, et comportent des erreurs assez basiques. La stabilité est encore perfectible, il faut parfois renvoyer 3 ou 4 fois le même message pour obtenir une réponse. En comparant avec Codeium, ces problématiques sont d’autant plus flagrantes et pénalisante.

Il ne fait aucun doute que le produit va s’améliorer dans les semaines et mois à venir. De plus, dans un contexte professionnel, il est indispensable de se poser la question de la protection des données transmises lors de l’utilisation de ce type de services. A ce sujet, Google propose une politique stricte et rassurante qui pourrait faire pencher la balance.

Disclaimer : aucun LLM n’a été maltraité durant la rédaction de cet article.

Intéressé par les applications de l’IA générative en entreprise ? Faire signe à Lior Agency 👋

--

--

Quentin Collette
Lior Agency

COO @ Lior Agency IA & Web3 - Engineer, passionate about Generative AI, Web3, software, Cloud.