Maison >interface Web >js tutoriel >Comment créer un agent simple pour votre boîte de réception Gmail avec Ollama et JS
Salut à tous ?! En tant que développeur d'applications, je suis ravi de partager comment vous pouvez créer des agents simples mais puissants pour automatiser vos tâches quotidiennes.
? Comme beaucoup d’entre vous, je reçois chaque jour un nombre impressionnant d’e-mails. Malgré tous mes efforts, atteindre l’insaisissable Inbox Zero reste un défi. Trier les e-mails tels que les confirmations de commande et les mises à jour d’expédition est fastidieux et prend du temps.
Mais voici la bonne nouvelle : l'automatisation peut sauver la situation !
? J'ai écrit un script de base tirant parti de l'IA pour aider à automatiser la catégorisation des e-mails, et vous le pouvez aussi.
Dans cet article, je partagerai des extraits de code réutilisables pour vous aider à créer vos propres agents d'automatisation adaptés à vos besoins. ?
Il existe d'innombrables outils, y compris des plateformes sans code, qui peuvent gérer des processus entiers pour vous. Cependant, je préfère diviser les tâches en extraits de code modulaires. Pourquoi?
En adoptant une approche incrémentale, vous pouvez progressivement remplacer les étapes manuelles par des étapes automatisées.
?? Mon outil personnel de prédilection pour le prototypage de scripts est Znote, un bloc-notes avec codage en direct et IA qui m'aide à suivre et à améliorer mes flux de travail. Sinon, utilisez votre IDE préféré !
Lorsqu'un nouvel e-mail arrive, nous souhaitons :
Téléchargez Ollama pour lancer un LLM local. Une fois installé, téléchargez un modèle :
ollama pull mistral
Installez les bibliothèques Node.js requises :
ollama pull mistral
Configurer une connexion OAuth à Gmail :
npm install -S @google-cloud/local-auth googleapis openai
Utilisez cette fonction pour créer des étiquettes et récupérer leurs identifiants :
// google-api.js const fs = require("fs"); const path = require("path"); const { authenticate } = require("@google-cloud/local-auth"); const { google } = require("googleapis"); class GoogleAPI { constructor(credentialFilename) { this.TOKEN_PATH = path.join(__dirname, `token-${credentialFilename}`); this.CREDENTIALS_PATH = path.join(__dirname, credentialFilename); this.SCOPES = [ "https://mail.google.com/", "https://www.googleapis.com/auth/gmail.modify", ]; } async authorize() { const loadSavedCredentials = () => { try { const content = fs.readFileSync(this.TOKEN_PATH); return google.auth.fromJSON(JSON.parse(content)); } catch { return null; } }; const saveCredentials = (client) => { const keys = JSON.parse(fs.readFileSync(this.CREDENTIALS_PATH)); fs.writeFileSync( this.TOKEN_PATH, JSON.stringify({ type: "authorized_user", client_id: keys.installed.client_id, client_secret: keys.installed.client_secret, refresh_token: client.credentials.refresh_token, }) ); }; let client = await loadSavedCredentials(); if (!client) { client = await authenticate({ scopes: this.SCOPES, keyfilePath: this.CREDENTIALS_PATH, }); if (client.credentials) saveCredentials(client); } return client; } } module.exports = GoogleAPI;
Extraire les détails de l'API du message :
async function createAndGetLabels(labelsToCreate) { const google = await getGoogleClient(); const gmail = google.gmail({ version: "v1" }); const existingLabels = (await gmail.users.labels.list({ userId: "me" })).data.labels || []; const labelsMap = new Map(); for (const label of labelsToCreate) { const existing = existingLabels.find((l) => l.name === label); if (existing) { labelsMap.set(label, existing.id); } else { const res = await gmail.users.labels.create({ userId: "me", requestBody: { name: label }, }); labelsMap.set(label, res.data.id); } } return labelsMap; }
Extraire des détails significatifs des e-mails :
async function readEmails(gmail, maxResults = 10) { const res = await gmail.users.messages.list({ userId: "me", labelIds: ["INBOX"], maxResults }); return Promise.all( res.data.messages.map(async ({ id }) => { const email = await gmail.users.messages.get({ userId: "me", id }); return email.data; }) ); }
Intégrez Ollama ou OpenAI pour classer les emails :
function extractMailInfos(mail) { // Define the headers to extract const relevantHeaders = ["Date", "Subject"]; // Extract and structure the relevant headers const headers = mail.payload.headers .filter(header => relevantHeaders.includes(header.name)) .reduce((accumulator, header) => { accumulator[header.name] = header.value; return accumulator; }, {}); // Add the unique mail ID directly to the headers object headers.id = mail.id; return headers; }
Voici comment tout fonctionne ensemble :
async function classifyEmail(prompt) { const { OpenAI } = require("openai"); const openai = new OpenAI({ baseURL: "http://127.0.0.1:11434/v1", apiKey: "not-needed" }); const response = await openai.chat.completions.create({ model: "mistral", temperature: 0.3, messages: [{ role: "user", content: prompt }], }); return response.choices[0].message.content.trim(); }
? C'est ça! Votre boîte de réception est désormais plus intelligente et mieux organisée.
Pour plus d'idées d'automatisation et de scripts réutilisables, consultez cette galerie. Vous trouverez des exemples plus avancés à exporter pour lire le contenu des e-mails, envoyer des brouillons et créer tout ce dont vous avez besoin pour des réponses entièrement automatisées.
? ❓J'aimerais entendre parler des bibliothèques que vous utilisez pour créer vos automatisations en tant que développeur !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!