با گذر سازمانها از پایلوتهای آزمایشی هوش مصنوعی به سیستمهای عملیاتی، محدودیتهای پنجرههای زمینه ثابت به یک گلوگاه حیاتی تبدیل میشوند. در پروتکل زمینه مدل (MCP)، جایی که عاملها با ابزارها و منابع داده متعددی تعامل دارند، انباشت غیرمدیریتشده زمینه منجر به تورم سریع توکن، افزایش تأخیر و کاهش عملکرد مدل میشود. این مقاله راهکاری مستحکم برای پیادهسازی هرس پویای زمینه را بررسی میکند تا اطمینان حاصل شود که سرورهای MCP شما مقیاسپذیر و مقرونبهصرفه باقی میمانند.
مشکل زمینه ایستا در MCP
MCP به کلاینتها اجازه میدهد منابع را درخواست کنند، ابزارها را فراخوانی کنند و پرامپتها را بازیابی کنند. با این حال، اگر یک برنامه هر تعامل را صرفاً به تاریخچه گفتگوی مدل اضافه کند، پنجره زمینه به سرعت پر میشود. این موضوع بهویژه در سناریوهای با حجم بالا که هزاران نشست همزمان فعال هستند، مشکلساز است. یک رویکرد سادهانگارانه منجر به موارد زیر میشود:
- هزینههای نمایی: پرداخت هزینه برای هزاران توکن استفادهنشده از ابتدای گفتگو.
- تخریب زمینه: دستورالعملهای مهم و اخیر از محدوده «توجه» مدل خارج میشوند.
- ناپایداری سیستم: رسیدن به محدودیتهای حداکثری توکن باعث خطاهای سخت شده و تجربه کاربری را مختل میکند.
برای حل این مشکل، باید زمینه را نه به عنوان یک گزارش ایستا، بلکه به عنوان یک بافر پویا و اولویتبندیشده در نظر بگیریم.
استراتژی: وزندهی به تازگی و مرتبط بودن
اصل اساسی هرس پویا این است که همه زمینهها برابر نیستند. تعاملات اخیر برای انسجام گفتگو حیاتی هستند، در حالی که خروجیهای خاص ابزار ممکن است نیاز به حفظ شدن برای مدت طولانیتری نسبت به مکالمات غیرضروری داشته باشند. میتوانیم یک سرویس هرس پیادهسازی کنیم که هر پیام را قبل از اضافه شدن به پیکان نهایی ارسالی به LLM ارزیابی کند.
در زیر پیادهسازی عملی یک ContextManager در TypeScript آورده شده است که نشان میدهد چگونه میتوان تاریخچه را بر اساس محدودیت توکن کوتاه کرد، در حالی که پرامپت سیستم و آخرین تبادلها حفظ میشوند.
class ContextPruner {
private maxTokens: number;
private tokenCounter: any; // جایگزین برای توکنشمار واقعی
constructor(maxTokens: number, tokenizer: any) {
this.maxTokens = maxTokens;
this.tokenCounter = tokenizer;
}
/**
* تاریخچه زمینه را برای جا شدن در محدودیتهای توکن هرس میکند.
* حفظ میشود: پرامپت سیستم، تعاریف ابزار و N نوبت اخیر.
*/
pruneContext(systemPrompt: string, history: Message[]): Message[] {
const buffer: Message[] = [
{ role: 'system', content: systemPrompt }
];
let currentTokenCount = this.tokenCounter.count(systemPrompt);
// برای حفظ پیامهای اخیر، به عقب پیمایش میکنیم
for (let i = history.length - 1; i >= 0; i--) {
const msg = history[i];
const msgTokens = this.tokenCounter.count(msg.content || '');
if (currentTokenCount + msgTokens > this.maxTokens) {
// اگر افزودن این پیام از حد مجاز فراتر رود، متوقف میشویم
break;
}
// برای حفظ ترتیب زمانی پس از معکوسسازی، به ابتدای بافر اضافه میکنیم
buffer.unshift(msg);
currentTokenCount += msgTokens;
}
return buffer;
}
}
پیادهسازی در سرور MCP
در محیط سرور MCP، این منطق هرس باید از مدیریت پروتکل جدا باشد. میتوانید یک لایه میانی ایجاد کنید که پیامها را قبل از پردازش توسط سازگار LLM رهگیری کند. این اطمینان حاصل میکند که صرفنظر از پیچیدگی استفاده از ابزارها، زمینه ارسالی به مدل بهینه باقی میماند.
علاوه بر این، در نظر بگیرید که خلاصهسازی معنایی را برای زمینههای قدیمیتر پیادهسازی کنید. اگر یک گفتگو ساعتها طول بکشد، به جای حذف کامل پیامهای قدیمی، میتوانید آنها را در یک پاراگراف مختصر خلاصه کنید. این کار به مدل اجازه میدهد حافظه بلندمدت را بدون مصرف توکنهای بیشازحد حفظ کند.
// مثال تزریق پرامپت خلاصهسازی
const summaryPrompt = `
تاریخچه گفتگوی زیر را در 50 کلمه خلاصه کنید.
روی تصمیمات کلیدی و وظایف باقیمانده تمرکز کنید.
مگر اینکه برای نتیجه حیاتی باشند، از شامل کردن استدلالهای ابزار خودداری کنید.
`;
نتیجهگیری
هرس پویای زمینه تنها یک ترفند بهینهسازی نیست؛ بلکه الزامی برای ساخت برنامههای هوش مصنوعی قابل اعتماد و با مقیاس بالا با استفاده از MCP است. با پیادهسازی استراتژیهایی که تازگی و مرتبط بودن را وزندهی میکنند، توسعهدهندگان میتوانند هزینهها را به طور قابل توجهی کاهش داده و کیفیت تعاملات هوش مصنوعی را بهبود بخشند. با بالغتر شدن اکوسیستم MCP، انتظار میرود الگوریتمها و پلاگینهای هرس استانداردسازیشدهای ظاهر شوند که این پیچیدگی را برای توسعهدهندگان قابل مدیریت میکنند و به آنها اجازه میدهند بر ساخت عاملهای قدرتمند و آگاه از زمینه تمرکز کنند.