Heim > Web-Frontend > js-Tutorial > Erstellen Sie einen KI-gestützten E-Mail-Agenten mit wiederverwendbarem Code

Erstellen Sie einen KI-gestützten E-Mail-Agenten mit wiederverwendbarem Code

Mary-Kate Olsen
Freigeben: 2024-12-24 08:47:14
Original
984 Leute haben es durchsucht

Build an AI-Powered Email Agent with Reusable Code

Warum Ihre Aufgaben automatisieren?

Hallo zusammen?! Als App-Entwickler freue ich mich, Ihnen mitteilen zu können, wie Sie einfache, aber leistungsstarke Agenten erstellen können, um Ihre täglichen Aufgaben zu automatisieren.

? Wie viele von Ihnen erhalte ich täglich eine überwältigende Anzahl an E-Mails. Trotz meiner besten Bemühungen bleibt es eine Herausforderung, den schwer fassbaren Inbox Zero zu erreichen. Das Durchsuchen von E-Mails wie Bestellbestätigungen und Versandaktualisierungen ist mühsam und zeitaufwändig.

Aber hier ist die gute Nachricht: Automatisierung kann den Tag retten!

? Ich habe ein einfaches Skript geschrieben, das KI nutzt, um die E-Mail-Kategorisierung zu automatisieren – und das können Sie auch.

In diesem Artikel teile ich wiederverwendbare Codeausschnitte, die Ihnen dabei helfen, Ihre eigenen Automatisierungsagenten zu erstellen, die auf Ihre Bedürfnisse zugeschnitten sind. ?


Die Schönheit der Automatisierung

Es gibt unzählige Tools, darunter auch No-Code-Plattformen, die ganze Prozesse für Sie abwickeln können. Ich bevorzuge es jedoch, Aufgaben in modulare Codeschnipsel aufzuteilen. Warum?

  1. Flexibilität: Modularer Code kann leicht an sich ändernde Anforderungen angepasst werden.
  2. Wiederverwendbarkeit: Einmal schreiben, für immer verwenden.
  3. Wartbarkeit: Kleine, unabhängige Codeblöcke lassen sich leichter debuggen und verbessern.

Durch einen inkrementellen Ansatz können Sie manuelle Schritte schrittweise durch automatisierte ersetzen.

?‍? Mein bevorzugtes Tool für Prototyping-Skripte ist Znote – ein Notizbuch mit Live-Codierung und KI, das mir hilft, meine Arbeitsabläufe zu verfolgen und zu verbessern. Probieren Sie es aus oder verwenden Sie Ihre Lieblings-IDE!


Lassen Sie uns einen E-Mail-Automatisierungsagenten erstellen

Ziele

Wenn eine neue E-Mail eintrifft, möchten wir:

  1. Lesen Sie die E-Mail und extrahieren Sie relevante Informationen.
  2. Verwenden Sie ein LLM, um seine Kategorie aus einer vordefinierten Liste zu bestimmen.
  3. Gmail-Labels erstellen (falls noch nicht vorhanden).
  4. Aktualisieren Sie die Beschriftungen der E-Mail, um die zugewiesene Kategorie widerzuspiegeln.

Erste Schritte

Voraussetzungen

Schritt 1: Aktivieren Sie die Gmail-API

  1. Gehen Sie zur Google Cloud Console und aktivieren Sie die Gmail-API.
  2. Richten Sie OAuth-Anmeldeinformationen für eine Desktop-Anwendung ein. Befolgen Sie diese Schritte, um Ihre Datei „google-credentials.json“ herunterzuladen und in Ihrem Projektverzeichnis abzulegen.

Schritt 2: Ollama installieren

Laden Sie Ollama herunter, um ein lokales LLM auszuführen. Laden Sie nach der Installation ein Modell herunter:

ollama pull mistral  
Nach dem Login kopieren
Nach dem Login kopieren

Schritt 3: Abhängigkeiten installieren

Installieren Sie die erforderlichen Node.js-Bibliotheken:

ollama pull mistral  
Nach dem Login kopieren
Nach dem Login kopieren

Den Code schreiben

1. Authentifizieren Sie sich mit der Google API

Richten Sie eine OAuth-Verbindung zu Gmail ein:

npm install -S @google-cloud/local-auth googleapis openai  
Nach dem Login kopieren

2. Erstellen Sie Gmail-Labels

Verwenden Sie diese Funktion, um Etiketten zu erstellen und deren IDs abzurufen:

// 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;
Nach dem Login kopieren

3. E-Mails lesen

Details aus der Nachrichten-API extrahieren:

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;
}
Nach dem Login kopieren

4. Entschlüsseln Sie relevante Informationen

Aussagekräftige Details aus E-Mails extrahieren:

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;
    })
  );
}
Nach dem Login kopieren

5. Verwenden Sie ein LLM zur Kategorisierung

Integrieren Sie Ollama oder OpenAI, um E-Mails zu klassifizieren:

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;
}
Nach dem Login kopieren

Alles zusammenfügen

So funktioniert alles zusammen:

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();
}
Nach dem Login kopieren

? Das ist es! Ihr Posteingang ist jetzt intelligenter und organisierter.

Gehen Sie weiter

Aber warum hier aufhören? Entdecken Sie fortgeschrittenere Beispiele zum Lesen von E-Mail-Inhalten, zum Senden von Entwürfen und zum Erstellen von allem, was Sie für vollständig automatisierte Antworten benötigen.
Weitere Automatisierungsideen und wiederverwendbare Skripte finden Sie bei Znote.

Lassen Sie uns Ihre täglichen Aufgaben in etwas Lustiges und Effizientes verwandeln! ?

Das obige ist der detaillierte Inhalt vonErstellen Sie einen KI-gestützten E-Mail-Agenten mit wiederverwendbarem Code. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage