راهنمای هسته معنایی (Semantic Kernel)

در حال حاضر، رویکرد Copilot بر دنیای هوش مصنوعی (AI) حاکم است و در آن دنیا، مایکروسافت Semantic Kernel را به عنوان چارچوبی برای ساخت Copilot های خود ایجاد کرد. اکنون می توانید از Semantic Kernel نیز استفاده کنید. Semantic Kernel (SK) یک چارچوب هوش مصنوعی منبع باز است که توسط مایکروسافت برای توسعه دهندگان دات نت، پایتون و جاوا که با مدل های زبان بزرگ (LLM) کار می کنند ایجاد شده است. هدف آن سه چیز است: انتزاع کردن LLMها، APIها و ابزارهای اساسی. برای مدیریت پیاده سازی های پیچیده تر به روشی عمومی؛ و ادغام محتوای خود را آسان کنید. Semantic Kernel بسیار شبیه به LangChain، یک چارچوب LLM منبع باز محبوب برای پایتون و جاوا اسکریپت/تایپ اسکریپت است، اگرچه کمی پخته تر است و رویکرد کمی متفاوت دارد.

این مقاله یک راهنمای عملی برای برنامه نویسی با Semantic Kernel نیست. در عوض، هدف آن این است که به شما کمک کند سر خود را در اطراف SK بپیچید: چه چیزی است و چه چیزی نیست. کجا می درخشد و کجا نمی درخشد. چه زمانی از آن به نفع خود استفاده کنید و چه زمانی از آن دوری کنید. در مقاله‌ای دیگر به برنامه‌نویسی با SK می‌پردازم، به این امید که کد پیش‌نمایش تا آن زمان به‌طور کامل‌تر آماده شود تا مقاله قبل از چاپ منسوخ نشود. اگر می خواهید اکنون دستان خود را کثیف کنید، به مخزن GitHub بروید و نمونه ها و نوت بوک های Jupyter را دانلود کنید، پروژه ای را شروع کنید، بسته SK NuGet را دریافت کنید و وارد شوید. امیدوارم این مقاله به شما در درک SK کمک کند و ارائه دهد. نقشه راه برای استفاده از آن

یک سوال بسیار خوب که احتمالاً در حال حاضر از خود می‌پرسید این است: “چرا برای کار با LLM به یک چارچوب نیاز دارم؟” پاسخ کوتاه این است که شما این کار را نمی کنید. مانند اکثر فریم ورک ها، SK منحنی یادگیری دارد و مقداری سربار دارد. علاوه بر این، از نظر برنامه نویسی هوش مصنوعی هنوز روزهای اولیه است و چشم انداز مانند غرب وحشی است. همه ما هنوز در حال کشف چیزهایی هستیم. برای عملکرد اولیه هوش مصنوعی، برای درک اصول برنامه نویسی هوش مصنوعی، یا تنظیم دقیق برای کمال، کاملاً قانونی است که کد و برنامه خود را مستقیماً در برابر LLM ها و API ها قرار دهید. در واقع، متوجه شده‌ام که کد SK به سرعت تکامل می‌یابد (هنوز تا زمان نوشتن این مقاله در پیش‌نمایش است) که هر چند هفته یک‌بار با تغییرات ناگهانی در SDK مواجه می‌شوم، در حالی که کد هوش مصنوعی دست‌نویس من در حال زمزمه کردن است.

چرا اکنون Semantic Kernel را در نظر بگیرید؟ برای یک چیز، قرار نیست برای همیشه در پیش نمایش باشد. این دارای برخی ویژگی های بسیار خوب است که کار کوتاهی را برای کدنویسی خسته کننده ایجاد می کند، و تغییر خدمات پشتیبانی، مدل ها و حتی ابزارها را نسبت به کدنویسی دستی آسان تر می کند. در حال حاضر، بیشتر کدهای من از مدل‌های GPT-35-Turbo و GPT-4 استفاده می‌کنند که در Azure اجرا می‌شوند و از طریق OpenAI یکپارچه‌سازی Azure قابل دسترسی هستند. این ساده، پایدار، آسان برای ایستادن و خراب کردن است، و در درجه سازمانی موجود است. با در دسترس قرار گرفتن مدل های جدید، می توانم آنها را ارزیابی کنم و در صورت تمایل از آنها استفاده کنم.

