Heim >Web-Frontend >js-Tutorial >So erstellen Sie mit Ollama und JS einen einfachen Agenten für Ihren Gmail-Posteingang

So erstellen Sie mit Ollama und JS einen einfachen Agenten für Ihren Gmail-Posteingang

Patricia Arquette
Patricia ArquetteOriginal
2024-12-30 11:04:09467Durchsuche

How to create a simple agent for your Gmail inbox with Ollama and JS

Warum Ihre Aufgaben automatisieren?

Hallo zusammen?! Als App-Entwickler freue ich mich, Ihnen mitzuteilen, 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 persönliches Tool für die Prototypenerstellung von Skripten ist Znote – ein Notizbuch mit Live-Codierung und KI, das mir hilft, meine Arbeitsabläufe zu verfolgen und zu verbessern. Ansonsten 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  

Schritt 3: Abhängigkeiten installieren

Installieren Sie die erforderlichen Node.js-Bibliotheken:

ollama pull mistral  

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  

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;

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;
}

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;
    })
  );
}

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;
}

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();
}

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

Gehen Sie weiter

Weitere Automatisierungsideen und wiederverwendbare Skripte finden Sie in dieser Galerie. Sie finden erweiterte Beispiele zum Exportieren 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.

? ❓Ich würde gerne etwas über die Bibliotheken erfahren, die Sie als Entwickler zum Erstellen Ihrer Automatisierungen verwenden!

Das obige ist der detaillierte Inhalt vonSo erstellen Sie mit Ollama und JS einen einfachen Agenten für Ihren Gmail-Posteingang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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