افشای تدریجی؛ نذار ایجنت زیر بار کانتکست له بشه
خلاصهٔ کاملتر
ذهن مقاله اینه: یه ایجنت خوب وقتی ازش میخوای جلسه تنظیم کنه باید از API تقویم و منطقهٔ زمانی سر دربیاره، ولی وقتی میخواد یه فاکتور پردازش کنه به دانش کاملاً متفاوتی نیاز داره. مشکل اینه که بیشتر ایجنتها همهٔ اینها رو هر بار با هم بار میکنن؛ نتیجهش یه پرامپت سیستمی بادکرده، استدلال گیج و افت کارایی با زیادشدن قابلیتهاست.
افشای تدریجی (progressive disclosure) یعنی فقط دستورها، ابزارها و کانتکستی رو بار کن که برای همون درخواست خاص لازمه. دستورها بهجای اینکه همگانی باشن شرطی میشن، بهجای ۵۰ تا ابزار همون ۳ تا ۵ تای مرتبط در دسترس قرار میگیره، و دانش پسزمینه فقط وقتی لازمه بازیابی میشه. نویسنده تأکید میکنه این کار قابلیت ایجنت رو محدود نمیکنه، بلکه فقط چیزی که هر لحظه باید بهش فکر کنه رو کم میکنه.
چرا مهمه؟ اگه یه پرامپت سیستمی ۵۰هزار توکنی بدی که همهٔ سناریوها رو پوشش بده، قبل از اینکه کاربر یه کلمه تایپ کنه نصف پنجرهٔ ۱۲۸هزارتوکنی رو مصرف کردی. مهمتر اینکه طبق پژوهشها، مدلها وقتی مجبورن اطلاعات مرتبط رو لای انبوهی از محتوای بیربط پیدا کنن بدتر عمل میکنن؛ مدل فنی همهچیزو «میبینه» ولی توجه مؤثرش افت میکنه.
به گفتهٔ نویسنده، شلوغی کانتکست سه جور خرابی میسازه: تداخل دستورها (دستورهای بیست ورکفلو مختلف با هم قاطی و متناقض میشن)، خطای انتخاب ابزار (با ۴۰ ابزار انتخاب سخته، با ۵ ابزار تقریباً بدیهیه)، و استنتاج کندتر و گرونتر. یه معماری خوبِ افشای تدریجی میتونه مصرف توکن ورودی رو ۶۰ تا ۸۰ درصد کم کنه.
مقاله نمونهٔ Pydantic AI 2.0 رو مثال میزنه: بهجای یه رشتهٔ ثابت برای پرامپت سیستمی، پرامپت رو بهشکل یه تابع تعریف میکنی که موقع اجرا کانتکست فعلی رو میگیره و فقط دستورهای مناسب رو برمیگردونه. اینجوری منطق پرامپت میشه کدی که میشه تستش کرد و توسعهش داد:
@agent.system_prompt
async def build_prompt(ctx: RunContext[UserDeps]) -> str:
base = "You are a support assistant."
if ctx.deps.user_tier == "enterprise":
base += "\n" + load_enterprise_instructions()
if ctx.deps.query_category == "billing":
base += "\n" + load_billing_context()
return baseایجنت فقط همون چیزی رو میبینه که تابع برمیگردونه؛ برای اضافهکردن یه ورکفلو جدید کافیه تابع رو گسترش بدی و بقیهٔ پرامپت سبک میمونه.
پیادهسازی طیف داره: از مسیریابی دستهای ساده تا معماری چندعاملی با زیرعاملهای تخصصی که هرکدوم پرامپت و ابزار مخصوص خودشون رو دارن. نویسنده چند اشتباه رو هم هشدار میده: ریزریزکردن بیشازحد دستهها (که خود مسیریاب رو گلوگاه میکنه)، بیتوجهی به درخواستهای بیندستهای، کندبودن لایهٔ مسیریابی، و نداشتن یه مسیر پیشفرض برای درخواستهایی که تو هیچ دستهای جا نمیگیرن.
نکات کلیدی:
- افشای تدریجی فقط دستورها، ابزارها و کانتکست لازمِ همون درخواست رو بار میکنه و کانتکست رو سبک نگه میداره.
- شلوغی کانتکست باعث تداخل دستورها، انتخاب اشتباه ابزار و افت کارایی میشه.
- تابع پرامپت سیستمی در Pydantic AI 2.0 یه راه ساختیافته و تستپذیر برای بارگذاری پویای دستورهاست.
- پیادهسازی میتونه از مسیریابی سادهٔ دستهای تا معماری چندعاملی با زیرعاملهای تخصصی باشه.




