قبل از شخصیت مدل، برای هر فیچر AI یک شیء بودجه بگذار
قبل از اینکه پرامپت سیستم دیگری بنویسم که به مدل بگوید «مهندس ارشد دقیق» است، یک شیء بودجه میخواهم. شخصیت اختیاری است. حد نه.
بیشتر فیچرهای AI که بازبینی میکنم از لحن، ابزار، و بلوک دستور بلند شروع میشوند. بودجه بعداً به شکل یک عدد جادویی در متغیر محیط میآید، یا اصلاً نمیآید. بعد کسی مسیر خوشحال را دمو میکند، فیچر منتشر میشود، و یک حلقه گیرکرده خرج ماه را میسوزاند در حالی که کاربر به نشانگر تایپ نگاه میکند که تمام نمیشود.
با پرامپت خوب مخالف نیستم. با منتشر کردن فیچری مخالفم که تنها شرط توقفش امید است.
منظور از شیء بودجه چیست
بودجه پاکت صریحی است که یک اجرا اجازه دارد خرج کند قبل از اینکه محصول باید بسته شکست بخورد یا از انسان بپرسد. حالوهوا نیست. فیلد است.
نوع را عمداً کوچک نگه دار. مثلاً حداکثر گام، حداکثر صدای ابزار، سقف هزینه تقریبی، و حداکثر زمان دیوار. بعداً میتوانی سقف بهازای ابزار اضافه کنی. میتوانی بودجه پیشنمایش را از پروداکشن جدا کنی. نکته این است که پاکت داده باشد و زمان اجرا اعمالش کند، نه جملهای که مدل شاید نادیده بگیرد.
این را کنار پیکربندی فیچر بگذار، پهلوی شناسه مدل و allowlist ابزار. اگر PR مسیر AI بیاورد و بودجه نداشته باشد، بازبینی باید همانطور برگرداندش که مصرفکننده صف بدون مهلت را برمیگرداند.
وقتی بودجه نیست چه میشکند
حلقه فراری. مدل ابزار را صدا میزند، شکست نرم میبیند، با آرگومان کمی متفاوت دوباره تلاش میکند، دوباره میشکند، و ادامه میدهد. بدون سقف گام و سقف صدای ابزار یک `while(true)` ساختهای که صورتحساب میدهد. ایجنتهایی دیدهام که همان اعتبار schema شکستخورده را بارها دوباره میخوانند چون کسی گام را محدود نکرده و خط «مصر باش» در پرامپت برنده شده.
صورتحساب غافلگیر. سقف توکن سمت ارائهدهنده کمک میکند، ولی بودجه محصول نیست. فیچری که به embedding، یک مدل داور، و چند دور ابزار شاخه میزند میتواند زیر حد یک completion بماند و همچنان سقف هزینه را بترکاند. سقف هزینه تو را وادار میکند قبل از انتشار اقتصاد واحد را حدس بزنی: یک اجرای موفق اجازه دارد چقدر تمام شود، و اجرای بیمارگونه چه میشود. عدد را از قیمت واقعی همان ارائهدهنده بگیر، نه از خاطرهای از یک پست وبلاگ.
تجربه گیرکرده. زمان دیوار حدی است که کاربر حس میکند. اگر Route منتظر ایجنتی بدون سقف زمان باشد، مرورگر اول مهلت میخورد. بعد کاربر دوباره میزند. حالا دو اجرا داری، پیشرفت قابلدیدن نداری، و تیکتی که میگوید «تا ابد چرخید». شکست بسته با خطای روشن بهتر از اسپینری است که از اتصال HTTP بیشتر عمر میکند.
تنزل بیصدا. گاهی تیم هزینه فراری را با پایین آوردن بیخبر کیفیت مدل وسط اجرا «درست» میکند. این هم سیاست بودجه است، فقط تصادفی. در خود شیء بنویس وقتی پاکت تمام شد چه شود: شکست سخت، پرسیدن از کاربر برای ادامه با بودجه تازه، یا تنزل به مسیر ارزانتر با بنر صریح.
بودجه قبل از شخصیت
پرامپت شخصیت ارزان نوشته میشود و گران اعتماد میشود. «مختصر باش» زنجیره چهلگامی ابزار را متوقف نمیکند. «بیش از لازم خرج نکن» سقف هزینه نیست. مدل سیستم مالی تو نیست.
ترتیبی که برای من کار کرده: اول کار قابلدیدن کاربر را تعریف کن. خلاصه PR، دستهبندی webhook، جواب از سند. بعد بودجه اجرای عادی و اجرای بدترین حالت را بنویس. بعد مدل و ابزاری را انتخاب کن که در آن پاکت جا شوند. بعد پرامپت و لحن را بنویس.
اگر کار در بودجه جا نمیشود، یا کار غلط است یا بودجه. با پرامپت بلندتر رویش کاغذ نکش.
در رانر اعمال کن، نه در نثر
بودجه را همان جاهایی چک کن که مجوز را چک میکنی: قبل از شروع گام، قبل از هر صدای ابزار، بعد از هر پاسخ مدل برای حساب توکن و هزینه، و روی تایمر ساعت دیواری مستقل از استریم مدل.
وقتی حد میترکد، دلیل را ماندگار کن. `exhausted: maxToolCalls` در رکورد اجرا مفید است. چتی که وسط کار قطع میشود و ساکت میماند نیست. عملیات باید ببیند کاربر به دیوار میخورد چون فیچر کمبودجه است یا چون ایجنت روی نتیجه بد ابزار حلقه میزند.
retry دارای idempotency اینجا هم مهم است. اگر درخواست روی ثانیه آخر بودجه دیوار بمیرد و کلاینت دوباره بزند، اجرای جدید بودجه خودش را میخواهد. نیمه خرجشده یک worker مرده را بیخبر به ارث نبر.
سطحهای مختلف، پاکتهای مختلف
چت سند روی سایت بازاریابی باید زمان دیوار تنگ و تقریباً بدون ابزار داشته باشد. ایجنت کدنویسی داخلی در sandbox میتواند گام بیشتر داشته باشد، ولی همچنان سقف هزینه و سقف صدای ابزار میخواهد تا یک مورد eval بد چهل پوسته باز نکند. cron شبانه دستهبندی تیکت میتواند زمان دیوار بیشتر داشته باشد و باز هم سقف هزینه بخواهد تا یک استقرار بد صورتحساب آخر هفته نشود.
همان نوع. عددهای مختلف. کل الگو همین است.
در PR دنبال چه میگردم
وقتی کسی فیچر AI به ریپو اضافه میکند، قبل از پرامپت شیء بودجه را نگاه میکنم. پیشفرضها را نشان بده. نشان بده در اتمام چه میشود. نشان بده هزینه و گام چطور روی اجرا ثبت میشوند.
اگر اینها نباشند، سر متن بحث نمیکنیم. بحث این است که آیا این فیچر اجازه دارد job بیسقف با UI دوستانه شود.
اول بودجه را بده. شخصیت میتواند صبر کند تا کنتور توقف سخت داشته باشد.
پرسشهای کوتاه
**سقف توکن ارائهدهنده کافی نیست؟** برای یک completion شاید. برای فیچری که چند مدل و چند ابزار دارد نه. بودجه محصول جمع مسیر است.
**بودجه را در پرامپت بنویسم؟** میتوانی زمینه بدهی، ولی اعمال باید در کد باشد. مدل مسئول مالی نیست.
**اگر کاربر وسط کار بودجه را تمام کرد؟** شکست راستگو، یا پیشنهاد ادامه با پاکت تازه. اسپینر بیپایان هیچکدام از این دو نیست.