با پیش بردن مرزهای مدلهای زبانی بزرگ (LLMs)، مهمترین گلوگاه همچنان پنجره زمینه محدود است. برای توسعهدهندگانی که عاملهای خودمختاری میسازند که نیاز به استدلال در طول هفتهها یا ماهها دارند، تکیه صرف بر کشکش KV استاندارد کافی نیست. برای دستیابی به هوش واقعی با افق بلند، باید فراتر از گسترش ساده زمینه حرکت کنیم و سیستمهای حافظه قوی مهندسی کنیم. این پست دو پارادایم اصلی را کاوش میکند: حافظه برداری و حافظه اپیزودیک، و نحوه ترکیب آنها برای معماریهای مقیاسپذیر عامل.
محدودیتهای گسترش ساده زمینه
تغذیه ساده تاریخچه کامل مکالمه در داخل پرامپت، ناکارآمد و پرهزینه است. این کار نویز را افزایش میدهد، تأخیر را زیاد میکند و اغلب به پدیده «گمشدگی در میانه» منجر میشود، جایی که مدلها اطلاعات ارائهشده در وسط دنبالههای طولانی را فراموش میکنند. برای حل این مشکل، ما حافظههای خاصی را که به پرسش فعلی مرتبط هستند استخراج میکنیم، به جای اینکه همه چیز را ارسال کنیم. این موضوع ما را به دو رویکرد متمایز برای بازیابی حافظه میرساند.
حافظه برداری: جستجوی معنایی در مقیاس بزرگ
حافظه برداری، ستون فقرات تولید تقویتشده با بازیابی (RAG)، اطلاعات را به صورت بردارهای متراکم در یک فضای چندبعدی ذخیره میکند. این حافظه در بازیابی معنایی عالی عمل میکند و به عامل اجازه میدهد اطلاعات را بر اساس معنا به جای تطبیق دقیق کلمات کلیدی پیدا کند.
موارد استفاده برتر: دانش حقایق، دستورالعملهای ثابت، ترجیحات کاربر و جستجوی دادههای تاریخی.
وقتی عاملی نیاز دارد به یاد آورد که «رنگ مورد علاقه کاربر چیست» یا «مشخصات فنی پروژه قبلی»، پایگاههای داده برداری مانند Pinecone، Weaviate یا ChromaDB ایدهآل هستند. آنها امکان تطبیق نرم و جستجوی کارآمد شباهت را فراهم میکنند.
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
# Initialize vector store
vector_store = Chroma.from_documents(
documents=documents,
embedding=OpenAIEmbeddings()
)
# Retrieve semantically similar memories
retrieved_docs = vector_store.similarity_search("What did I say about my coding preferences?", k=3)
حافظه اپیزودیک: سوابق زمانی
حافظه اپیزودیک بازتابدهنده حافظه انسانی برای رویدادهای خاص است. این حافظه نمونههای گسسته از تعاملات را شامل زمانها، زمینه و نتایج ذخیره میکند. برخلاف حافظه برداری که برای بازیابی حقایق بهینه شده است، حافظه اپیزودیک برای درک توالی رویدادها و علیت بهینه شده است.
موارد استفاده برتر: پیگیری پیشرفت وظایف، به خاطر سپردن تعاملات اخیر، عیبیابی اقدامات ناموفق و حفظ خط زمانی فعالیتهای عامل.
در یک معماری عامل، حافظه اپیزودیک به عنوان یک لاگ عمل میکند. وقتی عاملی میپرسد: «آیا من قبلاً تلاش کردم سرور را راهاندازی مجدد کنم؟»، او به شباهت معنایی نیاز ندارد؛ او به یک لیست زمانی از اقدامات گذشته نیاز دارد. این اغلب با استفاده از یک بافر پنجره لغزان یا یک پایگاه داده سری زمانی پیادهسازی میشود.
مهندسی یک سیستم ترکیبی
عاملهای با افق بلند و مستحکمتر از یک رویکرد ترکیبی استفاده میکنند. حافظه برداری «پایگاه دانش» را فراهم میکند، در حالی که حافظه اپیزودیک «وضعیت» را فراهم میکند. با ترکیب هر دو، میتوانیم یک پنجره زمینه غنی بسازیم که هم اطلاعاتبخش و هم مرتبط باشد.
یک معماری معمولی به شرح زیر جریان دارد:
- کدگذاری: پرسشهای کاربر برای جستجوی برداری امبدد میشوند؛ تعاملات برای ذخیرهسازی اپیزودیک ثبت میشوند.
- بازیابی: عامل LLM دو بازیابی موازی را فعال میکند: جستجوی معنایی برای حقایق و فیلتر کردن زمانی برای رویدادهای اخیر.
- مرتبسازی مجدد: یک رنکر سبکوزن (مانند Cohere یا BGE) هر دو مجموعه نتایج را برای مرتبط بودن با پرسش فعلی امتیازدهی میکند.
- ترکیب: LLM حقایق بازیابیشده (از برداری) و رویدادها (از اپیزودیک) را ترکیب میکند تا پاسخی تولید کند.
ملاحظات عملی برای مقیاسپذیری
هنگام مقیاسبندی این معماری، موارد زیر را در نظر بگیرید:
- زوال حافظه: یک تابع زوال را برای امتیازات برداری پیادهسازی کنید تا اطلاعات اخیر یا با تأثیر بالا را در اولویت قرار دهید.
- خلاصهسازی: به طور دورهای لاگهای اپیزودیک را به رویدادهای انتزاعی خلاصه کنید تا فضای زمینه را صرفهجویی کنید. برای مثال، به جای ذخیره هر تماس API، ذخیره کنید که «تماس API در ساعت ۱۰:۰۰ صبح موفقیتآمیز بود».
- فهرستبندی سلسلهمراتبی: برای پایگاههای دانش عظیم، از فهرستهای برداری سلسلهمراتبی برای کاهش تأخیر جستجو استفاده کنید.
نتیجهگیری
ساخت عاملهای هوش مصنوعی با افق بلند تنها درباره مدلهای بزرگتر نیست؛ بلکه درباره معماری حافظه بهتر است. حافظه برداری عمق معنایی را ارائه میدهد، در حالی که حافظه اپیزودیک زمینه زمانی را ارائه میکند. با ترکیب این پارادایمها، توسعهدهندگان میتوانند عاملهایی بسازند که نه تنها دانشمند، بلکه آگاه از تاریخچه و وضعیت خود باشند. با حرکت به سمت سیستمهای خودمختارتر، تسلط بر این تمایز برای ایجاد برنامههای هوش مصنوعی قابل اعتماد، مقیاسپذیر و هوشمند حیاتی خواهد بود.