معرفی
یکی از بهترین فریمورکهای (frameworks) موجود برای توسعهدهندگانی که میخواهند اپلیکیشنهایی با قابلیتهای LLM (مدل زبانی بزرگ یا large language model) طراحی کنند، لنگچین (LangChain) است. لنگچین سازماندهی حجم عظیمی از دادهها را آسانتر میکند تا LLMها بتوانند بهسرعت به آنها دسترسی داشته باشند و مدلهای LLM را قادر میسازد تا بر اساس جدیدترین دادههایی که بهصورت آنلاین در دسترس هستند، پاسخ دهند.
به این صورت است که توسعهدهندگان میتوانند برنامههای کاربردی پویا و پاسخگو بر اساس دادهها را با LangChain ایجاد کنند. تاکنون، توسعهدهندگان توانستهاند چندین ربات چت هوش مصنوعی، سیستمهای پاسخدهی به پرسش (generative question-answering یا GQA) و ابزارهای آنی زبان را به لطف پلتفرم متنباز (open-soutce)، تولید کنند.
هم رویش منتشر کرده است:
شیرجه به دنیای لنگچین Langchain — ساخت ChatBot PDF
لنگچین (LangChain) چگونه کار میکند؟
با کمک فریمورک متنباز لنگچین (LangChain)، توسعهدهندگان میتوانند برنامههایی را طراحی کنند که از مدلهای زبانی بزرگ (LLM) استفاده میکنند. LangChain اساساً یک ابزار ارکستراتور پرامپت (prompt orchestration tool) است که ایجاد ارتباط مشارکتی تیمها را در پرامپتهای مختلف تسهیل میکند.
اگرچه LangChain بهعنوان یک ابتکار متنباز شروع به کار کرد، اما بهسرعت هریسون چیس (Harrison Chase)، مدیرعامل آن شد، پروژه رشد کرد و سپس به یک شرکت تبدیل شد.
حالتی که LLMها (مانند GPT3 یا GPT4) یک درخواست (یا پرامپت) را تکمیل میکنند، مانند دریافت پاسخ کامل برای یک درخواست است. بهعنوانمثال، میتوانید به LLM دستور دهید که «مجسمهای بسازد» و البته طرحی که دریافت میکنید با درخواستتان مطابقت خواهد داشت. دستورالعملهای پیچیدهتر، مانند “ایجاد مجسمهای از سمندر مکزیکی (Axolotl که نوعی ماهی است) در کف دریاچه” نیز برای مدل زبانی بزرگ قابلقبول است. LLM احتمالاً آنچه را که درخواست کردهاید به شما میدهد.
اما اگر سؤال شما این باشد چه:
“راهنمای قدمبهقدم تراشیدن مجسمه سمندر مکزیکی از چوب”
شما میتوانید از LLM برای تولید مرحله بعدی در هر نقطه استفاده و از نتایج مرحله قبل بهعنوان زمینه آن استفاده کنید تا از الزام کاربر برای دادن اطلاعات صریح هر مرحله و انتخاب ترتیب اجرا اجتناب کنید.
این عمل میتواند توسط فریمورک LangChain انجام شود. این فریمورک مجموعهای از نشانهها را برای رسیدن به نتیجه موردنظر تنظیم میکند که به توسعهدهندگان یک رابط کاربری آسان برای برقراری ارتباط با LLMها را میدهد. از این نظر، لنگچین (LangChain) به طور مشابه با یک reductionist wrapper برای استفاده از LLM عمل میکند.
هم رویش منتشر کرده است:
آموزش ساخت ChatGPT و DALL-E با پایتون و OpenAI API
زبان بیان LangChain چیست؟
یک زبان اعلانی به نام LangChain Expression Language (LCEL)، پیوستن به زنجیرهها (chains) را برای توسعهدهندگان ساده میکند. این زبان اعلانی از ابتدا طراحی شده است تا تبدیل نمونههای اولیه به محصول را بدون تغییر کد آسانتر کند.
برخی از مزایای LCEL به شرح زیر است:
- زمانی که از LCEL برای تولید زنجیرههای (chains) خود استفاده میکنید، بهترین زمان ممکن (مدت زمانی که طول میکشد تا اولین قطعه خروجی ظاهر شود) را دریافت میکنید. این بدان معناست که برای برخی از زنجیرهها، ما توکنها را مستقیماً از یک LLM بر روی یک پارسر (parser) خروجی، استریم میکنیم؛ و البته که بخشهای خروجی تجزیه شده را با همان سرعت ارائهدهنده LLM دریافت میکنیم.
- هر زنجیره ایجاد شده با LCEL را میتوان از طریق asynchronous API (مانند سرور LangServe) یا synchronous API (مانند یک نوتبوک آزمایشی Jupyter) فراخوانی کرد که سرعت و انعطافپذیری زیادی را برای رسیدگی به چندین درخواست همزمان در یک سرور یکسان، در هنگام استفاده از کدهای مشابه برای نمونههای اولیه یا نهایی را به ارمغان میآورد.
- این امکان برای یک دانشمند داده یا پزشک وجود دارد که مراحل زنجیره LCEL را همزمان انجام دهد. هر زنجیرهای که با استفاده از LCEL ایجاد شود میتواند بهسرعت توسط LangServe گسترش یابد.
چرا باید از لنگچین استفاده کنید؟
LLMها حتی زمانی که فقط با یک پرامپت نیز استفاده میشود، بسیار قدرتمند هستند. اما با فرض و حدس محتملترین کلمات، به عبارتی تکمیل میشوند. LLMها مکث نمیکنند تا به اعمال یا پاسخهای خود مانند انسانها فکر کنند. بههرحال این چیزی است که ما دوست داریم فکر کنیم.
این فرایند نتیجهگیری جدید از دادههای بهدستآمده قبل از عمل ارتباطی، بهعنوان استدلال (reasoning) شناخته میشود. ما فرایند ساخت مجسمه سمندر مکزیکی را بهعنوان مجموعهای از اقدامات کوچک میبینیم که بر کارهای بزرگتر تأثیر میگذارند، نه بهعنوان یک فعالیت واحد و بدون وقفه.
با فریمورک لنگچین، برنامهنویسان ممکن است کارگزارهایی (agents) را طراحی کنند که میتوانند وظایف بزرگتر را به وظایف کوچکتر تجزیه و درباره آنها استدلال کنند. با LangChain، میتوانید از مراحل میانی برای دادن متن و حافظه برای تکمیلکردن، با متصلکردن دستورالعملهای پیچیده استفاده کنید.
چرا صنعت انقدر شیفته LangChain شده است؟
نکته جالب در مورد LangChain این است که تیمها را قادر میسازد تا محتوا و حافظهای را به LLMهای موجود و از قبل ایجاد شده اضافه کنند. آنها میتوانند با افزودن مصنوعی “استدلال”، کارهای دشوارتر را با دقت و صراحت بیشتر انجام دهند.
ازآنجاکه لنگچین جایگزینی برای کشیدن و رهاکردن (dragging and dropping) قطعات یا استفاده از کد برای ایجاد رابط کاربری ارائه میدهد، توسعهدهندگان در مورد این پلتفرم مشتاق هستند. کاربران ممکن است فقط آنچه را که نیاز دارند، بخواهند.
نحوه عملکرد لنگچین چگونه است؟
Hugging Face، GPT3، Jurassic-1 Jumbo و دیگر مدلهای زبان تنها تعدادی محدود از مدلهای زبانی هستند که LangChain پشتیبانی میکند. لنگچین با پایتون (Python) و جاواسکریپت (JavaScript) نوشته شده است.
برای استفاده از LangChain ابتدا باید یک مدل زبان ایجاد شود که این کار مستلزم ساخت مدل خود و یا استفاده از یک مدل زبانی قابلدسترس مانند GPT3 است.
پس از اتمام، میتوانید از LangChain برای ایجاد برنامهها استفاده کنید. انواع ابزارها و APIهای ارائه شده توسط LangChain اتصال مدلهای زبان به منابع داده خارجی، تعامل با محیط آنها و ایجاد برنامههای کاربردی و پیچیده را آسان میسازند.
لنگچین این کار را با اتصال یک سری عناصر به نام لینک (links) برای تشکیل یک فرایند انجام میدهد. هر لینک در زنجیره عملکرد خاصی را انجام میدهد، برای مثال:
- قالببندی دادههای ارائه شده توسط کاربر (user-provided data)
- استفاده از منبع داده (data source)
- ارجاع به مدل زبان
- مدیریت خروجی مدل زبان
لینکهای یک زنجیره بهصورت متوالی به هم متصل میشوند و خروجی هر لینک بهعنوان ورودی لینک بعدی عمل میکند. عملیاتهای کوچک را میتوان برای انجام عملیاتهای بزرگتر و پیچیدهتر به هم متصل کرد.
بلوکهای اصلی و سازنده لنگچین چه چیزهایی هستند؟
LLMs
مدلهای زبانی بزرگ (LLM) که بر روی مجموعهدادههای متنی و کد عظیم آموزش داده شدهاند، طبیعتاً توسط LangChain موردنیاز هستند. در میان چیزهای دیگر، میتوانید از آنها برای ایجاد محتوا، ترجمه بین زبانها و پاسخ به سؤالات استفاده کنید.
Prompt templates
برای قالببندی ورودی کاربر بهگونهای که مدل زبان بتواند آن را درک کند، از Prompt templates استفاده میشود. Prompt templates میتوانند برای توضیح عملیاتی که مدل زبانی قرار است انجام دهد یا برای تنظیم صفحه و چگونگی ورودی کاربر استفاده شوند. برای مثال، Prompt templat یک ربات چت ممکن است حاوی نام و درخواست (query) کاربر باشد.
Indexes
پایگاههای دادهای که بهعنوان indexes شناخته میشوند شامل جزئیات مجموعه آموزشی (training set) LLM هستند. متن، اتصالات و اطلاعات اسناد (داکیومنتها) همگی میتوانند در این دادهها گنجانده شوند.
Retrievers
الگوریتمهایی که بهعنوان retrievers شناخته میشوند، فهرستی را برای اطلاعات خاص جستجو میکنند. از این الگوریتمها میتوان برای یافتن اسنادی که بیشترین شباهت به یک فایل داده شده یا اسناد مربوط به درخواست کاربر را دارند، استفاده کرد. retrieverها برای بهبود دقت و سرعت پاسخهای LLM ضروری هستند.
Output parsers
قالببندی پاسخهایی که پارسرهای خروجی (output parsers) LLM تولید میکنند، مسئولیت خودشان است. این پارسرها میتوانند اطلاعات بیشتری اضافه کنند، ساختار پاسخ را تغییر دهند، یا هر محتوای ناخواستهای را حذف کنند. برای اطمینان از اینکه پاسخهای LLM قابلدرک و پیادهسازی هستند، پارسرهای خروجی ضروری هستند.
Vector Store
نمایشهای ریاضی کلمات و عبارات در یک vector storage نگهداری میشوند که برای وظایفی مانند جمعبندی و پاسخگویی به سؤالات به درد میخورند. بهعنوانمثال، تمام کلماتی که شبیه کلمه “cat” هستند را میتوان با استفاده از یک پایگاهداده vector پیدا کرد.
Agents
برنامههایی که بهعنوان agents شناخته میشوند، این توانایی را دارند که کارهای بزرگ را به بخشهای کوچکتر و قابلمدیریتتر تقسیم کنند. از یک agent میتوان برای کنترل جریان زنجیره استفاده و انتخاب کرد که کدام وظایف تکمیل شوند. بهعنوانمثال، میتواند تعیین کرد که آیا سؤال کاربر توسط یک متخصص انسانی بهتر ارائه میشود و یا یک مدل زبانی.
مزایای استفاده از LangChain
مقیاسپذیری: برنامههای ساخته شده با لنگچین میتوانند حجم عظیمی از دادهها را مدیریت کنند.
تطبیقپذیری: تطبیقپذیری این فریمورک امکان توسعه طیف وسیعی از برنامههای کاربردی مانند سیستمهای پاسخگویی به پرسش و چتباتها را فراهم میکند.
توسعهپذیری: توسعهپذیری فریمورک به توسعهدهندگان اجازه میدهد تا ویژگیها و عملکردهای خود را ترکیب کنند.
استفاده ساده: لنگچین یک API سطح بالا برای ادغام مدلهای زبانی با طیف وسیعی از منابع داده و ایجاد برنامههای پیچیده ارائه میدهد.
متنباز بودن: لنگچین یک فریمورک رایگان و در دسترس است که میتواند بهراحتی مورداستفاده قرار گیرد و همچنین میتوان آن را تغییر نیز داد.
انجمن (کامیونیتی) فعال: شما میتوانید از یک جامعه بزرگ، پر جنبوجوش و فعال از توسعهدهندگان و کاربران لنگچین کمک دریافت کنید.
مستندسازی عالی: مستندات (داکیومنتهای) واضح و جامع.
یکپارچهسازی: Flask و TensorFlow تنها دو نمونه از کتابخانهها و فریمورکهایی هستند که LangChain را میتوان با آنها ادغام کرد.
چگونه استفاده از لنگچین را شروع کنیم؟
کد منبع (source code) لنگچین را در GitHub میتوان پیدا کرد که برای دانلود و نصب در رایانه شما در دسترس است.
LangChain را میتوان بهراحتی بر روی پلتفرمهای ابری نیز نصب کرد؛ زیرا بهعنوان یک image Docker نیز در دسترس است.
همچنین میتوان آن را با استفاده از دستور pip در پایتون نیز نصب کرد.
از دستور مقابل برای نصب همه الزامات لنگچین استفاده کنید: pip install langchain[all]
حالا شما برای شروع تلاشهایتان در این مبحث آماده هستید!
در یک دایرکتوری (directory) تازه ایجاد شده دستور مقابل را اجرا کنید: initial langchain
مرحله بعدی ایمپورت (import) کردن ماژولهای (modules) لازم و ایجاد یک زنجیره – مجموعهای از لینکها که هر یک هدف خاصی را انجام میدهند – با متصلکردن آنها به یکدیگر است.
یک نمونه از کلاس Chain ایجاد کنید، سپس لینکها را به آن اضافه کنید تا یک زنجیره تشکیل شود. این نمونه زنجیرهای ایجاد میکند که یک مدل زبانی را فراخوانی و سپس پاسخ آن را دریافت میکند: پاسخی که زنجیرهای است که توسط
(“Chain().add_link(Link(model=”openai”, prompt=”Make a sculpture of an axolotl
بازگردانده (returned) شده است.
سپس از run() بر روی شیء (object) chain استفاده کنید تا یک زنجیره جدید را شروع کنید.
نتیجه لینک نهایی در یک زنجیره، خروجی آن خواهد بود. در نهایت از تابع (function)
get_output()
بر روی شیء chain، برای بهدستآوردن خروجی زنجیره استفاده کنید.
با استفاده از لنگچین، چه برنامهها و اپلیکیشنهایی را میتوان طراحی کرد؟
محتوای فشرده
برای ساختن سیستمهای خلاصهسازی که میتوانند خلاصهای از پستهای وبلاگ، داستانهای خبری و دیگر انواع متن را تولید کنند، LangChain مفید است. تولیدکنندههای محتوایی که متن جذاب و مفیدی را تولید میکنند، یکی دیگر از موارد استفاده لنگچین است.
چتباتها
طبیعتاً، یکی از بهترین برنامهها و استفادههای کاربردی برای LangChain در چتباتها یا هر سیستم دیگری است که میتواند به سؤالات پاسخ دهد. این سیستمها ظرفیت بازیابی و مدیریت دادهها از منابع مختلف از جمله اینترنت، پایگاههای داده و APIها را خواهند داشت. این چتباتها میتوانند به سؤالات پاسخ دهند، به کاربران کمک کنند و مطالب اورجینال (که خودشان تولید کردهاند) را در قالب ایمیل، نامه، فیلمنامه، شعر، کد و موارد دیگر تولید کنند.
نرمافزار تجزیهوتحلیل دادهها
ابزارهای تجزیهوتحلیل دادهها که به افراد کمک میکنند ارتباطات بین دادههای مختلف را درک کنند نیز میتوانند با نرمافزار تجزیهوتحلیل دادهها ساخته شوند.
نتیجه
در حال حاضر، برنامههای مبتنی بر LLMها (مخصوصاً ChatGPT) که گاهی اوقات بهعنوان “chat interfaces” نیز شناخته میشوند، موارد اصلی استفاده لنگچین هستند. مدیرعامل این شرکت، هریسون چیس (Harrison Chase)، در مصاحبه اخیر خود اظهار داشت که بهترین مورد استفاده در حال حاضر “chat over your documents” است. برای بهبود تجربه مکالمه برای برنامهها، LangChain ویژگیهای بیشتری مانند استریم (streaming) را نیز ارائه میکند که مستلزم ارائه توکن خروجی LLM است.
در نهایت شما میتوانید با مراجعه به مجله همرویش، به طور جامعتر و تخصصیتر به یادگیری خود در این زمینه ادامه دهید.
کلیدواژگان
لنگچین | لنگ چین | لنگچین | لنگچین چیست؟ | ویژگیهای لنگچین | LangChain | what is LangChain | قابلیتهای لنگچین | کاربردهای لنگچین | LangChain Features | مزایای استفاده از LangChain | مزایای استفاده از لنگچین | مزایای لنگچین | مزایای LangChain | ویژگی های لنگچین