با SK، من به راحتی می توانم به جای Azure OpenAI مستقیماً از OpenAI استفاده کنم یا فقط با تغییر پیکربندی از ادغام نسبتاً اخیر SK با Hugging Face استفاده کنم. Hugging Face یک پلت فرم اجتماعی برای میزبانی یا دانلود مدل‌ها و مجموعه داده‌های منبع باز است. چشم انداز LLM به سرعت در حال تغییر است و مدل های جدید به طور مداوم در دسترس هستند. این نه تنها ممکن است، بلکه احتمالاً با مدل‌ها یا ابزارهای جدیدی روبرو خواهید شد که در کاری که از آن‌ها استفاده می‌کنید بهتر هستند، ارزان‌تر از مدل‌هایی که در حال حاضر استفاده می‌کنید یا هر دو. کدگذاری مجدد برنامه کدگذاری شده دستی شما برای یک مدل یا پلتفرم جدید ممکن است از چند دقیقه تا چند هفته طول بکشد، اما پیکربندی مجدد SK نسبتا آسان است، بنابراین این اولین دلیل بزرگ برای در نظر گرفتن SK است: انتزاع .

حوزه دیگری که در آن SK از انتزاع استفاده می کند، دستورات است . مهندسی سریع یک زمینه کامل است که به ایجاد مؤثرترین دستورات (رشته‌ها) برای تغذیه به یک LLM به منظور دریافت بهترین پاسخ برای یک کار معین اختصاص داده شده است. اگرچه آنچه «بهترین» را تشکیل می‌دهد می‌تواند از مدلی به مدل دیگر متفاوت باشد، تکنیک‌های مؤثری وجود دارد که عموماً باعث می‌شود برخی از اعلان‌ها بهتر از سایرین در سراسر صفحه کار کنند. علاوه بر این، تکنیک‌هایی برای ترغیب مدل‌ها برای دادن پاسخ‌های قابل استفاده‌تر وجود دارد. برای مثال، می‌توانید درخواست خود را برای تشویق مدل به ارائه پاسخ در قالب JSON خاص که به راحتی توسط کد مصرف می‌شود، بنویسید.

ایجاد اعلان‌های خوب می‌تواند کار بسیار زیادی باشد، بنابراین ایجاد کتابخانه‌ای از الگوهای سریع برای اهداف خاص و ایجاد توضیحاتی در مورد کارهایی که آن درخواست‌ها به‌طور خاص انجام می‌دهند، منطقی است تا بتوان آن‌ها را به راحتی کشف کرد و دوباره از آنها استفاده کرد. سپس می‌توانید پارامترهایی را به این الگوها برای ایجاد درخواست‌های استاندارد شده ارسال کنید. SK این الگوهای اعلان از پیش توسعه یافته را توابع معنایی می نامد . و، البته، شما هنوز هم می توانید توابع معنایی را در پرواز ایجاد کنید. دستورهایی که در جریان کد ایجاد می شوند، توابع معنایی درون خطی نامیده می شوند.

