تکرار سریعتر، هزینههای کمتر: تأثیر BAML بر پروژههای هوش مصنوعی
در ماه نوامبر، من «هفت ویژگی که BAML را برای توسعهدهندگان هوش مصنوعی ایدهآل میکند» را شرح دادم و از آن زمان، از دیدن موجی از توسعهدهندگان که BAML را برای پروژههای هوش مصنوعی خود پذیرفتهاند، هیجانزده شدهام. برای تیمهای هوش مصنوعی که به دنبال رویکردی قویتر و قطعیتر به مدلهای پایه هستند، BAML با برخورد با اعلانها به عنوان توابع ساختاریافته، یک راه حل قدرتمند ارائه میدهد. برای بررسی این اشتیاق رو به رشد از نزدیک، اخیراً با دیوید هیوز، معمار ارشد راه حلهای داده و هوش مصنوعی در Enterprise Knowledge، یک کاربر اختصاصی BAML، صحبت کردم. در زیر گزیدهای بسیار ویرایش شده از گفتگوی روشنگرانه ما در مورد تجربیات او با BAML آمده است.
س: BAML چیست و چه چیزی در ابتدا شما را به آن جذب کرد؟
پاسخ: BAML یک زبان خاص دامنه (domain-specific language) است که با اعلانها به عنوان توابع ساختاریافته با ورودیها و خروجیهای تعریف شده برخورد میکند. مانند بسیاری از متخصصان، من به طور گسترده از چارچوبهای محبوبی مانند LangChain، LlamaIndex و Haystack استفاده کردهام. در حالی که میتوانستم با آنها راه حلهای نوآورانه بسازم، اما اغلب شکننده بودند. هرگونه تغییر در دادههای ورودی یا ادغام مدلهای جدید نیاز به مهندسی مجدد و تنظیمات اعلان قابل توجهی داشت.
«لحظه آها» من از یک قسمت پادکست آمد که در آن اعلانها به عنوان توابع در BAML توصیف شدند. این مفهوم مدیریت دقیق تعاملات مدل زبانی عمیقاً طنینانداز شد. پس از امتحان BAML فقط برای یک بعد از ظهر، متوجه شدم که یک رویکرد اساساً بهتر ارائه میدهد و دیگر نیازی به لمس چارچوب دیگری نخواهم داشت.
س: رویکرد BAML در برخورد با اعلانها به عنوان توابع، چه تفاوتی با مهندسی اعلان سنتی دارد؟
پاسخ: این تغییر عمیق است. با BAML، دیگر روی ساخت متن اعلان عالی تمرکز نمیکنم. در عوض، من روی تعریف طرحهای واضح با استفاده از کلاسها در BAML، مشابه Pydantic، تمرکز میکنم. من تعریف ساختار خروجی مورد نظر و اطمینان از نتایج قطعی برای ادغام قابل اعتماد سیستم پاییندستی را در اولویت قرار میدهم.
به جای «التماس و خواهش» از یک مدل زبانی، زمان بیشتری را صرف فکر کردن دقیق در مورد هدفم میکنم. Playground BAML، یک افزونه IDE، نیز متحول کننده است. من میتوانم اعلانها و طرحها را مستقیماً در محیط توسعه خود آزمایش کنم، که در مقایسه با رویکردهای سنتی که ممکن است برای آزمایش نیاز به استقرار در کانتینرها داشته باشید، چرخه تکرار را به شدت کوتاه میکند.
س: آیا با توجه به اینکه BAML یک زبان برنامه نویسی است، منحنی یادگیری تندی وجود دارد؟
پاسخ: شگفت آور، نه. منحنی یادگیری اولیه من فوق العاده کوتاه بود - حدود دو ساعت مستندات و کاوش در Playground. در آن زمان، من در حال بازسازی پایگاههای کد پیچیده بودم.
در حالی که BAML یک DSL است، این در واقع یک نقطه قوت است. بسیاری از توسعه دهندگان در زبانهایی مانند Rust برای محیطهای تولید مهارت دارند، اما توسعه هوش مصنوعی اغلب به طور پیش فرض به پایتون باز میگردد. BAML، چند زبانه (polyglot) بودن، این شکاف را پر میکند. در کمتر از یک ساعت، توسعه دهندگان میتوانند بدون در نظر گرفتن زبان اصلی خود، به یک سیستم قطعی برای مدلهای زبانی دسترسی پیدا کنند. سرمایه گذاری اولیه سود قابل توجهی را به همراه دارد.
BAML چگونه با چارچوبهایی مانند LangChain، LlamaIndex یا چارچوبهای عاملمحور مانند Crew یا LangGraph مقایسه میشود؟
پاسخ: برای من، BAML یک جایگزین است، نه یک مکمل. چارچوبهایی مانند LangChain به شدت اعلانمحور هستند. BAML با تمرکز بر خروجیهای قطعی، خود را متمایز میکند. این تفاوت اساسی بسیار مهم است. [به طور تصادفی، یک مقاله اخیر عملاً قدرت BAML را در گردشهای کاری داده دنیای واقعی، به ویژه در استخراج اطلاعات و ادغام با پایگاههای داده گرافی مانند Kuzu، نشان میدهد، که با چارچوبهای بیشتر اعلانمحور در تضاد است.]
چارچوبهای دیگر شکننده میشوند زیرا حول ساخت اعلانها برای مدلهای زبانی خاص متمرکز شدهاند. با سرعت سریع انتشار مدلها، این امر نیاز به بازسازی مداوم دارد. قابلیتهای بازسازی زمان اجرای BAML - اجازه تنظیمات پویا در اعلانها، مدلها و حتی طرحهای خروجی - این شکنندگی را برطرف میکند، به ویژه با تکامل سریع مدلهای زبانی جدید. این امر به ویژه ارزشمند است زیرا مدلهای مختلف دارای وابستگیهای وظیفهای متفاوتی هستند - با BAML، میتوانید به راحتی مدل مناسب را با وظیفه مناسب مطابقت دهید.
نقش «مهندس اعلان» با ظهور LLMها پدیدار شد. آیا BAML نیاز به مهندسان اعلان متخصص را کاهش میدهد؟
پاسخ: تا حد زیادی، بله. شما همچنان اعلانها را در BAML مینویسید، اما نیاز به «نجواگران اعلان» که در ظرافتهای اعلان خاص مدل تخصص دارند را از بین میبرد. همگام شدن با وابستگیهای وظیفهای مدلهای به سرعت در حال تحول برای مهندسان اعلان ناپایدار شده بود.
فلسفه BAML تشویق میکند که وظایف پیچیده را به واحدهای عملیاتی و استدلالی کوچکتر، ایمن از نظر نوع، تقسیم کنید. BAML با تأکید بر قابلیت ترکیب و استفاده از مدلهای زبانی کوچکتر و همسو با وظیفه (که من حدود 95٪ از اوقات استفاده میکنم)، خروجیهای انعطافپذیرتر و با کیفیت بالاتری را ترویج میکند و وابستگی به مهندسی اعلان پیچیده و خاص مدل را کاهش میدهد.
BAML چگونه به تیمها کمک میکند تا هزینههای مربوط به استفاده از API LLM را مدیریت کنند؟
پاسخ: BAML چندین مکانیسم صرفه جویی در هزینه را ارائه میدهد. در Playground، میتوانید مستقیماً تعداد توکنها را برای اعلانهای خود مشاهده کنید، که امکان بهینهسازی تکراری برای اختصار را در عین حفظ کیفیت خروجی فراهم میکند. تزریق متن BAML نیز بسیار کارآمد است و استفاده از توکن را به حداقل میرساند.
به طور حیاتی، تجزیهکننده همتراز با طرح BAML با حذف اعلاندهی مجدد، هزینهها را به طور قابل توجهی کاهش میدهد. برخلاف رویکردهایی که برای تصحیح قالبهای خروجی به اعلاندهی مجدد متکی هستند، BAML تضمین میکند که خروجی بدون توجه به پاسخ خام LLM، مطابق با طرح تعریفشده است و از تماسهای غیرضروری API و هزینههای مرتبط با آنها جلوگیری میکند.
LLMها به دلیل تولید قالبهای «تقریباً صحیح» شناخته میشوند. BAML چگونه تجزیه خروجی و رسیدگی به خطا را انجام میدهد؟
پاسخ: حتی با BAML، بازرسی خروجی خام LLM در Playground نشان میدهد که مدلها اغلب JSON کاملاً شکلگرفته تولید نمیکنند. با این حال، تجزیهکننده BAML به طور مداوم JSON ساختاریافته بر اساس طرح ارائه میدهد.
در حالی که برخی از سیستمها خروجیهای LLM را محدود میکنند، ممکن است JSON از نظر فنی معتبر با محتوای نادرست را برگردانند. BAML دید شفافی از آنچه مدل زبانی برمیگرداند ارائه میدهد و اگر محتوا به درستی تجزیه نشود تا با طرح شما مطابقت داشته باشد، خطا ایجاد میکند. این به شما خطاهای تعریف شده برای بررسی میدهد و به شما امکان میدهد ادعاهایی ایجاد کنید که خروجی شما را تأیید میکنند. این دقت به طور قابل توجهی چرخههای تکرار را کاهش میدهد و رسیدگی به خطا را در مقایسه با برخورد مستقیم با خروجیهای LLM بدون ساختار یا قالببندی ناسازگار ساده میکند.
BAML چگونه به آزمایش و اشکالزدایی برنامههای هوش مصنوعی کمک میکند؟
پاسخ: مدلهای زبانی اساساً تولیدکنندههای توکنهای بعدی احتمالی هستند - آنها برای ارائه خروجی ساختاریافته طراحی نشدهاند. BAML این شکاف را با تجزیه خروجیها به ساختارهایی که در طرحهای خود تعریف کردهاید، پر میکند.
از آنجایی که BAML به شما اشیاء برنامهنویسی میدهد، میتوانید ادعاها و بررسیهای زمان اجرا را انجام دهید. به عنوان مثال، اگر من در حال استخراج رنگها از یک تصویر هستم، میتوانم ادعا کنم که لیست برگشتی حداقل شامل یک رنگ است. من میتوانم از ادعاها برای تأیید اینکه آیا خروجی نمونهای از نوع مورد انتظار است و اعمال محدودیتهای یکپارچگی داده است، استفاده کنم. این سطح از کنترل برنامهنویسی و قابلیت آزمایش، اشکالزدایی را در مقایسه با برخورد مستقیم با خروجیهای LLM بدون ساختار یا قالببندی ناسازگار به طور قابل توجهی ساده میکند.
سازگاری متقابل زبانی BAML چه مزایایی را در محیطهای سازمانی ارائه میدهد؟
پاسخ: ماهیت چند زبانه BAML یک مزیت بزرگ برای شرکتها است. این طراحی شده است که یک DSL باشد که از هر زبانی قابل دسترسی باشد. حتی اگر پشتیبانی بومی برای یک زبان خاص بلافاصله در دسترس نباشد، BAML یک API ارائه میدهد که میتواند به طور جهانی استفاده شود.
پشتیبانی بومی Rust در حال انجام است و معماری برای توسعه طراحی شده است. این زبانناشناسی BAML را به راحتی با سیستمهای قدیمی و پشتههای فناوری متنوع رایج در سازمانهای بزرگ سازگار میکند. به عنوان مثال، من اخیراً روی پروژههایی کار کردهام که به Rust نیاز دارند و در حالی که BAML هنوز خروجی بومی Rust ندارد، میتوانستم از API استفاده کنم و استابهایی ایجاد کنم که در هنگام ورود پشتیبانی بومی به راحتی قابل انتقال خواهند بود.
BAML چگونه از توسعه برنامههای هوش مصنوعی عاملمحور پشتیبانی میکند؟
پاسخ: BAML برای ساخت سیستمهای عامل پیچیده بسیار مهم است. من با موفقیت سیستمهای عاملی را که قبلاً با LangGraph ساخته شده بودند، به BAML منتقل کردهام. این به شما امکان میدهد رجیستریهای عامل را با موتورهای استدلال تعریف شده ایجاد کنید.
ویژگیهای کلیدی شامل تغییر پویا موتورهای استدلال، مدلهای زبانی و اعلانها برای عوامل است. علاوه بر این، توانایی BAML برای به روز رسانی طرحهای خروجی در زمان اجرا برای عوامل خود بهینه و خودمختار بسیار ارزشمند است. به عنوان مثال، اگر در حین اجرا متوجه شوم که باید یک فیلد به یک شی «شخص» اضافه کنم، میتوانم این کار را به صورت پویا انجام دهم و همچنان آن خروجی به روز شده را دریافت کنم.
این ویژگیها برای عواملی که میتوانند با تغییر محیطها و دادهها با تغییر پویا ساختارهای خروجی، فرآیندهای استدلال و حتی مدلهای زیربنایی خود بر اساس مشاهدات زمان اجرا و معیارهای عملکرد، سازگار شوند، کلیدی هستند.
چه ویژگیهای هیجانانگیزی در آینده نزدیک به BAML خواهند آمد؟
پاسخ: ارتقای «اعلانها به عنوان توابع» بسیار هیجانانگیز است. BAML در حال گسترش توانایی تعبیه منطق کد بیشتر به طور مستقیم در اعلانها، از جمله تکرارها و عبارات شرطی است. این مفهوم اعلانها را به عنوان توابع قدرتمند و قابل برنامهریزی بیشتر تثبیت میکند و قابلیتها و بیان جدید قابل توجهی را باز میکند.
جامعه گستردهتر پیرامون BAML نیز در حال رشد است، با ادغام Donew (برنامههای عامل) و Kùzu (برای GraphRAG) با BAML. این رشد اکوسیستم بیشتر ارزش پیشنهادی BAML را به عنوان یک ابزار توسعه هوش مصنوعی بنیادی افزایش میدهد.
تیمهای فنی که در مورد BAML کنجکاو هستند، چگونه باید شروع کنند؟
پاسخ: من اکیداً توصیه میکنم یک ساعت برای کاوش در BAML سرمایه گذاری کنید. افزونه را برای IDE خود (VS Code، Cursor و غیره) نصب کنید، راه اندازی سریع را در اسناد BAML دنبال کنید و به Playground بروید. روی تعریف ساختار خروجی (طرح) که میخواهید تمرکز کنید.
اگر گیر کردید، BAML Discord رسمی پاسخگو است و جامعه به سرعت در حال رشد است. ممکن است به نظر برسد ابزار دیگری برای یادگیری است، اما تغییر پارادایمی که در کار با مدلهای زبانی ارائه میدهد متحول کننده است. اگر با اعلانهای شکننده یا چارچوبهای بزرگ و یکپارچه دست و پنجه نرم کردهاید، ممکن است رویکرد BAML از «توابع اعلان» کوچک و قابل ترکیب، شهودیتر باشد. به تجربه من، این همچنین هزینهها و زمان تکرار را کاهش میدهد.