ابزارهای هوش مصنوعی (AI) از زمان راهاندازی ChatGPT در نوامبر ۲۰۲۲ در دنیای فناوری سر و صدا ایجاد کردهاند. این ابزارها از نظر شکل و عملکرد بسیار متفاوت هستند، اما یک ویژگی ثابت میان آنها این است که هدفشان بهبود جریان کاری و افزایش بهرهوری کاربران است.
با این حال، استفاده مؤثر از این ابزارها بدون درک نحوه عملکرد و بهترین شیوه تعامل با آنها میتواند چالشبرانگیز باشد. بیشتر این ابزارها – به ویژه آنهایی که بر اساس مدلهای Generative Pretrained Transformer (GPT) اوپنایآی ساخته شدهاند – مدلهای زبان بزرگ (LLM) هستند که اساساً با دریافت یک متن ورودی و پیشبینی محتملترین متن بعدی براساس دادههایی که روی آن آموزش دیدهاند، کار میکنند.
مدلهای اوپنایآی روی حجم عظیمی از دادهها آموزش دیدهاند، شامل اطلاعات مهندسی نرمافزار، کدنویسی و طراحی سیستم. بنابراین، هوش مصنوعی ساخته شده با این مدلها میتواند به سوالات شما در این زمینهها و بسیاری زمینههای دیگر پاسخ دهد.
ابزارهای هوش مصنوعی مانند GitHub Copilot، که بر اساس مدل OpenAI Codex ساخته شده، و ChatGPT توسط توسعهدهندگان برای کمک به نوشتن کد و حل مشکلات فنی به طور گسترده استفاده میشوند. با این حال، این ابزارها محدودیتهایی در مواجهه با چالشهای بزرگ طراحی نرمافزار دارند به دلیل محدودیتهای زمینهای.
ابزارهای پیشرفته مانند smol developer
در اینجا ابزارهای پیشرفتهای مانند smol developer وارد عمل میشوند. Smol developer ابزاری است که بر اساس GPT-3.5 و GPT-4 ساخته شده و هدف آن ارائه جریان کاری بهینهشده با هوش مصنوعی برای طراحی نرمافزار سطح بالاتر است، به طوری که میتوانید از یک متن ورودی کل یک پایگاه کد را تولید کنید.
آیا این همان راهحل نهایی است که توسعهدهندگان منتظر آن بودهاند؟ در این مقاله خودتان خواهید دید. شما یاد خواهید گرفت چگونه با استفاده از smol developer به صورت تکراری یک مشخصات برای یک API ساده RESTful CRUD ایجاد کنید تا هوش مصنوعی از آن برای تولید پایگاه کد استفاده کند. شما خواهید توانست نقاط قوت و محدودیتهای این رویکرد را مشاهده کرده و با هر مشکلی که قبل از وارد کردن این نوع هوش مصنوعی به جریان کاری خود باید از آن آگاه باشید، آشنا شوید.
نحوه استفاده از هوش مصنوعی برای طراحی API
چند نکته وجود دارد که قبل از شروع این آموزش باید به آنها توجه کنید.
میتوانید کد منبع این پروژه را در این مخزن GitHub پیدا کنید. اگر README مخزن را بررسی کنید، میبینید که میتوانید آن را به دو روش اجرا کنید. روش پیشفرض از Modal برای منابع محاسباتی درخواستی استفاده میکند. با این حال، این آموزش نسخه غیر Modal را استفاده میکند، که در آن اسکریپتهای پایتون را بهصورت محلی روی دستگاه خود اجرا میکنید. این بدان معناست که تنها وابستگیهایی که برای همراهی نیاز دارید به شرح زیر است:
– Git
– Python
– pip (https://pypi.org/project/pip/)
– حساب OpenAI و کلید API
– یک ویرایشگر کد (VS Code انتخاب خوبی است اگر ترجیحی ندارید)
همچنین باید مطمئن شوید حساب OpenAI شما اعتبار دارد یا روش پرداخت تنظیم شده است. هر بار که هوش مصنوعی را فراخوانی میکنید، هزینه آن به حساب OpenAI شما تعلق میگیرد. هزینه هر بار اجرا نسبتاً کم است. برای مثال، همه اجراهای لازم برای نوشتن و اشکالزدایی این مقاله حدود ۱ پوند (GBP) هزینه داشت.
راهاندازی
با نصب پیشنیازها، میتوانید پروژه را راهاندازی کنید. فرمان زیر را در ترمینال خود اجرا کنید تا smol developer را روی کامپیوتر خود کلون کنید و وارد دایرکتوری آن شوید:
سپس فرمان زیر را برای نصب وابستگیهای پایتون با استفاده از pip اجرا کنید:
پس از اتمام این فرمان، باید کلید API OpenAI خود را به عنوان یک متغیر محیطی ترمینال صادر کنید تا اسکریپت بتواند به آن دسترسی داشته باشد. این کار را با اجرای فرمان زیر انجام دهید و کلید API خود را جایگزین کنید:
نکته: اگر از Modal استفاده میکردید، فایلی با نام ENV وجود داشت که کلید API شما در آن قرار داشت، اما کد به نظر نمیرسد برای خواندن از این فایل آماده باشد اگر ابزار را بهصورت محلی اجرا میکنید. در این حالت، باید کلید API را به صورت دستی صادر کنید.
پس از صادر کردن کلید API، میتوانید بررسی کنید همه چیز بهدرستی کار میکند یا خیر با اجرای فرمان زیر:
نکته: بسته به سیستم عامل و نحوه نصب پایتون، اجرایی شما ممکن است python3 یا فقط python باشد. بلوکهای کد در این آموزش از python3 استفاده میکنند، بنابراین ممکن است بسته به تنظیمات خود نیاز به تغییر داشته باشید.
اجرای این فرمان ابزار smol developer را فراخوانی میکند، که متن ورودی شما را دریافت کرده و آن را از طریق چند مرحله مقدماتی برای ایجاد یک متن پیشرفتهتر برای هوش مصنوعی عبور میدهد. این ابزار ابتدا از متن ورودی شما برای ایجاد فهرستی از فایلهایی که هوش مصنوعی معتقد است برای ایجاد پروژه نیاز است، استفاده میکند.

سپس هر یک از این نام فایلها همراه با متن اصلی به هوش مصنوعی داده میشود و از آن خواسته میشود محتوای مورد انتظار فایل را تولید کند. این فرایند برای تمام فایلهایی که هوش مصنوعی پیشنهاد داده تکرار میشود و در نهایت، اگر همه چیز درست پیش برود، یک پایگاه کد کامل ایجاد میشود.
تعریف API
قبل از درخواست از هوش مصنوعی برای ساخت برنامه خود، باید ایده روشنی از آنچه میخواهید داشته باشید. همانطور که به زودی خواهید دید، این امر هنگام کار با ابزارهای مبتنی بر هوش مصنوعی بسیار مهم است. هوش مصنوعی میتواند هرگونه خلأ در مشخصات را پر کند، که میتواند به سرعت منجر به خروجیهای غیرمنتظره شود.
تلاش برای مشخص کردن همه چیز بهطور کامل یکباره نیز منطقی نیست. رویکردی معتدلتر شامل ایجاد مشخصات بهصورت تکراری و اجرای آن از طریق هوش مصنوعی پس از هر اضافه و تغییر برای بررسی اینکه آیا تغییرات شما اثرات مطلوب دارد، است.
بهعنوان پایه، باید بدانید چه چیزی میسازید. در این مورد، از هوش مصنوعی میخواهید یک API ساده RESTful برای Node.js بسازد. این API مدل سادهای از یک سیستم مدیریت تیکت با اسکیمایی شبیه به این است:

ساخت API
برای شروع ساخت API، باید یک فایل Markdown جدید در مخزن ایجاد کنید تا مشخصات شما را نگه دارد. در حالی که میتوانید متن ورودی خود را مستقیماً در خط فرمان ارائه دهید، همانند مثال قبلی، ابزار همچنین فایلهای Markdown را میپذیرد که با رشد اندازه و پیچیدگی مشخصات شما، کار با آنها آسانتر است.
تکرار ۱
یک فایل در ریشه مخزن با نام my-prompt.md ایجاد کنید و محتوای زیر را به آن بدهید:
نکته: علامتهای ””” در اولین و آخرین خط معمولاً لازم هستند، زیرا بدون آنها اسکریپت به صورت گاهبهگاه کرش میکند، بسته به خروجی تولید شده توسط هوش مصنوعی. اضافه کردن این علامتها به کاهش این مشکل کمک میکند.
این کد تا حد ممکن مینیمال است و جزئیات کلیدی آنچه میخواهید هوش مصنوعی بسازد را پوشش میدهد. برای اجرای این مشخصات توسط هوش مصنوعی، فرمان زیر را اجرا کنید:
این فرمان خروجی زیادی چاپ میکند که نشان میدهد هوش مصنوعی در حال انجام چه کاری است، اما همان مراحل کلی مثال قبلی را دنبال میکند. ابتدا تصمیم میگیرد چه فایلها و وابستگیهایی نیاز دارد و سپس فایلها را یکی یکی ایجاد میکند.
اگر همراهی کنید، کدی که تولید میشود احتمالاً با کدی که اینجا نشان داده شده متفاوت خواهد بود. این نشاندهنده یکی از مسائل ابزارهای مبتنی بر هوش مصنوعی است. به طور خاص، این ابزارها غیرقطعی هستند و تضمینی وجود ندارد که هر بار با یک ورودی، خروجی یکسانی دریافت کنید.
پس از اتمام تولید کد، میتوانید به دایرکتوری generated/ در مخزن نگاه کنید تا ببینید هوش مصنوعی چه چیزی ایجاد کرده است. در این مورد، چند فایل تولید شدهاند که به نظر غیر مرتبط با متن ورودی اصلی هستند، مانند middleware احراز هویت و اعتبارسنجی و فایل پیکربندی پایگاه داده.
برای فایل index.js، محتوای زیر تولید شده است:
هوش مصنوعی به نظر میرسد از Mongoose برای اتصال به یک نمونه MongoDB فرضی استفاده کرده است. جالب اینجاست که هیچ نشانهای از middleware اعتبارسنجی از ساختار فایلها استفاده نشده است. بررسی فایل validationMiddleware.js، محتوای زیر تولید شده است:
این کد از نگاه اول منطقی به نظر میرسد، اما جستجوی هر یک از این توابع در کد تولید شده نشان میدهد که در هیچ جایی استفاده نشدهاند. این مسئله دوم با این نوع ابزار را نشان میدهد: محدودیت زمینهای. زیرا هر فایل بهصورت جداگانه تولید میشود، معمولاً پیش میآید که هوش مصنوعی توابعی تولید کند که هرگز استفاده نمیشوند یا توابع را ایجاد کرده و سپس به اشتباه یا با پارامترهای نادرست فراخوانی میکند.

فعلاً بهترین کار این است که جزئیات بیشتری به مشخصات اضافه کنید و دوباره امتحان کنید.
تکرار ۲
مسائل اصلی که در این تکرار باید حل شوند شامل حذف کدهای اعتبارسنجی و پایگاه داده غیرضروری است. این کار را با بهروزرسانی مشخصات به شرح زیر انجام دهید و بخش “Adjustments” را برای دستورالعملهای اضافی برای هوش مصنوعی اضافه کنید:
پس از اجرای این متن توسط هوش مصنوعی، فایلهای زیر تولید میشوند.

نکته: هر بار که ابزار را اجرا میکنید، تمام فایلهای موجود در دایرکتوری generated/ حذف میشوند اما دایرکتوریها باقی میمانند. هر دایرکتوری خالی که مشاهده میکنید، بقایای اجراهای قبلی است.
این با مشخصات جدید هماهنگ است. دوباره، برای index.js، کد تولید شده به شرح زیر است:
این کد به ظاهر بهتر است، زیرا middleware غیرضروری ندارد. با این حال، چند واردات استفاده نشده وجود دارد:
– uuid
– userController
– ticketController
– commentController
– userModel
– ticketModel
– commentModel
علاوه بر این، به نظر میرسد در اعلام مسیرها مشکلی وجود دارد، زیرا توابعی که به آنها اشاره شدهاند هیچ امضای تابعی را ارائه نمیدهند. مشکل وقتی واضح است که یکی از فایلهای مسیر مانند routes/user.js را باز کنید:
فایلهای مسیر توابعی که index.js سعی دارد استفاده کند را صادر نمیکنند (اگرچه کنترلرها توابعی با همان نامها صادر میکنند). بنابراین این کد اجرا نخواهد شد، زیرا ناسازگاری بین الگوهای استفاده شده در فایلها وجود دارد. رفع این مشکل با مشخص کردن دقیقتر مشخصات ممکن است.
تکرار ۳
برای اضافه کردن جزئیات بیشتر به مشخصات و دریافت خروجی پایدارتر، بخشهای زیر را بعد از سرصفحه ### Comment و قبل از ## Adjustments اضافه کنید:
userController.js
این فایل بهعنوان یک رابط HTTP عمل میکند و باید منطق کسبوکار را از userService فراخوانی کند. این فایل باید توابع زیر را تعریف کند:
-
getAllUsers
-
getUserById
-
createUser
-
updateUser
-
deleteUser
هر یک از این توابع باید تابع همنام خود از سرویس مربوطه را فراخوانی کند.
userService.js
این فایل منطق کسبوکار ماژول را در خود جای میدهد. این فایل باید توابع زیر را تعریف کند:
-
getAllUsers
-
getUserById
-
createUser
-
updateUser
-
deleteUser
با اضافه شدن این جزئیات درباره ساختار ماژولها، دوباره هوش مصنوعی را اجرا کنید. این بار فایلهای تولید شده مطابق با مشخصات خواهند بود. بررسی index.js نشان میدهد تغییرات دلخواه اعمال شدهاند:
متأسفانه، دو مشکل اساسی در این تکرار وجود دارد. ماژول Tickets عمدتاً صحیح است، اما ماژولهای User و Comment بهطور نادرست Router اکسپرس را در هر دو فایل routes و controllers فراخوانی میکنند:
این بدان معناست که این ماژولها کار نمیکنند و هنگام اجرا برنامه کرش میکند. بخش عجیب این است که ماژول Tickets مطابق با مشخصات ساخته شده است. این احتمالاً به محدودیت زمینهای هوش مصنوعی مربوط است.
گامهای بعدی
این فرایند ممکن است مدت زیادی طول بکشد تا چیزی کاملاً درست و قابل اجرا ایجاد شود. حتی در تستها، خروجیهای امیدوارکننده هنوز نیاز به اصلاح دستی داشتند.
اگر همراهی کردهاید، سعی کنید متن ورودی را دقیقتر کنید تا خروجی بهتری دریافت کنید. با این حال، سرعت تولید میتواند بسیار سریع، کند یا متوسط باشد.
یافتهها و مشاهدات
Smol developer ابزاری چشمگیر فراتر از سایر ابزارهای کدنویسی AI است. بیشتر ابزارهای دیگر مانند Copilot محدود به تولید خطوط یا بلوکهای کوچک کد هستند، نه کل پایگاه کد. با این حال، هنوز جوان است و مسائل خاصی هنگام ارزیابی کارایی و بهرهوری دارد.
غیرقطعی بودن
یکی از بزرگترین چالشها با ابزارهای AI مبتنی بر LLM، عدم قطعی بودن آنها است. در ابزارهایی مانند Copilot، معمولاً این مسئله مشکلساز نیست، زیرا فقط قطعات کوچک کد تولید میشود و توسعهدهنده مسئولیت استفاده صحیح را دارد.
اما هنگام تولید یک پایگاه کد کامل، این موضوع بیشتر مشکلساز است. غیرقطعی بودن یعنی کدی که تولید میشود ممکن است هرگز به همان شکل دوباره تولید نشود، که برای تغییر مکرر مشخصات و بازتولید کد چالشبرانگیز است.
این همچنین ارزش و نقش مشخصات را زیر سوال میبرد. همانطور که دیدید، هوش مصنوعی حتی در مورد مواردی که بهوضوح در مشخصات ذکر شدهاند نیز ممکن است خطا کند. خروجی حاصل از یک مشخصات ممکن است تغییر کند و مشخصات بیشتر به یک پیشنهاد شباهت دارد تا منبع حقیقت.
کمبود زمینه
ابزارهای هوش مصنوعی معمولاً مشکل زمینهای دارند. ابزارها از دامنه کسبوکار یا بخش اعظم کد اطراف اطلاع ندارند. به همین دلیل، ابزارهایی مانند Copilot اغلب پیشنهاداتی میدهند که منطقی نیستند و شما باید مراقب باشید کدام پیشنهادات را قبول میکنید.
در مقایسه، smol developer کل پایگاه کد را از صفر ایجاد میکند و ممکن است تصور کنید که به کل زمینه دسترسی دارد. با این حال، smol developer فایلها را یکی یکی تولید میکند و بنابراین همچنان ممکن است اشتباهات مشابه رخ دهد. برای مثال، حتی در تکرار ۳، امضاهای توابع در سرویسها با جایی که فراخوانی میشوند مطابقت نداشتند.
Smol developer میتواند از GPT-3.5-turbo یا GPT-4 استفاده کند. متأسفانه، GPT-4 هنوز در بتای بسته است و GPT-3.5-turbo در دسترس است. GPT-3.5-turbo معمولاً در حفظ زمینه مشکل بیشتری دارد. نویسنده smol developer اشاره میکند عملکرد GPT-4 بهتر است، بنابراین در صورت دسترسی، بهتر است از آن استفاده کنید.
ثبات
مشکلات مربوط به زمینه، گاهی باعث ناپایداری نیز میشود. به طور خاص، در تکرار ۳، ماژول tickets طبق مشخصات تولید شد، اما دو ماژول دیگر چنین نبودند. این مشکل باعث دشواری در اشکالزدایی میشود.
استانداردسازی
برخلاف کدنویسی سنتی که به استانداردهای دقیق متکی است، هوش مصنوعی مبتنی بر LLM ورودی متنی بدون محدودیت میپذیرد. هیچ زبان استانداردی برای انتقال نیت دقیق شما وجود ندارد. خروجی به تعبیر غیرقطعی هوش مصنوعی از کلمات شما بستگی دارد. این یک پایه دشوار برای ساخت برنامه ایجاد میکند و کیفیت کد تا حدی به مشخصات و تا حدی به شانس بستگی دارد.
جمعبندی
این مقاله نشان میدهد چگونه ابزارهای LLM میتوانند برای طراحی و توسعه API استفاده شوند. ابزارهایی مانند smol developer میتوانند به سرعت حجم زیادی کد بر اساس مشخصات شما تولید کنند و شما میتوانید با تغییر تکراری مشخصات، خروجی را به سمت نتیجه دلخواه هدایت کنید. ابزارهای هوش مصنوعی در ابزارهای توسعهدهندگان جای پای محکمی پیدا کردهاند و به زودی از بین نخواهند رفت.
با این حال، ابزارهایی که وعده تولید کل پایگاه کد را میدهند، هنوز برای استفاده در تولید آماده نیستند. نسل فعلی ابزارهای AI نیاز به مبانی مهمی مانند قطعی بودن، ثبات و استانداردسازی دارد. این جنبهها احتمالاً با گذر زمان بهبود خواهند یافت، بنابراین ابزارهایی مانند smol developer از نظر فنی چشمگیر هستند و ارزش توجه دارند. تمام متنهای ورودی و کدهای تولید شده در این مقاله در یک مخزن عمومی GitHub موجود است.
ابزارهای AI تنها راه بهبود بهرهوری توسعه API نیستند. ابزارهایی مانند Tyk، یک دروازه API متنباز، راهی قابل اعتماد برای بهبود جریانهای کاری API ارائه میدهد. Tyk همه چیزهایی که برای یک دروازه API متنباز نیاز دارید، از احراز هویت و محدودیت نرخ تا کنترل دسترسی جزئی، لاگگیری و امکانات بیشتر ارائه میدهد. اگر API توسعه میدهید و به دنبال پایهای پایدار برای یکپارچهسازی همه چیز هستید، حتماً آن را امتحان کنید.

