Codemode چیه و چرا Pi 1.0 سراغش رفته
خلاصهٔ کاملتر
نویسنده (Armin Ronacher) بیشتر از یه سال پیش توصیه میکرد به جای بار کردن ابزارهای سفارشی یا سرورهای MCP توی کانتکست مدل، اسکریپت بنویسید. حالا با Pi 1.0 پشتیبانی MCP از طریق Codemode اضافه شده و نویسنده تو این مقاله توضیح میده این تغییر چه معنایی داره. Codemode یعنی مدل به جای صدا زدن مستقیم ابزارها، یه تیکه کد (اینجا جاوااسکریپت) مینویسه که خودش ابزارها رو صدا میزنه. اسمش رو هم Cloudflare گذاشته.
به گفتهی نویسنده، bash عالیه چون صدا زدنها رو راحت به هم وصل میکنه و مدل موقع آموزش یاد گرفته فایلسیستم چطور کار میکنه. ولی bash فقط برنامههایی رو ترکیب میکنه که اجرا میشن. بعضی کارها ابزار بومی خود LLM هستن؛ مثلاً view_image که برنامهی ایجنت (harness) باید خود تصویر رو توی پروتکل مدل تزریق کنه و با cat نمیشه. ساختن و مدیریت sub agentها هم همینطوره.
نویسنده بین دو بخش فرق میذاره: «مغز» یعنی harness که روی یه ماشین مورد اعتماد اجرا میشه، و «دستها» یعنی محیط اجرا (execution environment) که bash و ابزارها اونجا اجرا میشن. این دو تا ممکنه فایلسیستم و سطح اعتماد متفاوتی داشته باشن. Codemode دقیقاً سمت مغز اجرا میشه: توی Pi داخل QuickJS روی یه runtime از نوع WASM، بدون شبکه، بدون فایلسیستم، بدون تایمر و با RAM محدود. تنها کاری که ازش برمیاد صدا زدن ابزارهای دیگهست.
مزیتش اینه که ترکیب صدا زدنها دیگه لازم نیست از کانتکست مدل رد بشه. مثلاً خروجی bash توی حالت عادی فقط 2000 خط آخرش وارد کانتکست میشه، ولی از طریق Codemode کل خروجی بهصورت ساختاریافته به کد میرسه. ایجنت میتونه کار موازی بنویسه، اول 5 تا 10 مورد رو بررسی کنه و بعد یه اسکریپت برای بقیه بنویسه، و با store() داده رو توی transcript نگه داره تا صدا زدن بعدی دوباره بخونهش.
Codemode به APIهایی هم دسترسی میده که بهعنوان ابزار معمولی فقط کانتکست رو هدر میدادن، مثل مدلهای تولید تصویر یا مدلهای طبقهبندی مثل Jev. نمونهی زیر کدیه که خود ایجنت توی یه جلسهی واقعی Pi نوشته تا یه عکس تولید کنه:
const [painter] = await models.getAvailableOfType("image");
const result = await models.generateImages(painter, {
input: [{ type: "text", text: "A cute little puppy sitting on a grassy " +
"lawn, soft natural light, photorealistic" }],
});
for (const block of result.output) {
if (block.type === "image") image(block);
else text(block.text);
}تابع image() تصویر رو برمیگردونه به مدل و یه نسخه هم روی دیسک میذاره که اگه ایجنت خواست بتونه به bash بده. توی یه مثال دیگه، ایجنت با Jev صد تا issue گیتهاب رو از نظر احساس و میزان عصبانیت دستهبندی کرده. Pi هم تعداد اجرای همزمان ابزارها رو به چهار تا محدود میکنه و بقیه رو توی صف میذاره، برای همین Promise.all مشکلی درست نمیکنه.
نکات کلیدی:
- Pi 1.0 پشتیبانی MCP رو از طریق Codemode اضافه کرده
- Codemode توی Pi داخل QuickJS روی WASM اجرا میشه: بدون شبکه، فایلسیستم و تایمر
- کد Codemode سمت harness اجرا میشه، نه توی محیطی که bash اجرا میکنه
- خروجی bash توی حالت عادی فقط 2000 خط آخرش وارد کانتکست میشه
- Pi حداکثر چهار اجرای همزمان ابزار رو اجازه میده و بقیه میرن توی صف
- Codemode بهطور پیشفرض فقط با فعال بودن MCP روشنه و با "defaultTools": ["+codemode"] توی تنظیمات فعال میشه




