1. مقدمه
من در حال نوشتن یک سری وبلاگ در مورد عملکرد مدلهای زبان بزرگ، آموزش ChatGPT، کار کردن با Transformers بودهام و تمام یادداشتهایم را میتوان در مقالات زیر پیدا کرد:
۱) ChatGPT چیست؟
https://ali-rouhanifar.blogsky.com/1403/08/18/post-62/ChatGPT-چیست؟
۲) ChatGPT - قسمت 2
https://concepts-define.blogsky.com/1403/08/19/post-35/ChatGPT-قسمت-۲
۳) ChatGPT - قسمت ۳
https://concepts-define.blogsky.com/1403/08/19/post-36/ChatGPT-قسمت-۳
۴) ChatGPT - قسمت 4
https://concepts-define.blogsky.com/1403/08/19/post-37/ChatGPT-قسمت-۴
۵) اصول اساسی یادگیری عمیق
https://concepts-define.blogsky.com/1403/08/11/post-30/اصول-اساسی-یادگیری-عمیق
۶) تکامل مدلهای زبان
https://ali-rouhanifar.blogsky.com/1403/08/18/post-63/تکامل-مدل%e2%80%8cهای-زبانی
۷) Self-Attention در معماری شبکه عصبی ترانسفورمر
https://ali-rouhanifar.blogsky.com/1403/08/19/post-64/Self-Attention-در-معماری-شبکه-عصبی-ترانسفورمر
این وبلاگ درباره LangChain است که چارچوبی برای توسعه برنامههای کاربردی با مدلهای زبان بزرگ است. این مقاله به شرح زیر تنظیم شده است:
· در بخش 2، من به طور رسمی مسئله را تعریف میکنم - با تاکید بر اینکه چرا LangChain مهم است، بخش به پس زمینه LangChain میرویم.
· بخش 3 به جزئیات اجزای ضروری تشکیل دهنده LangChain میپردازیم.
· بخش 4 در مورد برنامههای کاربردی / موارد استفاده از LangChain صحبت میکنیم.
· بخش 5 به موارد استفاده شامل پرسش-پاسخ بر روی اسناد با استفاده از LangChain میرود و قطعه کد را ارائه میدهیم.
· بخش 6 در مورد مفهوم Agents در LangChain صحبت میکنیم.
· بخش 7 2 مقاله تحقیقاتی بسیار جالب را در مورد: پردازش زنجیرهای فکر و واکنش: هم افزایی استدلال و عمل در مدلهای زبانی مورد بحث قرار میدهیم.
· بخش 8 بحثهای بخش را خلاصه میکنیم.
2. تعریف مسئله
قبل از شروع صحبت در مورد LangChain، اجازه دهید ابتدا مسئله را که در حال حل آن هستیم تعریف کنیم.
به عنوان کاربر نهایی یک مدل زبان بزرگ مانند ChatGPT، ما معمولاً از طریق مرورگر خود یا از طریق API به آن دسترسی داریم. با این حال، با استفاده از API یا با اتصال از طریق مرورگر خود، فقط به دادههای آموزشی که LLM روی آنها آموزش دیده است وصل میشوید - یعنی:
۱. شما به دنیای خارج از دادههای آموزشی متصل نیستید،
۲. شما به دادههای خود یعنی اسناد خود متصل نیستید - نمیتوانید ChatGPT را از دادههای خود یا اسناد شخصی یا اسناد تجاری خود پاسخ دهید،
۳. شما نمیتوانید سوالات مربوط به محاسبات علمی را بپرسید.
۴. علاوه بر این، اگر در مورد ChatGPT صحبت کنیم، دادههای آموزشی آن شامل دادههای تا سپتامبر 2021 است، پس از سپتامبر 2021 هیچ شناختی از جهان ندارد.
شکل: دسترسی به ChatGPT
LangChain وارد میشود. LangChain (که میتوانید با نصب ساده پیپ نصب کنید) مدل هوش مصنوعی شما (ChatGPT یا HuggingFace یا cohere و غیره) را به منابع خارجی متصل میکند و میتوانید اطلاعات را از منابع بیرونی درست مانند آنچه انجام میدهید از طریق ChatGPT با استفاده از مرورگر خود استخراج کنید.
تعریف LangChain
تعریف رسمی LangChain:
LangChain چارچوبی برای توسعه برنامههای کاربردی است که توسط مدلهای زبانی طراحی شده است. LangChain بخشهای پیچیده کار و ساخت با مدلهای هوش مصنوعی را آسانتر میکند. انجام این کار به دو صورت کمک میکند:
۱. یکپارچهسازی: دادههای خارجی مانند فایلهای دیگر برنامهها و غیره را به LLM خود بیاورید.
۲. عوامل: که به LLM اجازه میدهد تا از طریق استدلال و عمل با محیط خود تعامل داشته باشد (ReAct). در اینجا، ما از LLM ها برای تصمیمگیری در مورد اقدام بعدی (به «دلیل[1]») استفاده میکنیم.
پس زمینه LangChain:
LangChain در اکتبر 2022 به عنوان یک پروژه منبع باز توسط هریسون چیس راه اندازی شد، در حالی که در یک استارتاپ یادگیری ماشینی Robust Intelligence کار میکرد. این پروژه با بهبود صدها مشارکت کننده در GitHub، بحث در توییتر، بسیاری از آموزشهای یوتیوب، وبلاگهای متوسط و جلسات در سانفرانسیسکو و لندن به سرعت محبوبیت یافت./ در آوریل 2023، استارت آپ جدید بیش از 20 میلیون دلار سرمایه جذب کرد و موارد دیگر هنوز در راه است.
https://en.wikipedia.org/wiki/LangChain
GitHub: https://github.com/hwchase17/langchain
ادغامهای بیشتر و بیشتری از طریق LangChain معرفی میشوند و بسیار محبوب هستند.
چرا LangChain؟
1. اجزاء
LangChain از چندین ابزار تشکیل شده است که کار با مدلهای زبانی بزرگ را بسیار آسان میکند - LLM میتواند ChatGPT، Hugging Face LLM و غیره باشد. این اجزا عبارتند از:
شکل: اجزای LangChain
این مؤلفهها در بخش 3 مورد بحث قرار میگیرند.
2. زنجیرههای سفارشی:
LangChain پشتیبانی خارج از جعبه را برای استفاده از "زنجیرههای سفارشی[2]" فراهم میکند – مجموعهای از اقدامات در کنار هم. بخش 3.2 را ببینید
3. سرعت:
از نظر کیفی، دلیل محبوبیت LangChain به دلیل سرعت آن است – ویژگیهای جدید، ادغامها روزانه اضافه میشوند و مهم است که آخرین شعبه را داشته باشید.
4. حمایت قوی جامعه:
ملاقات با یو پی اس، وبینارها، یوتیوب، وبلاگهای متوسط.
3. اجزای LangChain
اجازه دهید درک مقدماتی از اجزای LangChain همانطور که در بالا ذکر شد داشته باشیم. اجزای LangChain شامل موارد زیر است:
· مدل
· فوری
· بارگذارهای اسناد و ابزارهای آنها
· حافظه
· زنجیر
· عوامل
اجازه دهید در مورد موارد فوق با جزئیات کمی صحبت کنیم:
3.1 بارگذارهای سند و ابزارهای کمکی:
بارگذارهای سند برای بارگیری دادهها از منبعی به عنوان Document استفاده میشوند - که در زبان LangChain یک قطعه متن و ابرداده مرتبط است. LangChain از بارگذارهای سند زیر پشتیبانی میکند:
· HTML
· CSV
· Markdown
· JSON
همراه با بارگذارهای سند، ابزارهای زیر را در LangChain ارائه کنید:
تقسیم کنندههای متن:
در بسیاری از مواقع، سند ممکن است برای LLM خیلی طولانی باشد (مانند یک کتاب)، سپس لازم است سند را به قطعات تقسیم کنید. تقسیمکنندههای متن به این امر کمک میکنند. متداولترین نوع تقسیمکنندههای متن، RecursiveCharacterTextSplitters هستند - تقسیمکنندههای متن متفاوتی بسته به مورد استفاده و مستندات در اینجا موجود است:
https://js.langchain.com/docs/modules/indexes/text_splitters/
پارامترهای مهمی که در اینجا باید بدانید chunkSize و chunkOverlap هستند. chunkSize حداکثر اندازه (از نظر تعداد کاراکترها) اسناد نهایی را کنترل میکند.
chunkOverlap مشخص میکند که چه مقدار همپوشانی بین تکهها باید وجود داشته باشد. این اغلب برای اطمینان از اینکه متن به طور عجیبی تقسیم نشده است مفید است.
Retrieverها:
در این موارد باید تاکید کرد که اسناد به صورت تکهای و هر تکه به تعبیه تبدیل شده و در یک بردار ذخیره میشوند. Retrieverها، درخواست را دریافت کنید، آن را به تعبیه و تبدیل میکند.
Retrieverها اسناد را با مدلهای زبان ترکیب میکنند. انواع مختلفی از Retrieverها وجود دارد، اما رایجترین آنها Retriver ذخیرهسازی برداری است. به طور گستردهای پشتیبانی میشود و به جستجوی شباهت با تعبیهها کمک میکند. Retrieverها کمک میکنند تا اسناد مربوطه را به اعلان برسانند، آنها را به تعبیه تبدیل کنند و سپس برای یافتن اسناد مشابه به انبار برداری میروند و سپس با استفاده از اعلان و زمینه ارائه شده از طریق retrieverها پاسخ را منتقل میکنند.
بیشتر در بخش 5 مورد بحث قرار گرفته است.
Vector Stores:
در بالا به طور خلاصه در مورد فروشگاه وکتور صحبت کردیم. Vector Stores پایگاه دادهای برای ذخیره بردارها هستند. محبوبترین آنها عبارتند از:
· https://www.pinecone.io/Weaveite
Vector Store را میتوان به عنوان جدولی با تعبیهها و متادادهها در نظر گرفت - آنها تعبیهها را همراه با ابردادههای مرتبط ذخیره میکنند و آنها را به راحتی قابل جستجو میکنند.
مثال:
ذخیره دادهها در VectorStore
اسناد بازیابی OpenAI شامل جزئیات پایگاه های داده برداری در اینجا است
https://github.com/openai/chatgpt-retrieval-plugin#choosing-a-vector-database
۳.۲ زنجیرهها
زنجیرهها به ترکیب تماسها و اقدامات مختلف LLM به طور خودکار کمک میکنند. یعنی: شما یک prompt به مدل زبان میدهید و خروجی آن prompt را میخواهید به عنوان ورودی برای یک تماس دیگر و غیره استفاده کنید.
برخی از زنجیرههای LangChain عبارتند از:
· زنجیره متوالی ساده
· زنجیره خلاصهسازی
در اینجا مثالی از زنجیره متوالی ساده آورده شده است:
مثالی از یک زنجیره متوالی ساده در LangChain
زنجیره خلاصهسازی:
اسناد طولانی و متعدد را به راحتی اجرا کنید و خلاصهای را دریافت کنید.
۳.۳ حافظه
حافظه را میتوان بهعنوان به خاطر سپردن اطلاعاتی در نظر گرفت که فرد در گذشته درباره آن صحبت کرده است. اغلب برای ساخت رباتهای چت استفاده میشود. در اینجا مثالی از نحوه استفاده از تاریخچه حافظه/چت آورده شده است:
مثال:
مفهوم حافظه برای ساخت چت بات با LangChain
4. کاربردها / موارد استفاده و ادغام LLMها با LangChain
موارد کاربرد/استفاده از چنین ابزاری بیپایان است. اینها میتواند باشد:
1. پرسش-پاسخ – پرسش-پاسخ بر روی دادههای سند شما
2. پرسش و پاسخ جدولی – دادههای زیادی در دادههای جدولی ذخیره میشوند، چه csvها، صفحات اکسل یا جداول SQL.
3. خلاصهسازی مدارک
4. ساخت رباتهای چت خود که توسط یک LLM طراحی شده است.
5. اتصال به اینترنت / جستجو / محاسبات علمی
ادغام: LLMs
https://js.langchain.com/docs/modules/models/llms/integrations#replicate
LangChain تعدادی ادغام LLM را ارائه میدهد. اینها هستند:
· OpenAI
· Azure OpenAI
· Cohere
· HuggingFace LLMs
· ..........
5. پاسخ به سؤال بر روی اسناد
پرسش-پاسخ در مورد اسناد خود از طریق راهنماهای کاربری زیر LangChain مورد بحث قرار گرفته است:
https://docs.langchain.com/docs/use-cases/qa-docs
در زیر برخی از روشهایی وجود دارد که با استفاده از آنها میتوان به سوالات خود پاسخ داد:
الف) با استفاده از load_qa_chain
load_qa_chain زنجیرهای را بارگذاری میکند که میتوانید پرسش و پاسخ را روی اسناد خود انجام دهید. از تمام متن موجود در اسناد استفاده میکند.
روندی که در حال وقوع است در زیر نشان داده شده است:
شکل: پرسش-پاسخ بر روی اسناد خود با استفاده از load_qa_chain از LangChain
load_qa_chain در واقع کل اعلان را در متنی قرار میدهد که به LLM دستور میدهد تا از اطلاعات موجود در زمینه ارائه شده استفاده کند. درخواست ارسال شده به OpenAI چیزی شبیه به این است.
{context} //pdf of the document
Question: {query} – the actual query
این روش زمانی خوب است که ما فقط مقدار کمی اطلاعات برای ارسال در زمینه داشته باشیم. اکثر LLMها محدودیتی در میزان اطلاعاتی که میتوانند در یک درخواست ارسال شوند دارند.
شکل: مثال - سوال - پاسخ دادن به اسناد خود با استفاده از LangChain - گرفتن کل سند به عنوان زمینه
ب) استفاده از تعبیهها
بعد، کاری که ما انجام می دهیم این است:
۱. pdf را به شی Document LangChain تبدیل کنید.
۲. سند را به قطعات تقسیم کنید.
۳. تبدیل به تعبیه.
۴. آن را در یک پایگاه داده برداری ذخیره کنید.
۵. و سپس از Retriever استفاده کنید که دستور را به یک تعبیه تبدیل میکند و سپس از جستجوی شباهت برای بازیابی سند (از همه تکهها) نزدیکترین درخواست از فروشگاه برداری استفاده میکند و سپس از آن قطعه به عنوان زمینه برای LLM برای پاسخ به سؤال مطابق با اعلان استفاده میکند.
شکل: پرسش-پاسخ LangChain بر روی اسناد با استفاده از Embeddings
6. عاملها در LangChain و چارچوب ReAct
بیایید سعی کنیم و درک کنیم که "عاملٰها" در زبان چیست - همانطور که در بخش مقدماتی توضیح داده شد، LangChain در وسط بین LLM و ابزارهای خارجی قرار دارد. عاملها را میتوان "رباتهایی" دانست که از طرف شما اقدام میکنند. آنها قصد دارند اقدامات مختلفی را در LangChain با هم زنجیره کنند.
تعریف رسمی عاملها:
عاملها از یک LLM برای تعیین اینکه کدام اقدام و به چه ترتیبی انجام دهند استفاده میکنند. یک عمل میتواند این باشد: استفاده از یک ابزار و مشاهده خروجی آن یا بازگرداندن مستقیم آن به کاربر – اگر خروجی مشاهده شده پاسخی باشد که LLM فکر میکند صحیح است.
پارامترها هنگام ایجاد یک عامل:
هنگام ایجاد یک عامل پارامترهای زیر مورد نیاز است:
· ابزار: ابزار عملکردی است که وظیفه خاصی را انجام میدهد. این میتواند جستجوی گوگل، جستجوی پایگاه داده، زنجیرههای دیگر باشد. رابط یک ابزار در حال حاضر تابعی است که انتظار میرود یک رشته به عنوان ورودی و یک رشته به عنوان خروجی داشته باشد.
· LLM: مدل زبانی که عامل را تقویت میکند.
· عامل: عامل مورد استفاده. این باید رشتهای باشد که به کلاس عامل پشتیبانی ارجاع دهد.
لیست ابزارهای پشتیبانی شده در LangChain:
۱) Serpapi [کامل]: یک موتور جستجو. زمانی مفید است که نیاز به پاسخگویی به سوالات مربوط به رویدادهای جاری دارید. ورودی باید یک عبارت جستجو باشد.
۲) Wolfram-alpha: یک موتور جستجوی wolfram-alpha برای محاسبات علمی مفید است
۳) Llm-math: زمانی مفید است که میخواهید پاسخ سؤالات مربوط به ریاضیات را پیدا کنید.
۴) Google-search: پوششی در اطراف جستجوی گوگل. زمانی مفید است که میخواهید به سؤالات مربوط به رویدادهای جاری پاسخ دهید. ورودی باید یک عبارت جستجو باشد.
۵) news-api: زمانی که میخواهید اطلاعاتی درباره سرفصلهای برتر اخبار جاری دریافت کنید، از این مورد استفاده کنید.
۶) و غیره
قبل از پرداختن به نمونههای دفترچه یادداشت مربوط به عوامل، ممکن است ارزش داشته باشد که برخی از جنبههای نظریه پشت آن را مورد بحث قرار دهیم:
· Chain-Of-Thought Prompting
· ReAct Prompting
این به درک بهتر عملکرد عاملها کمک میکند.
7. تحریک زنجیرهای از فکر و واکنش: استدلال و عمل
۷.۱ تحریک زنجیرهای از فکر
اکنون، به عنوان جایگزینی برای تنظیم دقیق، گزینههای جدیدی نیز داریم که باعث صرفهجویی در هزینه و زمان زیادی برای تنظیم دقیق بر اساس دادههای شرکت و دادههای خاص دامنه میشود و از چیزی سادهتر و هوشمندتر استفاده میکند که به آن Chain-of-Thought میگویند. Prompting and ReAct. اجازه دهید با استفاده از مثال زیر تفاوت بین اعلان زنجیرهای فکر و اعلان استاندارد را ببینیم. این از مقاله منتشر شده توسط Google Brain در ژانویه 2023 با عنوان:
«تغییر زنجیرهای از فکر در مدلهای زبانی بزرگ، استدلال را برمیانگیزد»
شکل: تحریک زنجیرهای از فکر، مدلهای زبان بزرگ را قادر میسازد تا به وظایف استدلالی پیچیده، حسابی، عقل سلیم و نمادین بپردازند.
تفاوت بین این دو است که در مورد اول Standard Prompting، شما فقط پاسخ را دادید و سؤال بعدی را پرسیدید - و سؤال بعدی در همان خطوط سؤال اول بود. مدل نتوانست به درستی پاسخ دهد.
در مورد دوم، استدلال را به عنوان ورودی آوردهایم و سپس سوال دوم را مطرح کردهایم. بنابراین، در این مورد، مدل با زنجیره فکری برای ارزیابی سوال ارائه شده است. و این زیبایی سیستمهای رگرسیون خودکار است – توانایی پیشبینی ارزشهای آینده بر اساس مقادیر گذشته. اجازه دهید به بهبود عملکرد مدل برای PalM (مدل Pathways Language https://ai.googleblog.com/04/2022/pathways-language-model-palm-scaling-to.html که یک 540 B است نگاه کنیم. مدل پارامتر:
شکل: PALM 540B برای دستیابی به عملکرد جدید و ابتدایی در معیار GSM8K از مسائل ریاضی ریاضی از تحریک زنجیرهای از فکر استفاده میکند.
از شکل بالا، واضح است که مدلهای زبان بزرگ، چشم انداز هیجان انگیز یادگیری چند شات درون متنی را از طریق درخواست ارائه میدهند. یعنی به جای تنظیم دقیق یک نقطه بازرسی مدل زبان جداگانه برای هر کار جدید، میتوان به سادگی مدل را با چند نمونه ورودی-خروجی که کار را نشان میدهند، درخواست کرد. قابل توجه است، این برای طیف وسیعی از وظایف ساده پاسخگویی به سؤالات موفقیت آمیز بوده است.
۷.۲ ReAct: هم افزایی استدلال و عمل در مدلهای زبانی
این مقاله https://arxiv.org/abs/2210.03629 که در مارس 2023 منتشر شد، تلاش کرد تا هم افزایی بین استدلال (تشویق زنجیرهای از فکر) و عمل (به عنوان مثال، تولید برنامه اقدام) را مطالعه کند. این مقاله به بررسی استفاده از LLMها برای ایجاد استدلال و اقدامات خاص وظیفه به شیوهای تعاملی پرداخت. امکان هم افزایی بیشتر بین این دو: ردیابیهای استدلالی به مدل کمک میکند تا برنامههای اقدام را القاء کند، دنبال کند و به روز کند، در حالی که اقداماتی را انجام میدهد تا ارتباط برقرار کند و اطلاعات اضافی را از منابع خارجی مانند پایگاه دانش و محیط جمعآوری کند.
ReAct با نرخ موفقیت مطلق 10~% از روشهای یادگیری تقویتی بهتر عمل میکند در حالی که با یک یا 2 مثال درون متنی خواسته میشود.
شکل زیر مقایسه روشهای درخواست را نشان میدهد:
الف) استاندارد
ب) زنجیره فکر (CoT) - فقط دلیل
ج) 1 c Act-Only
د) ReAct ( (دلیل + عمل)
شکل: مقاله ReAct: هم افزایی استدلال و عمل در مدل زبان
شکل: مقایسه 4 روش تحریک - الف) استاندارد ب) زنجیره فکری (فقط CoT - دلیل) ج) فقط عمل د) ReACt (دلیل + عمل)
8. عوامل: خلاصه
با خلاصه بالا در مورد درخواست زنجیرهای از فکر و چارچوب ReAct، اجازه دهید اکنون کمی به عاملها در LangChain بپردازیم. عاملها را میتوان به عنوان "رباتهایی" در نظر گرفت که از طرف شما اقداماتی را انجام میدهند، آنها اقدامات مختلفی را در LangChain به هم متصل میکنند.
عاملها از LLM برای تعیین اینکه کدام اقدام بعدی و به چه ترتیبی انجام شود استفاده میکنند. آنها از قدرت استدلال LLM استفاده میکنند. عمل میتواند با استفاده از یک ابزار باشد و خروجی آن را برگرداند یا خروجی را مستقیماً بدون استفاده از ابزار بازگرداند.
نکاتی که باید در رابطه با عاملها در LangChain درک شود:
نکات زیر باید در رابطه با عاملها در LangChain تاکید شود. استفاده از عاملها در LangChain:
الف) ما LLM را وادار میکنیم که استدلال کند.
ب) همانطور که در بالا توضیح داده شد، میتواند استدلال را بر اساس پردازش زنجیرهای فکر (CoT) انجام دهد.
ج) همانطور که در بخش 4.1 در بالا ذکر شد، با ارائه برخی از پاسخهای متنی، میتوانیم LLM را وادار به انجام استدلال کنیم.
د) Action توسط LLM تصمیمگیری میشود و ورودیهای عمل توسط LLM به ابزار ارائه میشود
ه) ابزار مشاهدات را برمیگرداند.
ی) و LLM مسیر بعدی اقدام را تعیین میکند.
استفاده از عاملها برابر است با دادن اعلان به یک LLM مانند زیر:
· به سوالات زیر تا جایی که میتوانید پاسخ دهید. شما به ابزارهای زیر دسترسی دارید:
جستجو: از این برای جستجو در اینترنت استفاده کنید.
ماشین حساب: از این برای انجام محاسبات استفاده کنید.
ابزارهای بیشتر...
· از فرمت زیر استفاده کنید:
سوال: سوال ورودی که باید به آن پاسخ دهید
فکر: همیشه باید به این فکر کنید که چه کاری انجام دهید.
عمل: اقدامی که باید انجام داد. باید یکی از [{tool_names}] باشد
Action input: ورودی عمل
مشاهده: نتیجه عمل
... (این فکر/عمل/عمل ورودی/مشاهده میتواند N بار تکرار شود)
فکر: اکنون پاسخ نهایی را میدانم
پاسخ نهایی: پاسخ نهایی به سوال اصلی