کاهش هزینه تولید کد از ۰.۲۴ دلار به ۰.۰۱ دلار برای هر اپلیکیشن تمامعیار با استفاده از «پیشنهادات مثال تکشات» و خروجی ساختاریافته
من در حال یافتن راهی برای ساخت اپلیکیشنهای فولاستک با استفاده کمتر از توکنها و دقت بالا بودم. جزئیات دو تلاش قبلی من را میتوانید اینجا بخوانید. این پست ادامهای بر آن تلاشها است.
هدف من:
ساخت ابزاری که با تنها یک ورودی از کاربر، مثلاً “یک اپلیکیشن مدیریت هزینهها بساز”، بتواند یک اپلیکیشن فولاستک را به صورت کامل ایجاد کند.
کد منبع باز و رایگان: https://github.com/vivek100/oneShotCodeGen
چطور مصرف توکن را ۷۰٪ کاهش دادم و دقت را تا ۸۰٪ افزایش دادم:
- استفاده از یک کتابخانه به نام outlines که خروجی ساختاریافتهای با کمک مدلهای زبان بزرگ (LLM) تولید میکند.
- این متد با اختصاص احتمال کم یا صفر به توکنهایی که با ساختار خروجی سازگار نیستند (مثلاً نامهایی که با حرف A شروع میشوند)، دقت خروجی را افزایش میدهد.
- این روش، دقت بالاتری حتی در مدلهای کوچکتر مثل gpt-4o-mini فراهم میکند.
- استفاده از خروجی ساختاریافته برای تولید کد فرانتاند و بکاند.
- خروجی دیتابیس به صورت یک فایل JSON از موجودیتها و ارتباطات آنها ارائه میشود. این فایل از طریق اسکریپت پایتون پردازش شده و کوئریهای SQL ایجاد میشود تا جداول و ویوها در Supabase ساخته شوند.
- خروجی فرانتاند بر اساس React Admin و اجزا ساختاربندی شده است و با استفاده از قالبهای Jinja2، کد فرانتاند تولید میشود.
- بکاند توسط Supabase JS Client از طریق Data Providers شبیهسازی میشود.
- طراحی «پیشنهادات تکشات» برای مثالها، که باعث افزایش دقت خروجی میشود. بر اساس این روش، استفاده از مثال تکشات ساختاریافته خروجی دقیقی تولید میکند. مرجع: https://blog.dottxt.co/prompt-efficiency.html
- در مجموع، این راهکار کد فرانتاند و بکاند را با توکن کمتر، دقت بالاتر و مدلهای سادهتر مثل gpt-4o-mini تولید میکند و هزینه را از ۰.۲۴ دلار به ۰.۰۱ دلار کاهش میدهد.
چالشهای کنونی:
البته این پروژه هنوز در مرحله اثبات مفهوم (Proof of Concept) است و چالشهایی دارد:
- به دلیل محدودیتهای تحمیلشده برای دنبال کردن ساختار خروجی و استفاده از فریمورک فرانتاند بسیار کلی، امکانات محدود است. شبیه به ابزارهای بدون کدنویسی (No-code) عمل میکند. با اضافه کردن یک فیدبک لوپ و مدل بزرگتر، میتوان این مشکل را برطرف کرد.
- رابط کاربری فرانتاند هنوز محدود است. اما با زمان و تلاش بیشتر، مثلاً با ادغام فریمورکهایی مانند ShadCN، میتوان ۸۰٪ نیازهای رابط کاربری را حل کرد.
بهبودهای احتمالی:
برای بهبود عملکرد پروژه و رفع اشکالات، میتوان تغییرات زیر را در نظر گرفت:
- رفع باگهای کوچک در تولید کد و نحوه دریافت داده از بکاند برای اجزا مختلف.
- بهبود پیشنهادات تکشات برای مثالها.
- تقویت مدلهای Pydantic برای جلوگیری از خطا در خروجی توکنها.
- ایجاد یک پایگاه دانش (RAG) از موارد استفاده و نمونههای طراحی برای آموزش بهتر AI.
- جایگزینی قالبهای Material UI با قالبهای ShadCN برای بهبود بصری فرانتاند.
- اضافه کردن توابع پیچیده بکاند مثل تریگرها برای بهروزرسانی چندین جدول.
- پیادهسازی قوانین کنترل دسترسی مبتنی بر نقش (RBAC) و محدودیتهای سطح ردیف (RLS) روی دیتابیس.
نمونه اپلیکیشنهای ساختهشده:
برای امتحان، میتوانید با استفاده از ایمیل [email protected] و رمزعبور test123 وارد شوید:
- مدیریت هزینهها: https://newexpensetracker.vercel.app/
- مدیریت درخواستهای شغلی: https://newjobtracker.vercel.app/
این اپلیکیشنها در ظاهر ساده هستند اما زمان زیادی صرف طراحی چارچوب کلی شد. با نهایی کردن این چارچوب، ایجاد اپلیکیشنهای پیچیده با رابطهای کاربری باکیفیت نباید مشکل باشد.
گامهای بعدی:
در ادامه قصد دارم مجموعهای خوب از اجزا با ShadCN تهیه کنم و نحوه عملکرد آنها را یاد بگیرم تا بتوانم آنها را تمپلیتسازی کنم. همچنین، مدلهای Pydantic را ارتقا داده و سپس نسخهای تولید کنم که برای استفاده در محیط تولید آماده باشد.
منتظر دریافت بازخوردها درباره روش پروژه هستم و اگر نکتهای از قلم افتاده یا راهی برای بهبود دارید، خوشحال میشوم بشنوم.
منبع: لینک منبع