Semantic Kernel علاوه بر قالب‌های درخواستی سفارشی (توابع معنایی)، چارچوب خوبی برای ایجاد و فهرست‌نویسی کد سفارشی که می‌نویسید، به نام توابع بومی ارائه می‌کند. یک تابع بومی را تصور کنید که یک پرس و جو را در مقابل پایگاه داده SQL اجرا می کند. این کاری نیست که یک فرمان قالبی بتواند انجام دهد، اما شما می توانید، زیرا می توانید هر کدی را که می خواهید بنویسید. این ایجاد کدهای سفارشی فقط توسط تخیل شما محدود می شود. درست مانند توابع معنایی، توابع بومی می توانند پارامترهای رشته را به عنوان ورودی بپذیرند و باید خروجی های رشته ای را که به عنوان ورودی برای تابع معنایی یا بومی دیگر مناسب هستند، برگردانند. وقتی نوبت به تکمیل یک کار می رسد، SK بین توابع معنایی و بومی تفاوتی قائل نمی شود. توابع SK جعبه سیاه هستند.

گروه هایی از توابع مشابه در SK مهارت نامیده می شوند . به عنوان مثال، اگر گروهی از توابع دارید که با یک پایگاه داده اختصاصی تعامل دارند، یا گروهی که متن را تجزیه می کنند، یا گروهی که جوک می گویند، می توانید مهارتی متشکل از این توابع ایجاد کنید. مهارت ها عمدتاً برای کمک به سازماندهی تعداد زیادی از توابع وجود دارند و می توانند مفید باشند زیرا می توانید همه عملکردها را در یک مهارت در یک عملیات واحد بارگیری کنید.

و شما مجبور نیستید همه توابع را خودتان بسازید. اشخاص ثالث در حال ایجاد عملکردهایی هستند که به شما امکان دسترسی به سیستم ها و ویژگی های آنها را می دهد و آنها را در کاتالوگ هایی با توضیحات برای استفاده شما قرار می دهند. به عنوان مثال، توابعی برای مایکروسافت ۳۶۵، مایکروسافت گراف و بینگ از مایکروسافت وجود دارد و توابعی برای Google و Slack وجود دارد. این توابع شخص ثالث اغلب از طریق یک نقطه پایانی REST که دارای مانیفست است و به عنوان افزونه نامیده می شود در دسترس شما قرار می گیرد. از نظر فنی، افزونه‌ها فقط مهارت‌ها (گروه‌هایی از توابع) هستند، بنابراین می‌توانید گروهی از توابع بومی و/یا معنایی را که می‌نویسید و آنها را به‌عنوان یک افزونه در معرض دید قرار دهید که دیگران می‌توانند با ایجاد یک مانیفست JSON برای آنها استفاده کنند. از مشخصات پلاگین OpenAI پیروی می کند و یک نقطه پایانی REST را نشان می دهد. من انتظار دارم به معنای واقعی کلمه هزاران پلاگین شخص ثالث تا زمانی که SK نسخه ۱.۰ را عرضه کند منتشر شود.

این ما را به یک انتزاع دیگر هدایت می کند. از آنجا که ما اکنون مهارت‌ها و پلاگین‌ها و توابع معنایی و بومی فردی را در اختیار داریم، و از آنجا که آنها از شکل دیگری از انتزاع استفاده می‌کنند، یعنی همگی پارامترهای رشته را به عنوان ورودی می‌پذیرند و خروجی‌های رشته را برمی‌گردانند، می‌توانید از این بلوک‌های ساختمانی عمومی برای ایجاد یک سری مراحل برای انجام وظایف پیچیده. حتی ساده ترین تعاملات با LLM ها اغلب شامل چندین مرحله است.

