大家好? !作為一名應用程式開發人員,我很高興與您分享如何創建簡單但功能強大的代理程式來自動執行日常任務。
?和你們許多人一樣,我每天都會收到大量電子郵件。儘管我盡了最大努力,實現難以捉摸的收件匣清零仍然是一個挑戰。整理訂單確認和出貨更新等電子郵件既乏味又耗時。
但好消息是:自動化可以拯救世界!
?我編寫了一個利用 AI 來幫助自動進行電子郵件分類的基本腳本,您也可以。
在本文中,我將分享可重複使用的程式碼片段,以幫助您建立適合您需求的自動化代理程式。 ?
有無數的工具,包括無程式碼平台,可以為您處理整個流程。但是,我更喜歡將任務分解為模組化程式碼片段。為什麼?
採取增量方法,您可以逐漸以自動化步驟取代手動步驟。
? ?我用於製作腳本原型的首選工具是 Znote——一款具有即時編碼和 AI 功能的筆記本,可以幫助我追蹤和增強我的工作流程。嘗試一下,或使用您最喜歡的 IDE!
當新電子郵件到達時,我們希望:
下載 Ollama 來運行本地法學碩士。安裝後,下載模型:
ollama pull mistral
安裝所需的 Node.js 函式庫:
ollama pull mistral
設定與 Gmail 的 OAuth 連線:
npm install -S @google-cloud/local-auth googleapis openai
使用此函數建立標籤並檢索其 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;
從訊息 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; }
從電子郵件中提取有意義的詳細資訊:
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; }) ); }
整合 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中文網其他相關文章!