Maison >interface Web >js tutoriel >Créez un agent de messagerie alimenté par l'IA avec du code réutilisable
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 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. Essayez-le ou 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.
Mais pourquoi s'arrêter là ? Explorez des exemples plus avancés 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.
Pour plus d'idées d'automatisation et de scripts réutilisables, consultez Znote.
Transformons vos tâches quotidiennes en quelque chose d'amusant et d'efficace ! ?
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!