首頁 > web前端 > js教程 > 使用可重複使用程式碼建立人工智慧驅動的電子郵件代理

使用可重複使用程式碼建立人工智慧驅動的電子郵件代理

Mary-Kate Olsen
發布: 2024-12-24 08:47:14
原創
984 人瀏覽過

Build an AI-Powered Email Agent with Reusable Code

為什麼要自動化您的任務?

大家好? !作為一名應用程式開發人員,我很高興與您分享如何創建簡單但功能強大的代理程式來自動執行日常任務。

?和你們許多人一樣,我每天都會收到大量電子郵件。儘管我盡了最大努力,實現難以捉摸的收件匣清零仍然是一個挑戰。整理訂單確認和出貨更新等電子郵件既乏味又耗時。

但好消息是:自動化可以拯救世界

?我編寫了一個利用 AI 來幫助自動進行電子郵件分類的基本腳本,您也可以。

在本文中,我將分享可重複使用的程式碼片段,以幫助您建立適合您需求的自動化代理程式。 ?


自動化之美

有無數的工具,包括無程式碼平台,可以為您處理整個流程。但是,我更喜歡將任務分解為模組化程式碼片段。為什麼?

  1. 靈活性:模組化程式碼可以輕鬆適應不斷變化的需求。
  2. 可重用性:寫一次,永遠使用。
  3. 可維護性:小而獨立的程式碼區塊更容易除錯和改進。

採取增量方法,您可以逐漸以自動化步驟取代手動步驟。

? ‍?我用於製作腳本原型的首選工具是 Znote——一款具有即時編碼和 AI 功能的筆記本,可以幫助我追蹤和增強我的工作流程。嘗試一下,或使用您最喜歡的 IDE!


讓我們建立一個電子郵件自動化代理

目標

當新電子郵件到達時,我們希望:

  1. 閱讀電子郵件並擷取相關資訊。
  2. 使用法學碩士從預定義清單中確定其類別。
  3. 建立 Gmail 標籤(如果它們尚不存在)。
  4. 更新電子郵件的標籤以反映指定的類別。

入門

先決條件

第 1 步:啟用 Gmail API

  1. 前往 Google Cloud Console 並啟用 Gmail API。
  2. 為桌面應用程式設定 OAuth 憑證。請按照以下步驟下載 google-credentials.json 檔案並將其放置在專案目錄中。

第2步:安裝Ollama

下載 Ollama 來運行本地法學碩士。安裝後,下載模型:

ollama pull mistral  
登入後複製
登入後複製

第三步:安裝依賴項

安裝所需的 Node.js 函式庫:

ollama pull mistral  
登入後複製
登入後複製

編寫程式碼

1. 使用Google API進行身份驗證

設定與 Gmail 的 OAuth 連線:

npm install -S @google-cloud/local-auth googleapis openai  
登入後複製

2. 建立 Gmail 標籤

使用此函數建立標籤並檢索其 ID:

// 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.閱讀電子郵件

從訊息 API 中提取詳細資訊:

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.解密相關訊息

從電子郵件中提取有意義的詳細資訊:

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. 使用法學碩士進行分類

整合 Ollama 或 OpenAI 將電子郵件分類:

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;
}
登入後複製

把它們放在一起

以下是一切如何協同工作的:

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();
}
登入後複製

?就是這樣!您的收件匣現在更加聰明、更有條理。

走得更遠

但是為什麼停在這裡呢?探索更高級的範例,用於閱讀電子郵件內容、發送草稿以及建立全自動回應所需的一切。
有關更多自動化想法和可重複使用腳本,請查看 Znote。

讓我們將您的日常任務變成有趣且有效率的事情! ?

以上是使用可重複使用程式碼建立人工智慧驅動的電子郵件代理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板