در ماه نوامبر، من هفت ویژگی که BAML را برای توسعهدهندگان هوش مصنوعی ایدهآل میسازد را تشریح کردم و از آن زمان به بعد، از دیدن موجی از توسعهدهندگان که BAML را برای پروژههای هوش مصنوعی خود پذیرفتهاند، هیجانزده شدهام. برای تیمهای هوش مصنوعی که به دنبال یک رویکرد قویتر و قطعیتر برای مدلهای پایه هستند، BAML با در نظر گرفتن اعلانها (prompts) به عنوان توابع ساختاریافته، یک راه حل قدرتمند ارائه میدهد. برای بررسی این اشتیاق رو به رشد از نزدیک، اخیراً با دیوید هیوز، معمار اصلی راهکارهای داده و هوش مصنوعی در 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 برای محیطهای تولید مهارت دارند، اما توسعه هوش مصنوعی اغلب به طور پیشفرض از Python استفاده میکند. BAML، با چندزبانه بودن، این شکاف را پر میکند. در کمتر از یک ساعت، توسعهدهندگان میتوانند صرف نظر از زبان اصلی خود، به یک سیستم قطعی برای مدلهای زبانی دسترسی پیدا کنند. سرمایهگذاری اولیه، سودهای بهرهوری قابل توجهی را به همراه دارد.
س: BAML چگونه با چارچوبهایی مانند لنگچین (LangChain)، لاماایندکس (LlamaIndex) یا چارچوبهای عاملمحور مانند Crew یا LangGraph مقایسه میشود؟
پ: برای من، BAML یک جایگزین است، نه یک مکمل. چارچوبهایی مانند لنگچین به شدت اعلانمحور هستند. BAML با تمرکز بر خروجیهای قطعی، خود را متمایز میکند. این تفاوت اساسی بسیار مهم است. [به طور تصادفی، یک مقاله اخیر عملاً قدرت BAML را در گردشهای کاری دادههای دنیای واقعی، به ویژه در استخراج اطلاعات و ادغام با پایگاههای داده گراف مانند Kuzu، نشان میدهد، که با چارچوبهای اعلانمحورتر در تضاد است.]
سایر چارچوبها شکننده میشوند زیرا حول محور ساخت اعلانها برای مدلهای زبانی خاص متمرکز شدهاند. با سرعت بالای انتشار مدلها، این امر مستلزم بازسازی مداوم است. قابلیتهای بازسازی زمان اجرای BAML - که امکان تنظیمات پویا در اعلانها، مدلها و حتی طرحوارههای خروجی را فراهم میکند - این شکنندگی را برطرف میکند، به ویژه با تکامل سریع مدلهای زبانی جدید. این امر به ویژه از آن جهت ارزشمند است که مدلهای مختلف، وابستگیهای وظیفهای متفاوتی دارند - با BAML، میتوانید به راحتی مدل مناسب را با وظیفه مناسب مطابقت دهید.
س: نقش «مهندس اعلان» با ظهور LLMها (مدلهای زبانی بزرگ) پدیدار شد. آیا BAML نیاز به مهندسان متخصص اعلان را کاهش میدهد؟
پ: تا حد زیادی، بله. شما همچنان در BAML اعلان مینویسید، اما نیاز به «نجواگران اعلان» که در ظرافتهای اعلان خاص مدل تخصص دارند را از بین میبرد. همگام شدن با وابستگیهای وظیفهای مدلهای در حال تحول سریع، برای مهندسان اعلان غیرقابل تحمل شده بود.
فلسفه BAML تشویق میکند که وظایف پیچیده را به واحدهای کوچکتر، ایمن از نظر نوع (type-safe)، اتمی (atomic) عملیات و استدلال تقسیم کنید. BAML با تأکید بر قابلیت ترکیبپذیری (composability) و استفاده از مدلهای زبانی کوچکتر و همسو با وظیفه (که من حدود 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 از "توابع اعلان" کوچک و قابل ترکیب را شهودیتر بیابید. بر اساس تجربه من، این امر همچنین باعث کاهش هزینه و زمان تکرار میشود.