الگوی Retrieval Augmented Generation (RAG) را در نظر بگیرید که معمولا برای “زمینه” پاسخ های یک مدل استفاده می شود. اولین مرحله در الگوی RAG استفاده از LLM برای تعیین هدف کاربر است. به عنوان مثال، یک کاربر چت ربات هوش مصنوعی در یک سایت خرده فروشی ممکن است در مورد ویژگی های محصول، یا در مورد قیمت گذاری، یا در مورد صورتحساب سوالی داشته باشد. بر اساس آنچه کاربر تایپ کرده است، ممکن است درخواستی به یک LLM ارسال شود تا مشخص شود کاربر به کدام یک از این زمینه ها علاقه دارد. بر اساس قصد کاربر، گام بعدی ممکن است پرس و جو از اطلاعات محصول، یا اطلاعات قیمت گذاری یا اطلاعات صورتحساب از آن باشد. یک سیستم داخلی این بخش بازیابی RAG است. مرحله بعدی ترکیب درخواست اصلی کاربر در مرحله اول با نتایج بازیابی شده در مرحله دوم و ارسال هر دو به یک LLM است. این بخش افزوده شده RAG است. شما سوال کاربر را با داده هایی که بازیابی کرده اید افزایش می دهید تا پاسخ را “زمینه” کنید. سپس LLM با استفاده از اطلاعات بازیابی شده، یک پاسخ آگاهانه یا مبتنی بر پایه تولید می کند.

اشاره کردم که هدف SK سه چیز است. علاوه بر ارائه انتزاع، دومین ویژگی بزرگ هر دو Semantic Kernel و LangChain، توانایی انجام وظایف پیچیده در پرواز است. LLM ها در تولید متن خوب هستند، اما نمی توانند هر کاری را که کاربر از آنها بخواهد انجام دهند و به عنوان یک توسعه دهنده، نمی توانید هر چیزی را که کاربر ممکن است از آن بخواهد پیش بینی کنید. همانطور که در مثال RAG در بالا انجام دادید، می‌توانید گردش کار خود (زنجیره یا خطوط لوله توابع) را با دست بسازید، اما وقتی کاربران چیزی را می‌خواهند که شما پیش‌بینی نمی‌کردید چه اتفاقی می‌افتد؟

می توانید از SK بخواهید که گردش کار را برای شما بسازد! شما این کار را با درخواست از یک LLM انجام می دهید تا کار پیچیده را به مراحل جداگانه تقسیم کند که هر کدام با یکی از عملکردهای موجود برای آن قابل انجام است. SK از یک تابع داخلی استفاده می کند که برنامه ریز را فرا می خواند تا از توضیحات هر تابع و مهارتی که بارگذاری کرده اید برای انتخاب یک تابع برای انجام هر مرحله از کار استفاده کند. در نهایت، شما باید SK مراحل را در گردش کار اجرا کند، داده ها و زمینه را از مرحله به مرحله منتقل می کند. LangChain این را یک زنجیره و SK آن را خط لوله می نامد، اما هر دو به یک شکل کار می کنند.

توانایی ایجاد یک تفکیک از کار و سپس تنظیم یک راه حل چند مرحله ای به راه حل های شما اجازه می دهد تا سناریوهای متنوع، پیچیده و موقتی را مدیریت کنند. توانایی توسعه‌دهندگان برای نوشتن اعلان‌های سفارشی و کدهای سفارشی برای انجام مراحل خاصی که می‌تواند توسط برنامه‌ریز به روشی عمومی مصرف شود، ایجاد و استفاده از مجموعه‌ای از ویژگی‌های خاص محیط شما و اتصال به سیستم‌های داخلی و سپس ادغام آن‌ها را آسان می‌کند. مراحل سفارشی به گردش کار به عنوان مثال، تصور کنید متوجه می شوید که جستجوی آدرس مشتری در یک پایگاه داده اختصاصی به عنوان بخشی از گردش کار خاص مفید خواهد بود. شما به سادگی جستجو را کدنویسی می کنید و شرحی از کاری که کد شما انجام می دهد ارائه می دهید و برنامه ریز می تواند از آن استفاده کند. همانطور که برنامه ریز مراحل لازم برای تکمیل کار کلی را ایجاد می کند، اگر بخشی از آن کار شامل جستجوی آدرس مشتری باشد، می تواند تصمیم بگیرد که از کد شما برای تکمیل آن مرحله در گردش کار استفاده کند.

