{"id":5074,"date":"2024-05-23T05:02:18","date_gmt":"2024-05-23T04:02:18","guid":{"rendered":"https:\/\/www.ralentirtravaux.com\/le_blog\/?p=5074"},"modified":"2024-05-31T03:23:03","modified_gmt":"2024-05-31T02:23:03","slug":"lia-pour-aider-non-pour-remplacer","status":"publish","type":"post","link":"https:\/\/www.ralentirtravaux.com\/le_blog\/lia-pour-aider-non-pour-remplacer\/","title":{"rendered":"L&rsquo;IA pour aider, non pour remplacer"},"content":{"rendered":"<p>Cela faisait un moment que je voulais \u00e0 nouveau m&rsquo;essayer \u00e0 construire un tableau du type Excel ou Google Sheets me permettant, \u00e0 l&rsquo;aide de l&rsquo;intelligence artificielle, de g\u00e9n\u00e9rer des appr\u00e9ciations, non pas pour \u00e9crire des bulletins \u00e0 ma place, mais pour m&rsquo;assister dans la t\u00e2che d&rsquo;analyse de donn\u00e9es toujours plus nombreuses.<\/p>\n<p>Voici comment \u00e7a s&rsquo;est pass\u00e9 et de quelle fa\u00e7on je m&rsquo;y suis pris.<\/p>\n<h1>En lisant le Times<\/h1>\n<p>Dimanche dernier, je lisais dans le Times un article intitul\u00e9 <a href=\"https:\/\/www.thetimes.co.uk\/article\/how-ai-save-nhs-tech-health-service-jntvbtcjk\">AI could help save the NHS \u2014 but not in the ways you may think<\/a>. On pouvait y lire que les m\u00e9decins passent un temps consid\u00e9rable \u00e0 r\u00e9diger de la paperasse administrative et \u00e0 mettre en forme les notes qu&rsquo;ils prennent apr\u00e8s une consultation pour le suivi de leurs patients.<\/p>\n<blockquote>\n<p>Dom Pimenta, a 36-year-old cardiologist and the founder of Tortus, said: \u201cIf you look at the maths, up to 60 per cent of the time is spent with computers, which means 40 per cent of the time is spent with patients.<br \/>\n\u201cIf you get that computer time down to 15 per cent, you are getting 85 per cent of the time with patients. Imagine what the NHS could do with that many more doctors or nurses.\u201d <sup><a href=\"#note1\">1<\/a><\/sup><\/p>\n<\/blockquote>\n<p>L&rsquo;IA pourrait donc aider les m\u00e9decins \u00e0 r\u00e9duire ce temps qu&rsquo;ils pourraient ainsi consacrer \u00e0 leurs patients plut\u00f4t que de s&rsquo;asseoir devant leur ordinateur.<\/p>\n<p>Je ne suis pas all\u00e9 explorer ce que propose <a href=\"https:\/\/tortus.ai\">Tortus<\/a> (\u00ab\u00a0Doctors, not data clerks\u00a0\u00bb, ai-je pu toutefois entrapercevoir), mais je comprends \u00e0 la lecture de l&rsquo;article qu&rsquo;il s&rsquo;agit d&rsquo;une IA qui pourrait \u00ab\u00a0\u00e9couter\u00a0\u00bb durant la consultation et r\u00e9diger automatiquement une synth\u00e8se, ce qui ne va pas sans poser diff\u00e9rents probl\u00e8mes en termes de vie priv\u00e9e, mais passons.<\/p>\n<h1>L&rsquo;\u00eatre humain et la machine<\/h1>\n<p>Je trouve cela tr\u00e8s int\u00e9ressant parce que l&rsquo;article fait valoir que l&rsquo;adoption de l&rsquo;IA sera lente \u00e0 p\u00e9n\u00e9trer le domaine m\u00e9dical pour de nombreuses raisons, mais aussi parce que de toutes les merveilles que notre technologie peut produire, celle qui a le plus de chance d&rsquo;\u00eatre rapidement adopt\u00e9e est cette modeste t\u00e2che de suppl\u00e9er l&rsquo;\u00eatre humain dans ses fonctions administratives et non de le remplacer. En somme, les brillantes technologies que des Oppenheimmer repentis nous annoncent comme susceptibles de mettre fin \u00e0 l&rsquo;humanit\u00e9 sont en train de rentrer par la petite porte de la prose administrative plut\u00f4t que celle du grand remplacement par des IA aux commandes de scanners automatis\u00e9s. Int\u00e9ressant, non ? In fine, c&rsquo;est la m\u00eame histoire depuis Kasparov et qui, dans les r\u00e9flexions subs\u00e9quentes du champion, a donn\u00e9 naissance \u00e0 l&rsquo;image du centaure et que <a href=\"https:\/\/www.penguin.co.uk\/books\/460207\/co-intelligence-by-mollick-ethan\/9780753560778\">l&rsquo;auteur de Co-Intelligence<\/a> semble reprendre \u00e0 son compte sous une autre appellation.<\/p>\n<p>Mais je me suis dit que, de fait, il en allait de m\u00eame avec les enseignants. Comment faire pour qu&rsquo;ils passent plus de temps avec leurs \u00e9l\u00e8ves plut\u00f4t que d&rsquo;\u00e9crire des mails ou des bulletins\u00a0? Comment leur permettre d&rsquo;acc\u00e9l\u00e9rer toutes les t\u00e2ches qui les rapprochent de leur ordinateur et les \u00e9loignent de leurs \u00e9l\u00e8ves\u00a0? On peut acheter, s&rsquo;abonner, t\u00e9l\u00e9charger un tas de trucs, mais n&rsquo;est-ce pas un peu dommage\u00a0? Ne peut-on profiter de cette brillante technologie pour b\u00e2tir soi-m\u00eame ses propres outils\u00a0? Je me suis alors rappel\u00e9 qu&rsquo;il y avait quelque chose \u00e0 faire m\u00eame si mes comp\u00e9tences en mati\u00e8re de code sont d\u00e9sastreuses. Apr\u00e8s tout, ne suffit-il pas de demander \u00e0 chatGPT\u00a0? C&rsquo;est ce que j&rsquo;ai fait (la conversation peut \u00eatre consult\u00e9e <a href=\"https:\/\/chatgpt.com\/share\/eccf99f7-6a4e-4758-8a4e-4375bba1ec7f\">en cliquant sur ce lien<\/a>).<\/p>\n<h1>Un tableur pour aider dans la r\u00e9daction des appr\u00e9ciations<\/h1>\n<p>Pour mon premier essai, j&rsquo;ai demand\u00e9 \u00e0 chatGPT d&rsquo;\u00e9crire un script pour Google Sheets permettant d&rsquo;utiliser l&rsquo;API d&rsquo;OpenAI. <a href=\"https:\/\/openai.com\/api\/pricing\/\">Compte tenu du faible co\u00fbt que cela repr\u00e9sente<\/a>, on pourrait imaginer investir dans ce genre de choses plut\u00f4t que des abonnements \u00e0 20 euros le mois. Comme on peut le voir ci-dessous, le co\u00fbt du token (pour GPT 4) est de $0.003.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-content\/uploads\/2024\/05\/tokens.png\" alt=\"Prix des tokens\" width=\"800\" class=\"aligncenter\"><\/p>\n<p>Bref, assez rapidement, j&rsquo;ai eu mon script que voici (apr\u00e8s quelques essais\/erreurs).<\/p>\n<pre><code class=\"language-JS\">const OPENAI_API_KEY = 'Ins\u00e9rer votre cl\u00e9';\n\nconst OPENAI_API_URL = 'https:\/\/api.openai.com\/v1\/chat\/completions';\n\n\/**\n * Submits a prompt to GPT and returns the completion\n *\n * @param {string} prompt Prompt to submit to GPT\n * @param {float} temperature Model temperature (0-1)\n * @param {string} model Model name (e.g., gpt-4)\n * @param {int} maxTokens Max Tokens (&lt; 4000)\n * @return Completion from GPT\n * @customfunction\n *\/\nfunction GPT(prompt, temperature = 0.6, model = 'gpt-4', maxTokens = 256) {\n  var data = {\n    model: model,\n    messages: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: prompt}],\n    temperature: temperature,\n    max_tokens: maxTokens\n  };\n  var options = {\n    method: 'post',\n    contentType: 'application\/json',\n    payload: JSON.stringify(data),\n    headers: {\n      'Authorization': `Bearer ${OPENAI_API_KEY}`,\n      'Content-Type': 'application\/json'\n    }\n  };\n  var response = UrlFetchApp.fetch(OPENAI_API_URL, options);\n  var responseData = JSON.parse(response.getContentText());\n  if (responseData.choices &amp;&amp; responseData.choices.length &gt; 0) {\n    return responseData.choices[0].message.content.trim();\n  } else {\n    return 'No response from OpenAI API';\n  }\n}\n\n\/**\n * Submits examples to GPT and returns the completion\n *\n * @param {Array&lt;Array&lt;string&gt;&gt;} examples_input Range of cells with input examples\n * @param {Array&lt;Array&lt;string&gt;&gt;} examples_output Range of cells with output examples\n * @param {string} input Cell to pass as input for completion\n * @param {float} temperature Model temperature (0-1)\n * @param {string} model Model name (e.g., gpt-4)\n * @param {int} maxTokens Max Tokens (&lt; 4000)\n * @return Completion from GPT\n * @customfunction\n *\/\nfunction GPT_RANGE(examples_input, examples_output, input, temperature = 0.6, model = 'gpt-4', maxTokens = 256) {\n  let prompt = `I am an input\/output bot. Given example inputs, I identify the pattern and produce the associated outputs.`;\n\n  for (let i = 0; i &lt; examples_input.length; i++) {\n    let example_input = examples_input[i][0];\n    let example_output = examples_output[i][0];\n\n    prompt += `\\n\\nInput: ${example_input}\\nOutput: ${example_output}`;\n  }\n\n  prompt += `\\n\\nInput: ${input}\\nOutput:`;\n\n  return GPT(prompt, temperature, model, maxTokens);\n}\n<\/code><\/pre>\n<p>Pour r\u00e9sumer, tout ce que vous avez \u00e0 faire est de<\/p>\n<ul>\n<li>cr\u00e9er un compte sur <a href=\"https:\/\/platform.openai.com\/\">OpenAI<\/a>, acheter quelques cr\u00e9dits et obtenir une cl\u00e9 API<\/li>\n<li>cr\u00e9er un Google Sheets<\/li>\n<li>aller dans <code>Extensions<\/code> &gt; <code>Apps Script<\/code><\/li>\n<li>coller le code ci-dessus en incluant votre cl\u00e9 API<\/li>\n<\/ul>\n<p>Vous pouvez aussi <a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1nksDVP86NT0SKzJO0cAX6i32o8pYtKhPZQKV4woQZ_A\/copy\">t\u00e9l\u00e9charger ce mod\u00e8le<\/a>, mais n&rsquo;oubliez pas d&rsquo;ins\u00e9rer votre cl\u00e9.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-content\/uploads\/2024\/05\/GPT-Sheets.png\" alt=\"GPT dans Google Sheets\" width=\"800\" class=\"aligncenter\"><\/p>\n<p>Sur ce mod\u00e8le, comme vous pouvez le voir sur la capture d&rsquo;\u00e9cran ci-dessus, j&rsquo;ai indiqu\u00e9 plusieurs choses.<\/p>\n<p>Tout d&rsquo;abord, il y a le noms des \u00e9l\u00e8ves (de faux noms \u00e9videmment).<\/p>\n<p>Ensuite, il y a des notes (fausses \u00e9galement, g\u00e9n\u00e9r\u00e9es al\u00e9atoirement avec la fonction RANDBETWEEN).<\/p>\n<pre><code>=RANDBETWEEN(&quot;0&quot;, &quot;20&quot;)\n<\/code><\/pre>\n<p>Il y a la moyenne des notes (facile).<\/p>\n<pre><code>=AVERAGE(B2:E2)\n<\/code><\/pre>\n<p>Un peu de logique maintenant avec une bonne s\u00e9rie de IF\u00a0(histoire d&rsquo;aider l&rsquo;IA si besoin)\u00a0:<\/p>\n<pre><code>=IF(I2 &gt;= 16, &quot;F\u00e9licitations!&quot;,\n    IF(AND(I2 &lt;= 15, I2 &gt; 13), &quot;Bon travail !&quot;,\n        IF(AND(I2 &lt;= 12, I2 &gt; 10), &quot;Poursuivre les efforts et continuer sans se d\u00e9courager&quot;,\n            IF(AND(I2 &lt; 10, I2 &gt; 5), &quot;Revoir les le\u00e7ons et s'entra\u00eener. Venir en soutien&quot;,\n    &quot;Contacter les parents&quot;\n                ) \n            ) \n        ) \n    )\n<\/code><\/pre>\n<p>Et enfin, notre GPT (c&rsquo;est en fait le prompt qui marche uniquement parce que nous avons ins\u00e9r\u00e9 le script ci-dessus).<\/p>\n<pre><code>=GPT(&quot;\u00c9cris le bulletin de cet \u00e9l\u00e8ve en 4 ou 6 phrases pour '&quot;&amp;A2&amp;&quot;'. Prends en consid\u00e9ration la moyenne des notes se trouvant en '&quot;&amp;I2&amp;&quot;' ainsi que les notes se trouvant de '&quot;&amp;B2&amp;&quot;' \u00e0 '&quot;&amp;H2&amp;&quot;' ainsi que le bilan en '&quot;&amp;K2&amp;&quot;'&quot;)\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-content\/uploads\/2024\/05\/graphiques.png\" alt=\"Des graphiques en plus\" width=\"800\" class=\"aligncenter\"><\/p>\n<p>Vous remarquerez que je me suis aussi amus\u00e9 \u00e0 ins\u00e9rer un petit graphique qui indique la progression.<\/p>\n<pre><code>=SPARKLINE(B2:H2, {&quot;linewidth&quot;, 2})\n<\/code><\/pre>\n<p>Et enfin vous voudrez bien vous rappeler que notre <a href=\"https:\/\/dl.acm.org\/doi\/10.1145\/3442188.3445922\">stochastic parrot<\/a> n&rsquo;a pas pour fonction de vous remplacer ni d&rsquo;\u00e9crire les bulletins \u00e0 notre place,  mais de g\u00e9n\u00e9rer (en plusieurs versions si n\u00e9cessaire) des conseils et analyser des r\u00e9sultats qu&rsquo;il vous revient de relire, corriger, compl\u00e9ter et assumer puisqu&rsquo;en derni\u00e8re instance, vous restez l&rsquo;auteur et que c&rsquo;est votre responsabilit\u00e9 qui est engag\u00e9e. Enfin (encore), on gardera \u00e0 l&rsquo;esprit que l&rsquo;IA est tr\u00e8s, tr\u00e8s forte pour produire le m\u00eame verbiage creux dont nous avions auparavant la g\u00eanante exclusivit\u00e9 et qui est donc maintenant capable, comme un enseignant qui au comble de l&rsquo;ennui et qui aurait d\u00e9j\u00e0 rempli 237 bulletins, d&rsquo;\u00e9crire des banalit\u00e9s du type \u00ab Doit se mettre au travail blablabla\u00a0\u00bb.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-content\/uploads\/2024\/05\/gpt4-sheets-1.gif\" class=\"aligncenter\" alt=\"Gif anim\u00e9 explicatif\" width=\"800\"><\/p>\n<p>Je dis souvent \u00e0 qui veut l&rsquo;entendre quand on m&rsquo;interroge sur le sujet qu&rsquo;il faut consid\u00e9rer que l&rsquo;IA vous assiste, mais ne se substitue pas \u00e0 vous. Elle le fait \u00e0 la mani\u00e8re d&rsquo;un assistant plein de bonne volont\u00e9, un jeune assistant, probablement un stagiaire pour lequel il faut tout, mais alors absolument tout relire.<\/p>\n<p>Mais je me suis dit qu&rsquo;on pouvait continuer longtemps comme \u00e7a et j&rsquo;ai encore demand\u00e9 des choses \u00e0 chatGPT.<\/p>\n<h1>Votre traitement de texte est votre assistant<\/h1>\n<p>Cette fois, l&rsquo;id\u00e9e est d&rsquo;avoir GPT dans Google Docs. Ce n&rsquo;est pas tr\u00e8s original. Gemini r\u00f4de d\u00e9j\u00e0 par l\u00e0. Des extensions proposent d\u00e9j\u00e0 ce genre de choses, mais en proc\u00e9dant ainsi (c&rsquo;est-\u00e0-dire en faisant les choses soi-m\u00eame), on l&rsquo;a dit, c&rsquo;est tr\u00e8s, tr\u00e8s peu cher. Une requ\u00eate est de l&rsquo;ordre de $0.009 et des brouettes. Et on peut se construire son petit bot selon ses propres besoins (laissez-moi un peu de temps, et je peaufinerai tout cela).<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-content\/uploads\/2024\/05\/GPT-Docs.png\" alt=\"GPT dans Google Docs\" width=\"800\" class=\"aligncenter\"><\/p>\n<p>J&rsquo;en ai fait plusieurs versions. Dans la deuxi\u00e8me, j&rsquo;ai demand\u00e9 que GPT soit capable de lire le contenu du document. Voici le script.<\/p>\n<pre><code class=\"language-JS\">const OPENAI_API_KEY = ''; \/\/ &lt;- PASTE YOUR SECRET KEY HERE\nconst OPENAI_API_URL = 'https:\/\/api.openai.com\/v1\/chat\/completions';\n\n\/**\n * Fetch completion from OpenAI API\n * \n * @param {string} prompt The input prompt for GPT-4\n * @param {string} content The content of the Google Docs\n * @param {string} model The model to use (e.g., gpt-4)\n * @param {float} temperature The sampling temperature (0-1)\n * @param {int} maxTokens The maximum number of tokens to generate\n * @return {string} The generated completion\n *\/\nfunction fetchCompletion(prompt, content, model = 'gpt-4', temperature = 0.6, maxTokens = 256) {\n  var data = {\n    model: model,\n    messages: [\n      {&quot;role&quot;: &quot;system&quot;, &quot;content&quot;: &quot;You are an assistant that helps improve and process text.&quot;},\n      {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: content},\n      {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: prompt}\n    ],\n    temperature: temperature,\n    max_tokens: maxTokens\n  };\n  var options = {\n    method: 'post',\n    contentType: 'application\/json',\n    payload: JSON.stringify(data),\n    headers: {\n      'Authorization': `Bearer ${OPENAI_API_KEY}`,\n      'Content-Type': 'application\/json'\n    }\n  };\n  var response = UrlFetchApp.fetch(OPENAI_API_URL, options);\n  var responseData = JSON.parse(response.getContentText());\n  if (responseData.choices &amp;&amp; responseData.choices.length &gt; 0) {\n    return responseData.choices[0].message.content.trim();\n  } else {\n    return 'No response from OpenAI API';\n  }\n}\n\n\/**\n * Process the content of the Google Doc with OpenAI API\n *\/\nfunction processContent() {\n  var doc = DocumentApp.getActiveDocument();\n  var body = doc.getBody();\n  var content = body.getText();\n  var prompt = DocumentApp.getUi().prompt('Enter your prompt for GPT-4').getResponseText();\n  var processedContent = fetchCompletion(prompt, content);\n  body.appendParagraph('\\nProcessed Content:\\n');\n  body.appendParagraph(processedContent);\n}\n\n\/**\n * Create a custom menu in the Google Docs UI\n *\/\nfunction onOpen() {\n  DocumentApp.getUi().createMenu('GPT Assistant')\n      .addItem('Process Content', 'processContent')\n      .addToUi();\n}\n\n<\/code><\/pre>\n<p>Voici le prompt que j&rsquo;ai utilis\u00e9 pour corriger une r\u00e9daction (g\u00e9n\u00e9r\u00e9e par Claude qui, avec complaisance, a ajout\u00e9 pas mal d&rsquo;erreurs d&rsquo;orthographe que chatGPT n&rsquo;a qu&rsquo;une envie, c&rsquo;est de corriger)\u00a0:<\/p>\n<blockquote>\n<p>Propose des conseils de correction sur ce texte \u00e9crit par une \u00e9l\u00e8ve de coll\u00e8ge (troisi\u00e8me dans le syst\u00e8me fran\u00e7ais). Ne corrige pas le texte, propose juste quelques conseils pour que l&rsquo;\u00e9l\u00e8ve am\u00e9liore son travail.<\/p>\n<\/blockquote>\n<p>\u00c9videmment, si la chose vous dit, vous pouvez demander \u00e0 chatGPT de cr\u00e9er un add-on pour vous. C&rsquo;est plus riche et plus complet. Plus interactif aussi. Bref, assez rigolo. Il y a juste une \u00e9tape suppl\u00e9mentaire qui consiste \u00e0 cr\u00e9er un fichier HTML.<\/p>\n<pre><code class=\"language-HTML\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n  &lt;head&gt;\n    &lt;base target=&quot;_top&quot;&gt;\n  &lt;\/head&gt;\n  &lt;body&gt;\n    &lt;h2&gt;GPT Assistant&lt;\/h2&gt;\n    &lt;div&gt;\n      &lt;label for=&quot;prompt&quot;&gt;Enter your prompt:&lt;\/label&gt;&lt;br&gt;\n      &lt;textarea id=&quot;prompt&quot; rows=&quot;4&quot; cols=&quot;50&quot;&gt;&lt;\/textarea&gt;&lt;br&gt;&lt;br&gt;\n      &lt;button onclick=&quot;processDoc()&quot;&gt;Process Document&lt;\/button&gt;\n    &lt;\/div&gt;\n    &lt;script&gt;\n      function processDoc() {\n        const prompt = document.getElementById('prompt').value;\n        google.script.run.processContent(prompt);\n        document.getElementById('prompt').value = '';\n      }\n    &lt;\/script&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n<p>Et \u00e9videmment le script.<\/p>\n<pre><code class=\"language-JS\">const OPENAI_API_KEY = ''; \/\/ &lt;- PASTE YOUR SECRET KEY HERE\nconst OPENAI_API_URL = 'https:\/\/api.openai.com\/v1\/chat\/completions';\n\n\/**\n * Fetch completion from OpenAI API\n * \n * @param {string} prompt The input prompt for GPT-4\n * @param {string} content The content of the Google Docs\n * @param {string} model The model to use (e.g., gpt-4)\n * @param {float} temperature The sampling temperature (0-1)\n * @param {int} maxTokens The maximum number of tokens to generate\n * @return {string} The generated completion\n *\/\nfunction fetchCompletion(prompt, content, model = 'gpt-4', temperature = 0.6, maxTokens = 256) {\n  var data = {\n    model: model,\n    messages: [\n      {&quot;role&quot;: &quot;system&quot;, &quot;content&quot;: &quot;You are an assistant that helps improve and process text.&quot;},\n      {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: content},\n      {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: prompt}\n    ],\n    temperature: temperature,\n    max_tokens: maxTokens\n  };\n  var options = {\n    method: 'post',\n    contentType: 'application\/json',\n    payload: JSON.stringify(data),\n    headers: {\n      'Authorization': `Bearer ${OPENAI_API_KEY}`,\n      'Content-Type': 'application\/json'\n    }\n  };\n  var response = UrlFetchApp.fetch(OPENAI_API_URL, options);\n  var responseData = JSON.parse(response.getContentText());\n  if (responseData.choices &amp;&amp; responseData.choices.length &gt; 0) {\n    return responseData.choices[0].message.content.trim();\n  } else {\n    return 'No response from OpenAI API';\n  }\n}\n\n\/**\n * Process the content of the Google Doc with OpenAI API\n *\/\nfunction processContent(prompt) {\n  var doc = DocumentApp.getActiveDocument();\n  var body = doc.getBody();\n  var content = body.getText();\n  var processedContent = fetchCompletion(prompt, content);\n  body.appendParagraph('\\nProcessed Content:\\n');\n  body.appendParagraph(processedContent);\n}\n\n\/**\n * Show the sidebar for user input\n *\/\nfunction showSidebar() {\n  var html = HtmlService.createHtmlOutputFromFile('Sidebar')\n      .setTitle('GPT Assistant')\n      .setWidth(300);\n  DocumentApp.getUi().showSidebar(html);\n}\n\n\/**\n * Create a custom menu in the Google Docs UI\n *\/\nfunction onOpen() {\n  DocumentApp.getUi().createMenu('GPT Assistant')\n      .addItem('Open GPT Assistant', 'showSidebar')\n      .addToUi();\n}\n<\/code><\/pre>\n<p>Vous pouvez t\u00e9l\u00e9charger <a href=\"https:\/\/docs.google.com\/document\/d\/1XCcexsjOLIZnbYcTyyRLqGeKV20GiQXitt8pkXUAlr8\/copy\">le mod\u00e8le<\/a> si cela vous int\u00e9resse. N&rsquo;oubliez pas que Google vous pr\u00e9vient 20 fois qu&rsquo;il y a un script attach\u00e9 et qu&rsquo;il convient d&rsquo;\u00eatre prudent.<\/p>\n<p>Je ne les inclus pas dans ce billet de blog, mais je continue mes essais. chatGPT est en train de construire pour moi une extension pour Gmail et je fais aussi joujou avec l&rsquo;API de Claude dans le m\u00eame temps (pour comparer). Au reste, j&rsquo;apporterai quelques am\u00e9liorations \u00e0 ces documents notamment au tableur permettant de g\u00e9n\u00e9rer des appr\u00e9ciations, car on peut faire encore bien mieux.<\/p>\n<p>Je vous tiens au courant.<\/p>\n<p>P.S.<br \/>\nOn peut depuis peu connecter son compte Google ou Microsoft \u00e0 chatGPT et donc demander au bot d&rsquo;analyser notre tableau. Je dois dire que c&rsquo;est assez impressionnant (mais plus cher que notre solution). \u00c0 suivre.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-content\/uploads\/2024\/05\/chat-gpt-drive.png\" alt=\"Google Drive dans chatGPT\" width=\"800\" class=\"aligncenter\"><\/p>\n<h2>Mise \u00e0 jour du 31\/05\/2024<\/h2>\n<p>Poursuivant mes exp\u00e9rimentations avec l&rsquo;API d&rsquo;OpenAI et Google Sheets, j&rsquo;ai tent\u00e9 deux choses, certes imparfaites, mais que je crois sinon int\u00e9ressantes du moins amusantes.<\/p>\n<p><video width=\"320\" height=\"190\" controls><source src=\"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-content\/uploads\/2024\/05\/gpt-appreciations.mp4\" type=\"video\/mp4\"><\/video><\/p>\n<p>La premi\u00e8re, comme on peut le voir dans la vid\u00e9o ci-dessus, invite \u00e0 choisir dans un menu d\u00e9roulant des appr\u00e9ciations sommaires sur le comportement, les apprentissages, la progression, etc. S&rsquo;appuyant sur ces br\u00e8ves observations, GPT produit un commentaire gr\u00e2ce \u00e0 la m\u00eame formule (mais je me suis senti oblig\u00e9 de lui faire comprendre qu&rsquo;il devait se comporter comme un enseignant)\u00a0:<\/p>\n<pre class=\"wp-block-code\"><code>=GPT(\"Agis comme un enseignant et \u00e9cris une appr\u00e9ciation pour cet \u00e9l\u00e8ve en 4 ou 6 phrases pour '\"&A4&\"'. Prends en consid\u00e9ration les observations se trouvant de '\"&B4&\"' \u00e0 '\"&H4&\"' pour produire cette appr\u00e9ciation.\")<\/code><\/pre>\n<p>Mais comme ces appr\u00e9ciations valent ce qu&rsquo;elles valent, j&rsquo;ai eu une deuxi\u00e8me id\u00e9e. Demandons \u00e0 l&rsquo;IA de produire trois versions de ce commentaire initial. J&rsquo;ai donc cr\u00e9\u00e9 un deuxi\u00e8me onglet r\u00e9cup\u00e9rant l&rsquo;appr\u00e9ciation avec cette fonction\u00a0:<\/p>\n<pre class=\"wp-block-code\"><code>=IFERROR(VLOOKUP(A4, 'Appr\u00e9ciations 1'!$A$2:$I$21, 9, FALSE),\" \")<\/code><\/pre>\n<p>Et j&rsquo;invite alors GPT \u00e0 produire trois versions de ce commentaire.<\/p>\n<h3>Version 1 Soutenir et encourager<\/h3>\n<pre class=\"wp-block-code\"><code>=GPT(\"Agis comme un sympathique enseignant passionn\u00e9 et reformule l'appr\u00e9ciation en '\"&B3&\"' de mani\u00e8re \u00e0 soutenir et \u00e0 booster l'ego de l'\u00e9l\u00e8ve.\")<\/code><\/pre>\n<h3>Version 2 S\u00e9v\u00e8re et exigeante<\/h3>\n<pre class=\"wp-block-code\"><code>=GPT(\"Agis comme un enseignant et reformule, sans la contredire mais en variant simplement le point de vue sur le travail fourni, l'appr\u00e9ciation en '\"&B3&\"' en \u00e9tant plus s\u00e9v\u00e8re et exigeant.\")<\/code><\/pre>\n<h3>Version 3 Neutre et factuel<\/h3>\n<pre class=\"wp-block-code\"><code>=GPT(\"Agis comme un enseignant objectif et reformule l'appr\u00e9ciation en '\"&B3&\"' en \u00e9tant le plus factuel possible.\")<\/code><\/pre>\n<p>\nVous pouvez t\u00e9l\u00e9charger le tableur en cliquant sur <a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1cgs19JQFB7trz0n4WW_fmv-63YOU6rtM6PO-QN06p88\/edit?usp=sharing\">ce lien<\/a>.\n<\/p>\n<p><a name=\"note1\">1<\/a>\u00a0:\u00a0\u00ab\u00a0Dom Pimenta, cardiologue de 36 ans et fondateur de Tortus, a d\u00e9clar\u00e9\u00a0:\u00a0\u00ab\u00a0Si l&rsquo;on fait le calcul, on constate que jusqu&rsquo;\u00e0 60% du temps est consacr\u00e9 aux ordinateurs, ce qui signifie que 40% du temps est consacr\u00e9 aux patients. Si l&rsquo;on r\u00e9duit ce temps d&rsquo;utilisation de l&rsquo;ordinateur \u00e0 15%, on obtient 85% du temps pass\u00e9 avec les patients. Imaginez ce que la NHS pourrait faire avec autant de m\u00e9decins ou d&rsquo;infirmi\u00e8res en plus.\u00a0\u00bb<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cela faisait un moment que je voulais \u00e0 nouveau m&rsquo;essayer \u00e0 construire un tableau du type Excel ou Google Sheets me permettant, \u00e0 l&rsquo;aide de l&rsquo;intelligence artificielle, de g\u00e9n\u00e9rer des appr\u00e9ciations, non pas pour \u00e9crire des bulletins \u00e0 ma place, mais pour m&rsquo;assister dans la t\u00e2che d&rsquo;analyse de donn\u00e9es toujours plus nombreuses. Voici comment \u00e7a [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"templates\/template-full-width.php","format":"standard","meta":{"footnotes":""},"categories":[28,66,44],"tags":[50],"class_list":["post-5074","post","type-post","status-publish","format-standard","hentry","category-education","category-ia","category-technologie","tag-blog"],"_links":{"self":[{"href":"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-json\/wp\/v2\/posts\/5074","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-json\/wp\/v2\/comments?post=5074"}],"version-history":[{"count":16,"href":"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-json\/wp\/v2\/posts\/5074\/revisions"}],"predecessor-version":[{"id":5107,"href":"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-json\/wp\/v2\/posts\/5074\/revisions\/5107"}],"wp:attachment":[{"href":"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-json\/wp\/v2\/media?parent=5074"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-json\/wp\/v2\/categories?post=5074"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ralentirtravaux.com\/le_blog\/wp-json\/wp\/v2\/tags?post=5074"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}