امروزه هوش مصنوعی (AI) و مدلهای زبانی (Language Models) به یکی از داغترین تکنولوژیها تو دنیای کامپیوتر تبدیل شدند و شرکتها و کمپانیها در رقابتهای شدید بازار، به تولید، ارائه و استفاده از هوش مصنوعی روی آوردهاند که برای تحلیل دادههای حجیم، بهبود بهرهوری، تصمیمگیریهای دقیقتر، خدمات به مشتری، کاهش هزینهها و حتی بهینهسازی فرآیندهای کسب و کار از مدلهای زبانی بزرگ استفاده میکنند.
در این مطلب به آموزش و نحوه استفاده از مدلهای ارائه شده توسط Open AI مانندChatGPT 4o mini
، ChatGPT 4o nano
و o3 mini
به صورت خودکار (نرمافزار) با استفاده از JavaScript (Node.js) میپردازیم.
ساخت حساب کاربری کلید API
شاید سخت ترین قسمت استفاده از Open AI، ایجاد و شارژ کردن حساب کاربری باشد، به دلیل تحریمها و شرایط خاصی که وجود دارد ممکن است فرآیند دسترسی به سرویسهای خارجی پیچیده و زمانبر باشد، به خصوص زمانی که نیاز به روشهای غیرمعمول برای پرداخت و ثبتنام داریم (استفاده از سرویسهای واسط یا رمزارز).
برای ساخت حساب و دریافت verification جهت استفاده از API به یک شماره تلفن نیاز است که از طرف Open AI تحریم نباشد که در صورتی که چنین سیم کارتی در دسترس نباشد میتوان از سرویسهای شماره مجازی استفاده کرد. پس از ساخت حساب و تائید شماره تلفن نیاز به شارژ کردن حساب دارید که این مرحله هم اگر دسترسی به روشهای پرداخت بینالمللی ندارید باید شارژ کردن را به سرویسها و سایتهایی که چنین پرداختهایی را انجام میدهند بسپارید.
نصب کتابخانه
درخواستهای Open AI با استفاده از پروتکل HTTP ارسال میشوند اما نیازی به پیادهسازی این بخش (مسیرها، احراز هویت و token و...) نیست و کتابخانه رسمی Open AI جهت استفاده از سرویسها وجود دارد. کتابخانه مورد نیاز تحت عنوان openai
در npm
ثبت شده است که میتوانید با استفاده از دستور زیر آن را دانلود و به پروژه اضافه کنید:
npm i openai
ارتباط با مدل
محبوبیت و پیشرو بودن Open AI باعث شده که با ارائه این کتابخانه، یک روش و ساختار مشخص برای ارتباط با مدلهای زبانی شکل بگیرد و به نوعی استانداردسازی شود. مدلهای زبانی به خودی خود هیچگونه حافظهای نسبت به کاربر، کانتکست مورد بحث و پیامهای قبلی ندارند و با استفاده از مفهومی تحت عنوان Chat completion، میتوان به حالتی شبیه به حافظه داشتن دست یافت.
برای انتخاب مدل، از صفحه رسمی پلتفرم OpenAI استفاده کنید. همچنین در نظر داشته باشید که برخی از مدلها و ابزارها با محدودیت و تأخیر در پلتفرم API در دسترس قرار میگیرند.
ارسال درخواست ساده
برای مثال یک پیام به مدل 3.5 Turbo
به سادهترین شکل ممکن ارسال میکنیم؛ قبل از هرگونه درخواستی باید یک instance از کلاس OpenAI داشته باشیم (نیازی به ساخت نمونه جدید برای هر درخواست نیست):
// @ts-check
import OpenAI from 'openai';
const apiAccessToken = ""; // کلید دسترسی
const client = new OpenAI({ // ایجاد یک نمونه از کلاس جهت ارتباط با سرور
apiKey: apiAccessToken
});
const result = await client.chat.completions.create({
model: "gpt-3.5-turbo", // مدل مورد نظر
messages: [
{
role: "user", // نقش کسی که این پیام رو داره ارسال میکنه؛ در اینجا منظور کاربر نهایی است
content: "سلام"
}
]
});
if (result.choices?.length > 0) {
const output = result.choices[0]?.message.content;
console.log(output); // خروجی مدل: سلام! چطور میتوانم کمکتان کنم؟
}
استفاده از نقشها (Role)
حالا اگر بخواهیم به مدل نکتهای را جهت کنترل کردن و محدود کردن خروجی بگوییم، باید از نقش system استفاده کنیم که برای مدل اولویت بالاتری نسبت به نقش user دارد؛ در واقع به حرفهای system با دقت گوش میدهد و میتوان گفت غیر ممکن است خارج از آن عمل کند. برای مثال با ارسال پیام "Only speak 'Persian', no other language is accepted" مدل را مجبور به تولید متن فارسی میکنیم:
const result = await client.chat.completions.create({
model: "gpt-3.5-turbo",
messages: [
{
role: "system",
content: "Only speak 'Persian', no other language is accepted"
},
{
role: "user",
content: "Hello, can we chat in English?"
}
]
});
در چند اجرا، خروجی مدل "بله، من فقط به فارسی پاسخ می دهم. چگونه می توانم به شما کمک کنم؟" و "ببخشید، فقط میتوانم به زبان فارسی پاسخ دهم. چگونه میتوانم کمکتان کنم؟" بوده که نسبتا پاسخهای مناسبی هستند.
اما ممکن است خروجی همیشه جالب نباشد؛ اگر پیام سیستمی "فقط فارسی به کاربر جواب بده" باشد، ممکن است خروجی مدل "بله، میتوانیم به انگلیسی چت کنیم. چطور میتوانم به شما کمک کنم؟" باشد. هرچند دلیل این پاسخ به دور از منطق نیست چون همان طور که قبلا گفتم مدلها حافظه و درکی از پیام ندارند و در این مثال مدل متوجه نیست که نمیتواند خروجی انگلیسی تولید کند و صرفا بعد از ساخت خروجی انگلیسی، آن را به فارسی تبدیل/ترجمه کرده است.
شبیهسازی حافظه
همان طور که قبلا اشاره شد، مدلهای زبانی به خودی خود حافظه و تاریخچهای ندارند و هنگامی که شما به عنوان یک شخص یا چت بات با مدل زبانی رفتار میکنید نیاز به شبیهسازی یک حافظه دارید. راه اصلی جهت شبیهسازی حافظه، نگهداری و ارسال مجدد پیامهای قبلی به مدل است، به این شکل که پیامهای ورودی (کاربر) با نقش user و پیامهای خروجی (مدل) با نقش assistant مشخص شدهاند و با حفظ ترتیب برای API ارسال میشوند:
const result = await client.chat.completions.create({
model: "o1-mini",
messages: [
{
role: "user",
content: "سلام، خیلی خلاصه بگو، آیا پایتون زبان برنامهنویسیه؟"
},
{
role: "assistant",
content: "بله، پایتون یک زبان برنامهنویسی محبوب و قدرتمند است که در بسیاری از زمینهها از جمله توسعه وب، علم داده و هوش مصنوعی مورد استفاده قرار میگیرد."
},
{
role: "user",
content: "ولی فکر کنم خزنده باشه"
}
]
});
در این مثال کاربر مکالمه را ادامه داده و اصلاحی در موضوع مورد بحث انجام داده، و مدل خروجی زیر را تولید کرده است:
"بله، پایتون هم نام یک زبان برنامهنویسی محبوب و هم نام یک نوع مار خزنده است. در پاسخ قبلیام منظورم زبان برنامهنویسی پایتون بود. اگر سوالی در مورد یکی از این دو موضوع دارید، خوشحال میشوم بیشتر توضیح دهم!"
توجه داشته باشید که در کنار ذخیره و ارسال مجدد پیامها، مدل نیز پردازش مجدد انجام میدهد و اینکار موجب افزایش هزینه و تاخیر میشود.
جستجو وب
در حال حاضر Open AI امکان جستجو در وب و استفاده از اطلاعات جدید رو توسط ۲ مدل gpt-4o-search-preview
و gpt-4o-mini-search-preview
فراهم کرده که با تغییر مدل و استفاده از Chat completion قابل استفاده است:
const result = await client.chat.completions.create({
model: "gpt-4o-mini-search-preview-2025-03-11",
web_search_options: { // تنظیمات مربوط به سرچ
search_context_size: "high" // مقدار اطلاعات و حافظه مورد استفاده سرچ
},
messages: [
{
role: "user",
content: "گوشی Nothing Phone 3a رو بررسی کن"
}
]
});
و استفاده از روش جایگزین Chat completion یعنی Responses API:
const result = await client.responses.create({
input: "nodejs 23.6 رو بررسی کن",
model: "gpt-4o-mini-2024-07-18",
tools: [
{
type: "web_search_preview_2025_03_11",
search_context_size: "low",
}
]
});
const output = result.output_text;
لینک صفحه رسمی مربوط به Web search
تعامل با مدل توسط صدا
در حال حاضر اکثر مدلهای زبانی بر پایه متن هستند و صرفا یک ورودی متنی و یک خروجی متنی دارند. به عبارت دیگر مدلهای زبانی مانند ChatGPT به طور مستقیم از تصویر (عکس یا فیلم)، فایل یا صدا پشتیبانی نمیکنند. جهت ارسال دستور/ورودی به صورت صوتی یا دریافت خروجی به صورت صوتی باید قبل و بعد از صدا زدن مدل، تبدیل متن و صدا رو انجام بدیم. Open AI برای اینکار سرویس ارائه داده که به شکل زیر قابل استفاده است:
تبدیل صدا به متن
const filePath = "./voice.mp3";
const result = client.audio.transcriptions.create({
file: fs.createReadStream(filePath),
model: "whisper-1",
language: "fa", // مشخص کردن زبان جهت دریافت خروجی بهتر
prompt: "This user voice is about programming", // مشخص کردن موضوع بابت خروجی دقیقتر
response_format: "verbose_json",
});
const duration = Math.ceil(Number.parseInt(result.duration)); // مدت زمان صدا بابت محاسبه هزینه
const text = result.text; // خروجی مدل
تبدیل متن به صدا
const text = "";
const result = await client.audio.speech.create({
input: text,
model: "tts-1", // مدل مورد استفاده در تبدیل
voice: "alloy", // انتخاب شده از لیست صداهای ارائه شده
response_format: "mp3", // فرمت صدای خروجی
});
const buffer = Buffer.from(await result.arrayBuffer());
جمع بندی
در این مطلب به معرفی و آموزش استفاده از پلتفرم OpenAI با استفاده از API آن پرداختیم که اساس و نحوه کار با آن بررسی شد. از مدلهای زبانی میتوان در انواع نرمافزار استفاده کرد. برای مثال چت بات، تحلیل داده، طبقهبندی نظرات، خروجی گرفتن با ساختار JSON و استفادههای پیچیدهتر که نیاز به خلاقیت و ترکیب روشها و لایههای مختلف پردازشی دارند که خارج از بحث فنی است و محدود به این مطلب نیست (مثلا استفاده از pipelineها و ایجاد حافظه هوشمند و پویا).