یک نماینده ایمیل مبتنی بر هوش مصنوعی با کد قابل استفاده مجدد بسازید

Summarize this content to 400 words in Persian Lang
چرا وظایف خود را خودکار کنید؟
سلام به همه 👋! بهعنوان یک توسعهدهنده برنامه، مشتاقم به اشتراک بگذارم که چگونه میتوانید عوامل ساده و در عین حال قدرتمندی برای خودکارسازی کارهای روزانه خود ایجاد کنید.
📬 من هم مانند بسیاری از شما، هر روز تعداد زیادی ایمیل دریافت می کنم. علیرغم تمام تلاشم، دستیابی به چیزهای دست نیافتنی صندوق ورودی صفر یک چالش باقی می ماند مرتبسازی از طریق ایمیلهایی مانند تأیید سفارش و بهروزرسانیهای ارسال، خستهکننده و زمانبر است.
اما خبر خوب اینجاست: اتوماسیون می تواند روز را نجات دهد!🤖 من یک اسکریپت اساسی با استفاده از هوش مصنوعی برای کمک به دستهبندی خودکار ایمیلها نوشتهام – و شما هم میتوانید.
در این مقاله، من تکههای کد قابل استفاده مجدد را به اشتراک میگذارم تا به شما کمک کند تا عوامل اتوماسیون خود را متناسب با نیازهای خود بسازید. 🚀
زیبایی اتوماسیون
ابزارهای بی شماری از جمله پلتفرم های بدون کد وجود دارند که می توانند کل فرآیندها را برای شما انجام دهند. با این حال، من ترجیح می دهم تکالیف را بشکنم قطعه کد مدولار. چرا؟
انعطاف پذیری: کد ماژولار می تواند به راحتی با نیازهای در حال تغییر سازگار شود.
قابلیت استفاده مجدد: یک بار بنویس، برای همیشه استفاده کن.
قابلیت نگهداری: اشکالزدایی و بهبود تکههای کوچک و مستقل کد آسانتر است.
با گرفتن یک رویکرد افزایشی، می توانید به تدریج مراحل دستی را با مراحل خودکار جایگزین کنید.
👩💻 ابزار اصلی من برای نمونه سازی اسکریپت ها است Znote- یک نوت بوک با کدنویسی زنده و هوش مصنوعی که به من کمک می کند گردش کار خود را ردیابی و بهبود بخشد. آن را امتحان کنید یا از IDE مورد علاقه خود استفاده کنید!
بیایید یک نماینده اتوماسیون ایمیل بسازیم
اهداف
وقتی یک ایمیل جدید می رسد، می خواهیم:
ایمیل را بخوانید و اطلاعات مربوطه را استخراج کنید.
از LLM استفاده کنید برای تعیین دسته آن از یک لیست از پیش تعریف شده.
برچسب های جیمیل ایجاد کنید (اگر از قبل وجود نداشته باشند).
برچسب های ایمیل را به روز کنید برای انعکاس دسته اختصاص داده شده
شروع به کار
پیش نیازها
مرحله 1: Gmail API را فعال کنید
به Google Cloud Console بروید و Gmail API را فعال کنید.
اعتبارنامه OAuth را برای یک برنامه دسکتاپ تنظیم کنید. برای دانلود خود این مراحل را دنبال کنید google-credentials.json فایل و آن را در فهرست پروژه خود قرار دهید.
مرحله 2: اوللاما را نصب کنید
Ollama را برای اجرای یک LLM محلی دانلود کنید. پس از نصب، یک مدل را دانلود کنید:
ollama pull mistral
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
مرحله 3: Dependencies را نصب کنید
کتابخانه های Node.js مورد نیاز را نصب کنید:
npm install -S @google-cloud/local-auth googleapis openai
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
نوشتن کد
1. با Google API احراز هویت
یک اتصال OAuth به Gmail راه اندازی کنید:
// 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;
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
2. برچسب های جیمیل ایجاد کنید
از این تابع برای ایجاد برچسب ها و بازیابی شناسه آنها استفاده کنید:
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;
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
3. ایمیل ها را بخوانید
استخراج جزئیات از api پیام:
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;
})
);
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
4. رمزگشایی اطلاعات مربوطه
استخراج جزئیات معنی دار از ایمیل ها:
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;
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
5. از یک LLM برای دسته بندی استفاده کنید
Ollama یا OpenAI را برای طبقه بندی ایمیل ها ادغام کنید:
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();
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
قرار دادن آن همه با هم
در اینجا همه چیز با هم کار می کند:
const labelsToCreate = [“Order”, “Shipping”, “Newsletter”, “Other”];
const labelsMap = await createAndGetLabels(labelsToCreate);
const promptSystem = `
Your role is to determine the category of the emails by choosing from the categories listed below.
Here are the possible categories:
– Order
– Shipping
– Newsletter
– Other
You must return in response the name of the category without further explanation and without quotation marks.
`
const rawEmails = await readEmails(gmail);
const emails = rawEmails.map(m => extractMailInfos(m));
for (const email of emails) {
const prompt = `${promptSystem}
Categorize this email: ${email.Subject}`;
const category = await classifyEmail(prompt);
if (labelsMap.has(category)) {
await gmail.users.messages.modify({
userId: “me”,
id: email.id,
requestBody: {
addLabelIds: [labelsMap.get(category)],
//removeLabelIds: [“INBOX”],
},
});
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
🎉 همین! صندوق ورودی شما اکنون هوشمندتر و سازماندهی شده است.
برو جلوتر
اما چرا اینجا توقف کنید؟ نمونههای پیشرفتهتری را برای خواندن محتوای ایمیل، ارسال پیشنویسها و ساختن هر چیزی که برای پاسخهای کاملاً خودکار نیاز دارید، کاوش کنید.برای ایده های اتوماسیون بیشتر و اسکریپت های قابل استفاده مجدد، Znote را بررسی کنید.بیایید کارهای روزانه شما را به چیزی سرگرم کننده و کارآمد تبدیل کنیم! 🌈
چرا وظایف خود را خودکار کنید؟
سلام به همه 👋! بهعنوان یک توسعهدهنده برنامه، مشتاقم به اشتراک بگذارم که چگونه میتوانید عوامل ساده و در عین حال قدرتمندی برای خودکارسازی کارهای روزانه خود ایجاد کنید.
📬 من هم مانند بسیاری از شما، هر روز تعداد زیادی ایمیل دریافت می کنم. علیرغم تمام تلاشم، دستیابی به چیزهای دست نیافتنی صندوق ورودی صفر یک چالش باقی می ماند مرتبسازی از طریق ایمیلهایی مانند تأیید سفارش و بهروزرسانیهای ارسال، خستهکننده و زمانبر است.
اما خبر خوب اینجاست: اتوماسیون می تواند روز را نجات دهد!
🤖 من یک اسکریپت اساسی با استفاده از هوش مصنوعی برای کمک به دستهبندی خودکار ایمیلها نوشتهام – و شما هم میتوانید.
در این مقاله، من تکههای کد قابل استفاده مجدد را به اشتراک میگذارم تا به شما کمک کند تا عوامل اتوماسیون خود را متناسب با نیازهای خود بسازید. 🚀
زیبایی اتوماسیون
ابزارهای بی شماری از جمله پلتفرم های بدون کد وجود دارند که می توانند کل فرآیندها را برای شما انجام دهند. با این حال، من ترجیح می دهم تکالیف را بشکنم قطعه کد مدولار. چرا؟
- انعطاف پذیری: کد ماژولار می تواند به راحتی با نیازهای در حال تغییر سازگار شود.
- قابلیت استفاده مجدد: یک بار بنویس، برای همیشه استفاده کن.
- قابلیت نگهداری: اشکالزدایی و بهبود تکههای کوچک و مستقل کد آسانتر است.
با گرفتن یک رویکرد افزایشی، می توانید به تدریج مراحل دستی را با مراحل خودکار جایگزین کنید.
👩💻 ابزار اصلی من برای نمونه سازی اسکریپت ها است Znote– یک نوت بوک با کدنویسی زنده و هوش مصنوعی که به من کمک می کند گردش کار خود را ردیابی و بهبود بخشد. آن را امتحان کنید یا از IDE مورد علاقه خود استفاده کنید!
بیایید یک نماینده اتوماسیون ایمیل بسازیم
اهداف
وقتی یک ایمیل جدید می رسد، می خواهیم:
- ایمیل را بخوانید و اطلاعات مربوطه را استخراج کنید.
- از LLM استفاده کنید برای تعیین دسته آن از یک لیست از پیش تعریف شده.
- برچسب های جیمیل ایجاد کنید (اگر از قبل وجود نداشته باشند).
- برچسب های ایمیل را به روز کنید برای انعکاس دسته اختصاص داده شده
شروع به کار
پیش نیازها
مرحله 1: Gmail API را فعال کنید
- به Google Cloud Console بروید و Gmail API را فعال کنید.
- اعتبارنامه OAuth را برای یک برنامه دسکتاپ تنظیم کنید. برای دانلود خود این مراحل را دنبال کنید
google-credentials.json
فایل و آن را در فهرست پروژه خود قرار دهید.
مرحله 2: اوللاما را نصب کنید
Ollama را برای اجرای یک LLM محلی دانلود کنید. پس از نصب، یک مدل را دانلود کنید:
ollama pull mistral
مرحله 3: Dependencies را نصب کنید
کتابخانه های Node.js مورد نیاز را نصب کنید:
npm install -S @google-cloud/local-auth googleapis openai
نوشتن کد
1. با Google API احراز هویت
یک اتصال OAuth به Gmail راه اندازی کنید:
// 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;
2. برچسب های جیمیل ایجاد کنید
از این تابع برای ایجاد برچسب ها و بازیابی شناسه آنها استفاده کنید:
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;
}
3. ایمیل ها را بخوانید
استخراج جزئیات از api پیام:
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;
})
);
}
4. رمزگشایی اطلاعات مربوطه
استخراج جزئیات معنی دار از ایمیل ها:
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;
}
5. از یک LLM برای دسته بندی استفاده کنید
Ollama یا OpenAI را برای طبقه بندی ایمیل ها ادغام کنید:
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();
}
قرار دادن آن همه با هم
در اینجا همه چیز با هم کار می کند:
const labelsToCreate = ["Order", "Shipping", "Newsletter", "Other"];
const labelsMap = await createAndGetLabels(labelsToCreate);
const promptSystem = `
Your role is to determine the category of the emails by choosing from the categories listed below.
Here are the possible categories:
- Order
- Shipping
- Newsletter
- Other
You must return in response the name of the category without further explanation and without quotation marks.
`
const rawEmails = await readEmails(gmail);
const emails = rawEmails.map(m => extractMailInfos(m));
for (const email of emails) {
const prompt = `${promptSystem}
Categorize this email: ${email.Subject}`;
const category = await classifyEmail(prompt);
if (labelsMap.has(category)) {
await gmail.users.messages.modify({
userId: "me",
id: email.id,
requestBody: {
addLabelIds: [labelsMap.get(category)],
//removeLabelIds: ["INBOX"],
},
});
}
}
🎉 همین! صندوق ورودی شما اکنون هوشمندتر و سازماندهی شده است.
برو جلوتر
اما چرا اینجا توقف کنید؟ نمونههای پیشرفتهتری را برای خواندن محتوای ایمیل، ارسال پیشنویسها و ساختن هر چیزی که برای پاسخهای کاملاً خودکار نیاز دارید، کاوش کنید.
برای ایده های اتوماسیون بیشتر و اسکریپت های قابل استفاده مجدد، Znote را بررسی کنید.
بیایید کارهای روزانه شما را به چیزی سرگرم کننده و کارآمد تبدیل کنیم! 🌈