اکثر مردم میتوانند برای یک LLM پرامپت بنویسند. اما گنجاندن آن در محصولی که بتواند ترافیک واقعی را تحمل کند، بازی کاملاً متفاوتی است. اگر میخواهید از تایپ کردن در یک پنجره چت به سمت عرضه هوش مصنوعی در سطح تولید (production) حرکت کنید، باید درک کنید که این پشته (stack) واقعاً چگونه در کنار هم قرار میگیرد. این یک جادو نیست؛ بلکه زنجیرهای از مسائل مهندسی مجزا است و هر لایه حالتهای شکست (failure modes) خاص خود را دارد.
اجازه دهید مسیر کارکرد یک سیستم هوش مصنوعی مدرن را، از لحظهای که یک کلمه تایپ میکنید تا لحظهای که یک عامل (agent) وظیفهای را کامل میکند، بررسی کنیم.
زیربنا: مدلها چگونه فکر میکنند
در هسته اصلی خود، یک مدل زبانی بزرگ دقیقاً یک کار انجام میدهد: پیشبینی توکن بعدی. آن توکن میتواند کلمه بعدی، بخشی از یک کلمه یا حتی یک نماد باشد. هر چیز دیگری — از شعر و کد گرفته تا استدلال — رفتاری نوظهور (emergent behavior) از انجام همان یک وظیفه در مقیاس بزرگ است.
مسیر تبدیل پرامپت شما به پاسخ مدل به این صورت است:
توکنسازی (Tokenization) اولین قدم است. متن خام برای یک شبکه عصبی بیمعنی است، بنابراین مدل کلمات شما را به قطعات کوچکتر تقسیم کرده و هر قطعه را به یک عدد نگاشت میکند. کلمه "tokenization" ممکن است به سه توکن مجزا تبدیل شود. عبارت "New York" بسته به لغتنامه، ممکن است یک یا دو توکن باشد. این اعداد دلخواه نیستند؛ آنها از یک لغتنامه ثابت که مدل در طول آموزش یاد گرفته است، استخراج میشوند.
وقتی کلمات به عدد تبدیل شدند، نیاز به معنا دارند. جایگذاریها (Embeddings) آن اعداد را به بردارها تبدیل میکنند — لیستهای بلندی از مقادیر ممیز شناور که مفاهیم مشابه را در فضای ریاضی نزدیک به هم قرار میدهند. "King" و "Queen" در نزدیکی هم قرار میگیرند. "Paris" و "Berlin" در کنار هم خوشهبندی میشوند، اما در محلهای متفاوت از "Python" یا "JavaScript".
اما بردارها به تنهایی ترتیب را از دست میدهند. کدگذاری موقعیتی (Positional encoding) به مدل میگوید که هر توکن در کجای جمله قرار دارد. بدون آن، جملات "The dog bit the man" و "The man bit the dog" یکسان به نظر میرسند.
سپس نوبت به مکانیزم توجه (attention mechanism) میرسد. اینجاست که مدل به تمام توکنهای ورودی نگاه میکند و تصمیم میگیرد کدام یک برای پیشبینی توکن بعدی اهمیت دارند. وقتی میپرسید: "شرکت چه زمانی تأسیس شد و چه کسی اکنون آن را رهبری میکند؟"، مدل باید "founded" را به یک تاریخ و "leads" را به نام یک CEO مرتبط کند. مکانیزم توجه این ارتباطات را ایجاد میکند.
این عملیاتها در لایههای (layers) مختلف روی هم قرار میگیرند — که اغلب دهها لایه هستند — به طوری که لایههای اولیه نحو (syntax) را مدیریت میکنند و لایههای بعدی استدلال انتزاعی را میسازند. در جایی در میان این لایهها، شبکههای پیشخور (feed-forward networks) تداعیهای واقعگرایانه را ذخیره میکنند. اینجاست که مدل این دانش را نگه میدارد که پاریس پایتخت فرانسه است، یا اینکه یک API خاص انتظار یک JSON payload را دارد. این دقیقاً یک پایگاه داده نیست، بلکه شبکهای فشرده از وزنهاست که الگوها را فعال میکند.
در نهایت، رمزگشایی (decoding) بازنماییهای برداری داخلی را دوباره به توکنهای قابل خواندن برای انسان تبدیل میکند. مدل «نمیداند» که دارد انگلیسی مینویسد؛ بلکه صرفاً هزاران توکن احتمالی بعدی را رتبهبندی کرده و محتملترین آنها را بارها و بارها انتخاب میکند تا زمانی که به یک شرط توقف (stop condition) برسد.
لایه RAG: دادن حافظه به مدلها
یک مدل پایه در زمان منجمد شده است. وزنهای آن، اینترنت را تا یک تاریخ مشخص پوشش میدهند و مدل نمیتواند به اسناد خصوصی شما دسترسی داشته باشد، مگر اینکه آنها را به آن بدهید. این موضوع باعث میشود مدل برای اکثر وظایف تجاری بیفایده باشد. تولید تقویتشده با بازیابی، یا RAG، این مشکل را با دادن یک کتابخانه خارجی به مدل که بتواند قبل از پاسخ دادن به آن مراجعه کند، حل میکند.
راهاندازی این سیستم از نظر مفهومی ساده اما در عمل حساس است. ابتدا، اسناد خود را برداشته و عملیات قطعهبندی (chunking) را روی آنها اعمال میکنید. شما یک فایل PDF صد صفحهای را مستقیماً در پنجره پرامپت رها نمیکنید؛ بلکه آن را به پاراگرافها، بخشها یا بلوکهای معنایی تقسیم میکنید که به اندازه کافی کوچک باشند تا در محدودیت بافت (context limit) مدل جا شوند و در عین حال معنای خود را حفظ کنند.
هر قطعه از یک مدل جایگذاری (embedding model) عبور کرده و به یک بردار تبدیل میشود، درست مانند توکنهای داخل LLM. این بردارها در یک پایگاه داده برداری (vector database) زندگی میکنند — یک ذخیرهساز تخصصی که برای جستجوی شباهت طراحی شده است، نه جستجوهای دقیق. وقتی کاربر سوالی میپرسد، شما پرسوجوی (query) او را به بردار تبدیل کرده و از پایگاه داده میپرسید: "کدام قطعات از نظر معنایی به این بردار نزدیکتر هستند؟"
جستجوی برداری خام به تنهایی اغلب در یافتن تطابقهای دقیق ناتوان است. یک سیستم تولیدی خوب از جستجوی ترکیبی (hybrid search) استفاده میکند که تطبیق کلمات کلیدی را با شباهت معنایی ترکیب میکند. اگر کسی درخواست "SLA-99 compliance" را داشت، شما سندی را میخواهید که دقیقاً شامل آن رشته متنی باشد، نه فقط سندی که حس مشابهی داشته باشد.
پس از بازیابی، رتبهبندی مجدد (re-ranking) نویزها را فیلتر میکند. جستجوی اولیه ممکن است بیست قطعه را برگرداند، اما تنها سه یا چهار مورد اول واقعاً کمککننده هستند. یک رتبهبند (re-ranker) میزان مرتبط بودن را امتیازدهی کرده و بقیه را قبل از اینکه چیزی به LLM برسد حذف میکند؛ این کار باعث صرفهجویی در توکنها و کاهش توهمات (hallucinations) میشود.
لایه عامل (Agent): انجام اقدامات
RAG به مدل اجازه میدهد بخواند. عاملها (Agents) به آن اجازه میدهند عمل کنند.
یک عامل (Agent) اساساً یک LLM است که درون یک حلقه قرار گرفته است. آن مشاهده میکند، استدلال میکند، عمل میکند و سپس دوباره مشاهده میکند. اگر از یک عامل بخواهید بلیط هواپیما رزرو کند، فقط نحوه کارکرد رزرو را توصیف نمیکند؛ بلکه وظیفه را به مراحل مختلف تقسیم میکند، توابع مناسب را فراخوانی میکند، پاسخها را میخواند و خود را تطبیق میدهد.
این حلقه به این صورت است. مشاهده (Observe): عامل وضعیت فعلی را میخواند—درخواست شما، نتایج فراخوانیهای قبلی ابزارها، و هرگونه خطا. استدلال (Reason): مدل LLM تصمیم میگیرد که مرحله بعدی چیست، که اغلب از طریق تولید یک برنامه ساختاریافته یا انتخاب از میان گزینههای از پیش تعریفشده انجام میشود. عمل (Act): ابزاری را فراخوانی میکند.
ابزارها راهی هستند که عاملها از طریق آنها با دنیای واقعی در ارتباط قرار میگیرند. آنها با JSON schemas تعریف میشوند که دقیقاً به مدل میگویند یک API به چه پارامترهایی نیاز دارد. مدل LLM درخواستهای HTTP دلخواه ارسال نمیکند، بلکه یک schema را پر میکند. «API هواشناسی را با city: London و units: metric فراخوانی کن.» اگر ابزار دما را برگرداند، عامل آن را تغذیه میکند...
