(برای دیدن ویدیوی این درس، روی تصویر بالا کلیک کنید)
درک پیچیدگی برنامهای که برای آن یک عامل هوش مصنوعی میسازید، برای ساختن یک عامل قابل اتکا مهم است. ما نیاز داریم عاملهای هوش مصنوعیای بسازیم که اطلاعات را بهطور مؤثر مدیریت کنند تا نیازهای پیچیده فراتر از مهندسی پرامپت را برطرف نمایند.
در این درس، به این خواهیم پرداخت که مهندسی کانتکست چیست و نقش آن در ساخت عاملهای هوش مصنوعی چیست.
این درس شامل موارد زیر است:
• مهندسی کانتکست چیست و چرا با مهندسی پرامپت متفاوت است.
• راهبردهایی برای مهندسی کانتکست مؤثر، از جمله چگونگی نوشتن، انتخاب، فشردهسازی و جداسازی اطلاعات.
• خطاهای رایج کانتکست که میتوانند عامل هوش مصنوعی شما را از مسیر خارج کنند و چگونه آنها را اصلاح کنید.
پس از اتمام این درس، شما خواهید دانست چگونه:
• مهندسی کانتکست را تعریف کنید و آن را از مهندسی پرامپت متمایز سازید.
• اجزای کلیدی کانتکست را در برنامههای مدلهای زبانی بزرگ (LLM) شناسایی کنید.
• راهبردهایی برای نوشتن، انتخاب، فشردهسازی و جداسازی کانتکست را برای بهبود عملکرد عامل بهکار ببرید.
• خطاهای رایج کانتکست مانند مسمومسازی، حواسپرتی، سردرگمی و تضاد را تشخیص دهید و تکنیکهای کاهش آنها را پیادهسازی کنید.
برای عاملهای هوش مصنوعی، کانتکست همان چیزی است که برنامهریزی عامل را برای انجام اقدامات خاص هدایت میکند. مهندسی کانتکست عملی است برای اطمینان از اینکه عامل هوش مصنوعی اطلاعات درست را برای تکمیل گام بعدیِ وظیفه در اختیار دارد. پنجرهی کانتکست اندازه محدودی دارد، بنابراین بهعنوان سازندگان عامل باید سیستمها و فرایندهایی بسازیم تا افزودن، حذف و فشردهسازی اطلاعات در پنجرهی کانتکست را مدیریت کنیم.
مهندسی پرامپت بر یک مجموعهی ثابت از دستورالعملها متمرکز است تا عاملهای هوش مصنوعی را با مجموعهای از قوانین بهطور مؤثر هدایت کنند. مهندسی کانتکست دربارهی مدیریت یک مجموعه پویا از اطلاعات، از جمله پرامپت اولیه، است تا مطمئن شویم عامل هوش مصنوعی در طول زمان آنچه را نیاز دارد در اختیار دارد. ایدهی اصلی در مهندسی کانتکست این است که این فرایند تکرارپذیر و قابل اطمینان باشد.
مهم است به یاد داشته باشیم که کانتکست فقط یک چیز نیست. اطلاعاتی که عامل هوش مصنوعی نیاز دارد میتواند از منابع متفاوتی بیاید و بر عهدهی ماست که اطمینان حاصل کنیم عامل به این منابع دسترسی دارد:
انواع کانتکستی که یک عامل ممکن است نیاز به مدیریت آنها داشته باشد عبارتاند از:
• دستورالعملها: اینها شبیه «قوانین» عامل هستند – پرامپتها، پیامهای سیستمی، مثالهای few-shot (نشان دادن به هوش مصنوعی چگونه کاری را انجام دهد)، و توصیف ابزارهایی که میتواند از آنها استفاده کند. اینجا همان محلی است که تمرکز مهندسی پرامپت با مهندسی کانتکست ترکیب میشود.
• دانش: این شامل حقایق، اطلاعات بازیابیشده از پایگاههای داده یا حافظههای بلندمدتی است که عامل تجمع کرده است. این شامل یکپارچهسازی یک سیستم Retrieval Augmented Generation (RAG) است اگر عامل نیاز به دسترسی به مخازن دانش و پایگاههای داده مختلف داشته باشد.
• ابزارها: اینها تعریف توابع خارجی، APIها و سرورهای MCP هستند که عامل میتواند فراخوانی کند، همراه با بازخورد (نتایج)ی که از استفاده از آنها میگیرد.
• تاریخچه گفتگو: دیالوگ جاری با کاربر. با گذشت زمان، این گفتگوها بلندتر و پیچیدهتر میشوند که به معنی اشغال فضای بیشتری در پنجرهی کانتکست است.
• ترجیحات کاربر: اطلاعاتی که در طول زمان در مورد علاقهمندیها یا ناخوشایندیهای کاربر یاد گرفته شدهاند. اینها میتوانند ذخیره و هنگام اتخاذ تصمیمات کلیدی برای کمک به کاربر فراخوانی شوند.
مهندسی کانتکست خوب با برنامهریزی خوب آغاز میشود. در اینجا روشی است که به شما کمک میکند شروع به فکر کردن دربارهی چگونگی بهکارگیری مفهوم مهندسی کانتکست بکنید:
تعریف نتایج واضح - نتایج وظایفی که به عاملهای هوش مصنوعی محول میشوند باید بهوضوح تعریف شوند. به این سؤال پاسخ دهید - “وقتی عامل هوش مصنوعی کارش را تمام کرد، دنیا چه شکلی خواهد بود؟” به عبارت دیگر، پس از تعامل با عامل هوش مصنوعی چه تغییر، اطلاعات یا پاسخی باید در اختیار کاربر باشد.
نقشهبرداری کانتکست - پس از اینکه نتایج عامل هوش مصنوعی را تعریف کردید، باید به سؤال “عامل هوش مصنوعی برای تکمیل این وظیفه به چه اطلاعاتی نیاز دارد؟” پاسخ دهید. به این ترتیب میتوانید شروع به نقشهبرداری کانتکست از جایی که آن اطلاعات ممکن است قرار داشته باشند، کنید.
ایجاد خطوط لولهی کانتکست - حال که میدانید اطلاعات کجا قرار دارند، باید به سؤال “عامل چگونه این اطلاعات را بهدست خواهد آورد؟” پاسخ دهید. این کار میتواند به طرق مختلفی انجام شود، از جمله RAG، استفاده از سرورهای MCP و سایر ابزارها.
برنامهریزی مهم است اما وقتی اطلاعات شروع به جریان در پنجرهی کانتکست عامل ما میکنند، باید راهبردهای عملی برای مدیریت آن داشته باشیم:
در حالی که برخی اطلاعات بهصورت خودکار به پنجرهی کانتکست افزوده میشوند، مهندسی کانتکست دربارهی گرفتن نقش فعالتری در این اطلاعات است که میتوان با چند راهبرد انجام داد:
دفترچه یادداشت عامل این امکان را میدهد که یک عامل هوش مصنوعی طی یک جلسهی واحد نکاتی از اطلاعات مرتبط با وظایف جاری و تعاملات کاربر یادداشت کند. این باید خارج از پنجرهی کانتکست در یک فایل یا شیء زمان اجرا وجود داشته باشد تا عامل بتواند در طی این جلسه در صورت نیاز بعدها آن را بازیابی کند.
حافظهها دفترچههای یادداشت برای مدیریت اطلاعات خارج از پنجرهی کانتکست یک جلسهی واحد خوب هستند. حافظهها به عوامل اجازه میدهند اطلاعات مرتبط را در چند جلسه ذخیره و بازیابی کنند. این میتواند شامل خلاصهها، ترجیحات کاربر و بازخورد برای بهبودهای آینده باشد.
فشردهسازی کانتکست وقتی پنجرهی کانتکست رشد میکند و به حد خود نزدیک میشود، میتوان از تکنیکهایی مانند خلاصهسازی و کوتاهسازی استفاده کرد. این شامل یا نگهداشتن تنها مرتبطترین اطلاعات یا حذف پیامهای قدیمیتر است.
سیستمهای چندعاملی توسعهی سیستمهای چندعاملی شکلی از مهندسی کانتکست است زیرا هر عامل پنجرهی کانتکست خاص خود را دارد. اینکه آن کانتکست چگونه به اشتراک گذاشته شده و به عوامل مختلف منتقل میشود، موضوع دیگری است که هنگام ساختن این سیستمها باید برنامهریزی شود.
محیطهای سندباکس اگر یک عامل نیاز داشته باشد کدی اجرا کند یا حجم زیادی از اطلاعات در یک سند را پردازش کند، این میتواند توکنهای زیادی برای پردازش نتایج نیاز داشته باشد. به جای اینکه همهی اینها در پنجرهی کانتکست ذخیره شود، عامل میتواند از یک محیط سندباکس استفاده کند که قادر به اجرای این کد باشد و فقط نتایج و سایر اطلاعات مرتبط را بخواند.
اشیاء وضعیت زمان اجرا این کار با ایجاد کانتینرهای اطلاعاتی انجام میشود تا موقعیتهایی را مدیریت کند که عامل نیاز دارد به اطلاعات خاصی دسترسی داشته باشد. برای یک وظیفهی پیچیده، این امکان را میدهد که عامل نتایج هر زیرکار را گامبهگام ذخیره کند، و اجازه دهد کانتکست تنها به آن زیرکار خاص متصل باقی بماند.
فرض کنید میخواهیم یک عامل هوش مصنوعی برای من “برایم سفری به پاریس رزرو کند.”
• یک عامل ساده که تنها از مهندسی پرامپت استفاده میکند ممکن است فقط پاسخ دهد: “خُب، کی میخواهید به پاریس بروید؟”. آن فقط سؤال مستقیم شما را در زمان پرسش پردازش کرد.
• یک عاملی که از راهبردهای مهندسی کانتکست پوششدادهشده استفاده میکند کار بسیار بیشتری انجام میدهد. قبل از حتی پاسخدادن، سیستم آن ممکن است:
◦ تقویم شما را بررسی کند برای تاریخهای در دسترس (بازیابی دادههای زمان واقعی).
◦ ترجیحات سفر گذشته را به یاد آورد (از حافظهی بلندمدت) مانند خطوط هوایی ترجیحی شما، بودجه، یا اینکه آیا پرواز مستقیم را ترجیح میدهید.
◦ ابزارهای در دسترس را شناسایی کند برای رزرو پرواز و هتل.
چیست: وقتی یک هالوسیناسیون (اطلاعات نادرست تولیدشده توسط LLM) یا یک خطا وارد کانتکست میشود و بارها به آن اشاره میشود، باعث میشود عامل اهداف غیرممکن را دنبال کند یا استراتژیهای بیمعنی توسعه دهد.
چه باید کرد: پیادهسازی اعتبارسنجی کانتکست و قرنطینه. قبل از افزودن اطلاعات به حافظهی بلندمدت، اطلاعات را اعتبارسنجی کنید. اگر احتمال مسمومسازی شناسایی شد، رشتههای کانتکست تازهای شروع کنید تا از انتشار اطلاعات بد جلوگیری شود.
مثال رزرو سفر: عامل شما یک پرواز مستقیم از یک فرودگاه محلی کوچک به یک شهر بینالمللی دور را هالوسینه میکند که در واقع آن فرودگاه پرواز بینالمللی ارائه نمیدهد. این جزئیات پروازِ وجود نداشته در کانتکست ذخیره میشود. بعداً وقتی از عامل میخواهید رزرو کند، همچنان تلاش میکند بلیت برای این مسیر غیرممکن پیدا کند و منجر به خطاهای مکرر میشود.
راهحل: یک مرحله پیادهسازی کنید که وجود و مسیرهای پرواز را با یک API زمان واقعی اعتبارسنجی کند قبل از افزودن جزئیات پرواز به کانتکست کاریِ عامل. اگر اعتبارسنجی شکست خورد، اطلاعات نادرست “قرنطینه” میشود و دیگر استفاده نمیگردد.
چیست: وقتی کانتکست آنقدر بزرگ میشود که مدل بیش از حد روی تاریخچهی انباشتهشده تمرکز میکند بهجای استفاده از آنچه در طول آموزش یاد گرفته است، که منجر به اقدامات تکراری یا غیرمفید میشود. مدلها ممکن است حتی قبل از پُرشدن پنجرهی کانتکست شروع به اشتباه کنند.
چه باید کرد: از خلاصهسازی کانتکست استفاده کنید. اطلاعات انباشتهشده را دورهای به خلاصههای کوتاهتر فشرده کنید، جزئیات مهم را نگه دارید و تاریخچهی تکراری را حذف کنید. این کمک میکند تا تمرکز “بازتنظیم” شود.
مثال رزرو سفر: شما مدت زیادی دربارهی مقاصد رویایی مختلف سفر صحبت کردهاید، از جمله شرح مفصل سفر کولهپشتیگردی دو سال پیش. وقتی بالاخره از عامل میپرسید “برای ماه آینده برایم یک پرواز ارزان پیدا کن”، عامل در جزئیات قدیمی و نامربوط گرفتار میشود و مدام دربارهی تجهیزات کولهپشتی یا برنامههای سفر گذشتهتان سؤال میکند و درخواست جاری شما را نادیده میگیرد.
راهحل: بعد از تعداد مشخصی گردش گفتگو یا وقتی کانتکست بیش از حد رشد کرد، عامل باید مرتبطترین و اخیرترین بخشهای مکالمه را خلاصه کند – تمرکز روی تاریخها و مقصد سفر فعلی شما – و از آن خلاصهی فشردهشده برای تماس بعدی با LLM استفاده کند و چت تاریخی کمتر مرتبط را کنار بگذارد.
چیست: وقتی کانتکست غیرضروری، اغلب به شکل تعداد زیاد ابزارهای در دسترس، باعث میشود مدل پاسخهای بد تولید کند یا ابزارهای نامربوط را فراخوانی کند. مدلهای کوچکتر بهویژه در معرض این مشکل هستند.
چه باید کرد: مدیریت مجموعهی ابزارها را با استفاده از تکنیکهای RAG پیادهسازی کنید. توضیحات ابزارها را در یک پایگاه دادهی برداری ذخیره کنید و فقط مرتبطترین ابزارها را برای هر وظیفهی مشخص انتخاب کنید. پژوهشها نشان میدهند محدود کردن انتخاب ابزارها به کمتر از 30 مورد مفید است.
مثال رزرو سفر: عامل شما به دهها ابزار دسترسی دارد: book_flight, book_hotel, rent_car, find_tours, currency_converter, weather_forecast, restaurant_reservations, و غیره. شما میپرسید، “بهترین راه برای گشتوگذار در پاریس چیست؟” بهدلیل تعداد زیاد ابزارها، عامل سردرگم میشود و تلاش میکند book_flight را برای داخل پاریس فراخوانی کند، یا rent_car را حتی اگر شما وسیلهی نقلیهٔ عمومی را ترجیح میدهید فراخوانی کند، چون توضیحات ابزارها ممکن است همپوشانی داشته باشند یا به سادگی نتواند بهترین گزینه را تشخیص دهد.
راهحل: از RAG بر روی توصیف ابزارها استفاده کنید. وقتی دربارهی مسیرهای جابجایی در پاریس سؤال میکنید، سیستم بهصورت پویا فقط مرتبطترین ابزارها مثل rent_car یا public_transport_info را براساس پرسش شما بازیابی میکند و یک “بارگذاری” متمرکز از ابزارها را به LLM ارائه میدهد.
چیست: وقتی اطلاعات متناقضی در کانتکست وجود دارد که به استدلال نامنسجم یا پاسخهای نادرست نهایی منجر میشود. این اغلب زمانی رخ میدهد که اطلاعات در مراحل مختلف میرسند و فروض اولیهی نادرست در کانتکست باقی میمانند.
چه باید کرد: از هرس کانتکست و آفلودینگ استفاده کنید. هرس به معنی حذف اطلاعات قدیمی یا متناقض با رسیدن جزئیات جدید است. آفلودینگ به مدل یک فضای کاری جداگانه (scratchpad) میدهد تا اطلاعات را بدون شلوغی کانتکست اصلی پردازش کند.
مثال رزرو سفر: در ابتدا به عامل خود میگویید، “میخواهم کلاس اکونومی پرواز کنم.” بعداً در گفتگو نظر خود را تغییر میدهید و میگویید، “در واقع، برای این سفر کلاس بیزنس را بگیریم.” اگر هر دو دستور در کانتکست بمانند، عامل ممکن است نتایج جستجوی متضاد دریافت کند یا دربارهی اینکه کدام ترجیح را اولویت دهد دچار سردرگمی شود.
راهحل: پیادهسازی هرس کانتکست. وقتی یک دستور جدید با یک دستور قدیمی تضاد دارد، دستور قدیمی حذف یا بهصراحت باطل شود. بهطور جایگزین، عامل میتواند از یک دفترچه یادداشت برای حل تضاد ترجیحات قبل از تصمیمگیری استفاده کند، تا اطمینان حاصل شود تنها دستور نهایی و سازگار هدایتکنندهی اقدامات آن باشد.
به Microsoft Foundry Discord بپیوندید تا با سایر یادگیرندگان ملاقات کنید، در ساعات حضور در دفتر شرکت کنید و سوالات خود دربارهی عاملهای هوش مصنوعیتان را پاسخ بگیرید.
سلب مسئولیت: این سند با استفاده از سرویس ترجمهٔ هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادقتهایی باشند. نسخهٔ اصلی سند به زبان مبدأ باید بهعنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، توصیه میشود از ترجمهٔ حرفهای انسانی استفاده کنید. ما در قبال هیچگونه سوتفاهم یا تفسیر نادرستی که از استفاده از این ترجمه ناشی شود، مسئولیتی نداریم.