پلاگین ها همچنین می توانند به عنوان مراحل در خط لوله استفاده شوند. به عنوان مثال، می توانید یک سیستم پیچیده ایجاد کنید که توسط یک رویداد راه اندازی می شود، مانند ورود یک مشتری جدید به یک سیستم CRM. یک خط لوله SK ممکن است از طریق توابع و پلاگین ها با چندین سیستم داخلی و خارجی ادغام شود و خروجی ارزشمندی تولید کند. سپس یک پلاگین می‌تواند جریان کاری را راه‌اندازی کند که آن خروجی ارزشمند را از طریق سیستم ایمیل شما به یکی از همکاران ارسال می‌کند تا آنها را برای تماس بعدی آماده کند، سپس یک نامه خوشامدگویی به مشتری جدید ارسال می‌کند و به مدیر هشدار می‌دهد که این اتفاق افتاده است.

Semantic Kernel همچنین حاوی ابزارهای مفید زیادی است. جدا از انتزاع خدمات و مدل‌های اساسی و اجازه به شما برای ایجاد گردش‌های کاری پیچیده با ایجاد کتابخانه‌هایی از توابع بومی و معنایی، گروه‌بندی آن‌ها به مهارت‌ها، نمایش آنها به عنوان افزونه‌ها، و ایجاد و اجرای خطوط لوله موقت، SK می‌تواند به شما کمک کند. بسیاری از کارهای پیش پا افتاده ای که باید هنگام کدنویسی در برابر LLM ها انجام دهید. برای مثال، مدل‌ها در واقع متن را دریافت نمی‌کنند. آنها با چیزی به نام نشانه ها کار می کنند که بیت های کلمات هستند. تبدیل متن به توکن، توکن سازی نامیده می شود و اغلب توسط مدل های تخصصی انجام می شود که SK می تواند به شما کمک کند. SK همچنین می‌تواند به شما کمک کند تعداد توکن‌هایی را که می‌توانید در یک زمان به یک مدل تغذیه کنید را پیگیری کنید و به شما کمک کند متن بزرگ را به دسته‌های کوچک‌تری از نشانه‌ها به روشی مؤثر تقسیم کنید.

اگرچه ممکن است ساده به نظر برسد، تصمیم گیری در مورد اینکه کجا متن را تقسیم کنید همیشه آسان نیست. شاید بتوانید آن را در شکست پاراگراف، شاید در شکستن جمله تقسیم کنید. و خوب است که مقداری همپوشانی بین دسته ها وجود داشته باشد تا تمام زمینه از بین نرود. این کد خسته کننده و مستعد خطا است که هزاران بار نوشته شده است. ابزارهایی مانند توکن سازها و تقسیم‌کننده‌های متن موجود در SK می‌توانند این کارها را نسبتاً بدون دردسر کنند. البته، توکن‌ایزرها و تقسیم‌کننده‌های متن‌باز بسیاری، بسیار زیاد وجود دارد و شما همیشه می‌توانید خودتان را رول کنید، اما خرید یک مرحله‌ای بسیار خوب است و از آنجایی که آنها به روشی عمومی مدیریت می‌شوند، تعویض آنها آسان‌تر خواهد بود. در صورت نیاز و در صورت نیاز، از خط خارج شوید.

و هدف سوم SK؟ یکپارچه سازی محتوای خود تصور کنید بخش منابع انسانی شما دارای انبوهی از اسناد PDF است و فکر می‌کنید که کارمندان شما ممکن است بخواهند در مورد این مواد سوالاتی از HR Copilot داخلی شما بپرسند. این یک مکان عالی برای استفاده از الگوی RAG برای تزریق مقداری دانش به اعلان برای زمین‌بندی پاسخ‌های تولید شده است. اما شما نمی توانید همه آنها را به درخواست تزریق کنید زیرا اطلاعات بسیار زیادی وجود دارد. چگونه یک دسته از اسناد PDF را پرس و جو می کنید؟ شما باید آنها را به روشی پیچیده و به زبان طبیعی جستجو کنید، اما هیچ آموزشی LLM بر روی داده‌های منابع انسانی شما آموزش دیده نیست و احتمالاً نمی‌خواهید صرفاً برای این کار، زمان و هزینه‌های آموزش یکی را صرف کنید.

