Suivi de l’humeur alimenté par l’IA : un projet d’automatisation personnelle 🧠| de Casey Johnson | décembre 2024

1. Données d’entrée

À l’aide de l’application Random Reminder pour Android, j’ai programmé des notifications push aléatoires 3 fois par jour. Les deux premiers se produisent entre 9h et 19h ; le troisième est toujours entre 21h et 23h. Cela garantit que j’obtiens des données qui représentent toute ma journée.

Ensuite, à l’aide de l’application MacroDroid, la suppression de cette notification push ouvre automatiquement un formulaire Google à 2 questions dans mon navigateur.

Automatisation MacroDroid pour lancer mon Google Form à partir de la notification push aléatoire.

2. Capture de données et intégration LLM

La soumission de mon formulaire Google est automatiquement sauvegardée sur Google Sheets, qui s’intègre nativement à Google Apps Script, une plate-forme de code adjacente JavaScript. Cela peut déclencher des fonctions personnalisées en arrière-plan à une cadence régulière.

Chaque matin vers 6h du matin, j’utilise une fonction Apps Script pour résumer mes 14 derniers jours d’entrées avec un LLM. Étonnamment, Apps Script n’a pas de connectivité prête à l’emploi avec Gemini, j’ai donc utilisé OpenAI et gpt-4o-mini.

Mon invite LLM est assez complexe, utilisant une combinaison de chaîne de pensée et d’invite JSON :

  1. Identifiez les sujets et thèmes récurrents.
  2. Pour chaque entrée, extrayez un extrait pertinent pour chaque sujet.
  3. Convertissez ces extraits en une brève liste à puces chronologique.
  4. Créez un bref récit décrivant mon bien-être général.
function prepareMoodContext(sheetName) {
// Get all the data from the sheet
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
const data = sheet.getDataRange().getValues();

// Skip the header row and sort chronologically
const rows = data.slice(1);
const filteredRows = rows.filter(row => row(3)).reverse();

// Concatenate entries in the desired format
let context = filteredRows.map(row => {
const label = row(1); // Label
const mood = row(2); // How are you feeling?
const notes = row(3); // Notes
return `===\n${label} | Mood: ${mood}\n${notes || "No notes"}`;
}).join("\n\n");

return context;
}

I am tracking my moods with a Google Form for my therapist and psychiatrist. You will be provided context from my form results where I have input various notes.For each of the following steps, delimit your outputs with a triple dash ("---") and title them Step 1, Step 2, and so on.

1. First, you must identify the recurring topics & themes across these entries. There are likely 3-5 of them.

2. Second, for each date, generate a JSON where keys are the themes you identified in step 1. The values will be relevant excerpts to these keys, or simply null if no such excerpt exists. Some topics will not apply to every entry. Then, include a summary of my overall well-being on this date.

Your JSON format for each date must look like this:
{{
"Theme 1": "relevant excerpt",
"Theme 2": "relevant excerpt",
...
"Summary": "summary you derive"
}}

3. Third, for each theme identified in step 1, consider the JSONs generated in step 2. Create a BULLETED LIST summary of each theme and its progression over time. You MUST use second person point of view, a neutral tone, and conversational language with BRIEF complete sentences. Mention the dates you are referencing in each bullet point, creating a chronological narrative I can bring to therapy. You MUST NOT provide a play-by-play. Summarize and omit as necessary for brevity.My goal and therefore yours is to capture major events or overarching themes as they unfold.

4. Fourth, repeat the above task from step 3, but summarizing the daily summaries into one BULLETED LIST. Again, prioritize brevity and building a cohesive chronological narrative.

La réponse du LLM est analysée, éliminant ainsi les étapes d’identification du sujet et d’extraction d’extraits, qui sont uniquement utilisées pour la chaîne de pensée. Les résumés des listes à puces sont injectés dans un nouveau document « rapport de suivi de l’humeur » sur Google Docs.

J’ai également configuré des graphiques linéaires dans mon document Google Sheets pour suivre les notes de 1 à 5 étoiles de mes humeurs, je les injecte donc également dans le rapport.

3. Données de sortie

Le rapport final de suivi de l’humeur m’est envoyé par courrier électronique chaque matin. Je vérifie habituellement mes e-mails au réveil, ce qui signifie que je verrai toujours le document. Cet e-mail contient également un lien pour soumettre ma première entrée de suivi de l’humeur de la journée, contribuant ainsi à maintenir le processus au fil du temps.

Quelques exemples du rapport :