وبلاگ Splync به ۴۲ زبان دارد
این بیست و سومین مقاله در وبلاگ من برای Splync است، یک ردیاب بودجه مشترک برای زوجها، دوستان و خانوادهها. ممکن است تعجب کنید که چگونه هر پست را به ۴۲ زبان منتشر میکنم در حالی که من یک مهندس تنها هستم. همانطور که در بالای هر مقاله نوشته شده، این وبسایت بهطور خودکار با استفاده از نرمافزاری که خودم ساختهام به زبانهای مختلف ترجمه میشود. برای روشن شدن: من حتی یک جمله را بهصورت دستی به زبانی به غیر از انگلیسی نمینویسم. به همین دلیل، از خوانندگان خواهش میکنم در مواقعی که دقت معنی واقعاً اهمیت دارد به نسخه اصلی انگلیسی مراجعه کنند. با این حال، پس از چندین بار آزمایش و خطا در بهبود فرآیند ترجمه، معتقدم کیفیت کلی ترجمه به اندازه کافی خوب است. در این مقاله، به اشتراک میگذارم که نرمافزار من چگونه وبلاگ Splync را چندزبانه میکند.
پایتون و OpenAI API با هم
همیشه هر مقاله را به زبان انگلیسی ساده، از جمله متادیتاهای مربوط به سئو، شروع میکنم. پس از آن، اسکریپت پایتون من متن انگلیسی را به OpenAI API ارسال میکند، همراه با یک درخواست و یک فایل مرجع کوچک. در سرورهای OpenAI، ChatGPT-4o درخواست را میخواند و مقاله ترجمهشده را مثلاً به زبان عربی در قالب JSON برمیگرداند. وقتی مکبوک من آن ترجمه را دریافت میکند، بلافاصله درخواست دیگری ارسال میکند، این بار برای زبان بنگالی. اسکریپت بهطور خودکار در تمامی ۴۲ زبان مقصد میچرخد. در پایان فرآیند، کامپیوتر من دارای ۴۲ فایل JSON ترجمه شده است. یک اسکریپت پایتون دیگر سپس هر ترجمه را در یک الگوی HTML جایگذاری کرده و ۴۲ فایل HTML را در کمتر از یک ثانیه تولید میکند. همه فایلها به سروری که این وبلاگ در آن میزبانی میشود بارگذاری شده و هر نسخه زبانی در دایرکتوری مخصوص خود قرار میگیرد. در نهایت، یک اسکریپت پایتون سمت سرور، فهرست مقاله و پیوندهای «پست بعدی» را بهروزرسانی میکند تا ناوبری هر زبان سازگار بماند. با مقاله اصلی انگلیسی که به زبان ساده نوشته شده، کل فرآیند معمولاً ۵ دقیقه یا کمتر طول میکشد. وقتی نیاز به تغییرات دارم، چندین فایل HTML را بهطور همزمان با استفاده از اسکریپتهای پایتون سمت سرور بهروزرسانی میکنم.
API چیست
اگر با اصطلاحات فنی آشنا نیستید، ممکن است تعجب کنید که چگونه کامپیوتر من در وهله اول با سرور OpenAI «صحبت» میکند. پاسخ چیزی به نام API، رابط برنامهنویسی برنامه است. میتوانید API را بهعنوان یک پنجره پیامرسان بین دو برنامه تصور کنید: یک برنامه درخواست ارسال میکند و دیگری پاسخ میدهد. برای مثال، اسکریپت پایتون من پیامی مانند «لطفاً این مقاله را به آلمانی ترجمه کنید» ارسال میکند. OpenAI آن پیام را از طریق API دریافت کرده، ترجمه را آماده کرده و نتیجه را برمیگرداند. این درست مانند سفارش غذا در رستوران است: به پیشخدمت میگویید چه میخواهید، آشپزخانه غذا را آماده میکند و پیشخدمت آن را به میز شما میآورد. و چرا اصلاً به پیشخدمت نیاز دارید؟ زیرا شما به آشپزخانه نمیروید یا مستقیماً با آشپز صحبت نمیکنید — نمیدانید آشپزخانه چگونه کار میکند و نیازی هم ندارید. شما ممکن است به پیشخدمت بگویید «میتوانم یک چیزبرگر داشته باشم؟» و پیشخدمت ممکن است با فرمتی کاملاً متفاوت بگوید «سفارش آماده! T21، Chihuahua!» یک API نقش مشابهی ایفا میکند. این دو سیستم مختلف را بدون نیاز به درک زبان داخلی یا جریان کاری یکدیگر متصل میکند.
چرا به OpenAI API نیاز دارم
حالا که دیدیم API چیست، اینجاست که چرا واقعاً برای این وبلاگ به آن متکی هستم. از نظر عملی، من میدانم که چگونه خودم با ChatGPT «صحبت» کنم — اما ۴۲ زبان برای پردازش دارم. فراخوانی پیشخدمت ۴۲ بار خستهکننده است (برنامه ترجمه انگلیسی به انگلیسی را رد میکند، اما هنوز هم متن را به JSON تبدیل میکند). استفاده از OpenAI API به اسکریپت پایتون من اجازه میدهد که همه آن درخواستها را بهطور خودکار ارسال کند و مرا از کارهای تکراری نجات دهد تا بتوانم روی چیزهای دیگر تمرکز کنم. من یک توسعهدهنده تنها هستم، بنابراین باید از زمانم به کارآمدترین شکل ممکن استفاده کنم. هر وقت وظیفهای تکراری با قوانین مشخص میبینم، آن را خودکار میکنم. نتیجه معمولاً فرآیندی است که میلیونها بار سریعتر و کاملاً بدون خطاست. به همین دلیل است که خودکارسازی از طریق API ضروری است — اجازه میدهد اسکریپت من همه ۴۲ «سفارش» را بلافاصله و با اطمینان انجام دهد.
چرا ۴۲ زبان؟
از نظر فنی، میتوانم زبانهای بیشتری اضافه کنم؛ فقط چند دقیقه اضافی طول میکشد تا در حالی که ظرفها را میشویم اجرا شود. اما بهطور شخصی عدد ۴۲ را دوست دارم، «پاسخ به پرسش نهایی زندگی، جهان و همه چیز» از کتاب داگلاس آدامز. فراتر از وابستگی من به عدد ۴۲، افزودن زبانهای بسیار جزئی میتواند خطرناک باشد، زیرا ترجمههای AI ممکن است برای زبانهایی با دادههای آموزشی محدود کمتر قابل اعتماد شوند.
دمای ChatGPT 4o
وقتی برای اولین بار با این روش ترجمه چندزبانه آزمایش کردم، نتایج مناسب بود اما کامل نبود. برخی جملات بهاشتباه ترجمه شده، بیش از حد لفظی یا در برخی زبانها بهطور ظریف گمراهکننده بودند. همچنین نگران بودم که بهطور غیرعمدی عباراتی ایجاد کنم که ممکن است در زمینههای فرهنگی خاص نامناسب یا حساس باشند. و البته، نمیخواستم ترجمههایم روباتیک یا مکانیکی به نظر برسند. یکی از عوامل کلیدی در کیفیت ترجمه، تنظیم دما است — یک پارامتر که کنترل میکند AI چقدر «خلاق» یا «سختگیر» باشد. دمای بالا AI را خلاقانهتر میکند، اما کمتر قابل پیشبینی نیز هست. دمای پایین باعث میشود نزدیک به معنی اصلی بماند، اما میتواند گاهی اوقات خشک به نظر برسد. پیدا کردن تعادل درست زمان زیادی از آزمایش و خطا گرفت: بهاندازه کافی پایین برای اطمینان از دقت، اما نه آنقدر پایین که متن بیروح شود. پس از آزمایشهای زیاد، احساس کردم دما = ۰.۸ بهترین انتخاب برای نیازهای این وبلاگ است: بهاندازه کافی دقیق برای وفاداری به اصل انگلیسی، اما انعطافپذیر بهطور کافی تا در دیگر زبانها طبیعی به نظر برسد.
ChatGPT 5.x از دما پشتیبانی نمیکند
مدلهای جدیدتر مانند ChatGPT 5 و ۵.۱ بهطور کلی دیگر از تنظیمات دما پشتیبانی نمیکنند — پارامتر حذف شده و با مفاهیمی مانند استدلال و تلاش جایگزین شده که بر طرز فکر مدل تأثیر میگذارد نه اینکه چقدر «خلاق» باشد. به بیان دیگر، ChatGPT 4o به من یک دکمه فیزیکی میداد که میتوانستم سبک ترجمه را تنظیم کنم، اما خانواده ۵.x بهطور کامل فلسفه متفاوتی را دنبال میکند. اگر بهطور غیررسمی از جدیدترین مدل بخواهید «این را با دما = ۰.۸ ترجمه کن»، ممکن است تلاش کند به گونهای عمل کند که انگار چنین تنظیمی هنوز وجود دارد، اما بهطور داخلی این پارامتر حذف شده. مدل صرفاً قصد را تقریب میزند. همانطور که OpenAI بهروزرسانی مدلهای خود را ادامه میدهد، ممکن است روزی خط لوله ترجمه خود را تنظیم کنم. فعلاً، ChatGPT 4o همچنان انتخاب من برای ترجمههای چندزبانه است — نهتنها به این دلیل که درک خوبی از زمینه در میان زبانهای مختلف دارد، بلکه به دلیل قیمت مناسب API آن برای توسعهدهندهای مانند من. در واقع، 4o ممکن است به یکی از محبوبترین مدلهای تاریخ OpenAI تبدیل شود.
کارگران OpenAI API
یکی از چیزهای شگفتانگیز درباره OpenAI API — در مقایسه با استفاده مستقیم از ChatGPT در مرورگر — این است که میتوانید از بیش از یک «کارگر» ChatGPT بهطور همزمان استفاده کنید. وقتی درخواستهای ترجمه برای ۴۲ زبان ارسال میکنم، آنها را یکییکی در یک صف آهسته ارسال نمیکنم. بلکه، API میتواند بسیاری از درخواستها را بهطور همزمان پردازش کند، گویی ناگهان گروهی از مترجمان را استخدام کردهام که همه بهطور همزمان شروع به کار کردهاند. اسکریپت پایتون من جریان کار را مانند یک خط تولید کوچک مدیریت میکند: مقاله انگلیسی را آماده کرده، درخواستها را ارسال کرده، منتظر پاسخها میماند و نتایج را به فایلهای JSON پردازش میکند. در همین حال، سرورهای OpenAI چندین نمونه مدل را بهطور همزمان اجرا میکنند که هر کدام زبانی متفاوت را بهطور موازی ترجمه میکنند. این چیزی است که وبسایت یا برنامه ChatGPT نمیتواند انجام دهد — این رابطها به شما یک مدل، یک مکالمه، یک کار در یک زمان میدهند. اما با API، میتوانید بار کاری خود را به اندازهای که اسکریپت شما اجازه میدهد افزایش دهید. برای توسعهدهندهای مانند من، این احساس مانند داشتن یک تیم کوچک از دستیاران باهوش و بدون خودبینی است. این بستگی به سرعت اینترنت دارد، اما معمولاً کارگران را روی ۱۲ تنظیم میکنم.
کاری که برای چندزبانه کردن وبلاگم انجام میدهم، ظرف شستن است
وقتی در دانشگاه کیوتو ریاضیات میخواندم، بهعنوان یک ظرفشور در کافهتریای دانشجویی کار میکردم. در حالی که دستمزد حدود ۵ دلار در ساعت بود، همیشه کار یدی تکراری را بعد از گذراندن چندین ساعت — یا گاهی روزها — در تمرکز فکری عمیق دوست داشتم. بعدها، وقتی در کارخانه سیر در هوکایدو کار میکردم، کارم فقط صیقل دادن هزاران سیر سفید بود تا روی نوار نقاله روشنتر به نظر برسند. هشت ساعت در روز — تمرکز کامل، ریتم پایدار. به طرز عجیبی رضایتبخش بود. حالا، از آن خاطرات بازگشتم، در حال حاضر کار فکری انجام میدهم — نوشتن نرمافزار، طراحی سیستمها، نوشتن این مقالات. ولی تعادل تغییر نکرده است. اگر از من بپرسید چگونه بهتنهایی یک مقاله وبلاگ را به ۴۲ زبان منتشر میکنم، پاسخ صادقانه این است: با ظرف شستن.