اینجاست که تعبیه ها وارد عمل می شوند. جاسازی ها نمایش برداری از کلماتی هستند که می توانند در پایگاه داده های برداری ذخیره شوند، شبیه به مواردی که برای ایجاد LLM استفاده می شود، و به شما امکان می دهد جستجوهای پیچیده و زبان طبیعی را انجام دهید. اگر داده های زیادی برای جذب وجود نداشته باشد (SK شامل یک پایگاه داده برداری در حافظه است) یا در یک ابر میزبانی شود، یا می توانید به صورت محلی میزبانی کنید، پایگاه داده برداری می تواند در حافظه باشد. هنگامی که پیاده‌سازی پایگاه داده برداری را انتخاب کردید، می‌توانید از کد نمونه ارائه شده توسط SK برای وارد کردن همه آن PDFها در پایگاه داده برداری استفاده کنید. نمونه فقط متن را از PDF استخراج می کند، آن را نشانه گذاری می کند و به عنوان بردار اعداد صحیح در پایگاه داده قرار می دهد. هنگامی که متوجه شدید که کاربر یک سوال HR پرسیده است، می توانید از سوال زبان طبیعی او برای جستجو در پایگاه داده استفاده کنید. پایگاه داده سؤال را نشانه گذاری می کند، نشانه ها را به بردارهای اعداد صحیح تبدیل می کند و از الگوریتم های پیشرفته برای یافتن نتایجی استفاده می کند که از نظر ریاضی به سؤال نزدیک ترین هستند. سپس می توانید نتایج X برتر را بگیرید و آنها را به درخواست خود وارد کنید. الگوی RAG دوباره ضربه می زند. SK این نوع از حافظه های محتوای بازیابی شده را می نامد و اگرچه همه حافظه ها به یک پایگاه داده برداری نیاز ندارند، اما به نظر می رسد که این حافظه ها مفیدترین نوع باشند. اگر نمی‌خواهید همه این کارها را خودتان انجام دهید، ممکن است از جستجوی شناختی Azure استفاده کنید. Azure Cognitive Search اساساً یک پایگاه داده برداری بر روی استروئیدها است که می توانید با استفاده از تماس های REST با آن تعامل داشته باشید و شامل ابزارهایی مانند برنامه ای است که مجموعه ای از فایل های PDF را جذب می کند.

نتیجه

Semantic Kernel می‌تواند برای انتزاع کدهای سطح پایین هوش مصنوعی، ایجاد کتابخانه‌هایی از مهارت‌های مفید که می‌توانند به روشی عمومی کشف و استفاده شوند، ساخت و اجرای گردش‌های کاری پیچیده، ادغام با سیستم‌ها و محتوای محلی، و کمک به توسعه‌دهندگان با کارهای روزمره اما مهم مفید باشد. وظایفی مانند تقسیم متن و نشانه گذاری. SK شبیه LangChain است اما توسط مایکروسافت ایجاد شده است و ویژگی های LangChain را در اختیار توسعه دهندگان دات نت قرار می دهد. اگرچه ممکن است برای کارهای ساده هوش مصنوعی بیش از حد باشد، اما امکان توسعه سریع سناریوهای پیچیده تر را فراهم می کند. Semantic Kernel هنوز تا زمان نگارش این مقاله در پیش نمایش است و بسیار بسیار سریع در حال تکامل است. هر پروژه ای از SK سود نمی برد، اما این یک SDK واقعاً قدرتمند است و ارزش کنجکاوی شما را دارد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *