شاید شما هم در مورد تعداد زیادی از برنامه های هوش مصنوعی که در چند ماه گذشته منتشر شده اند خوانده باشید. حتی ممکن است استفاده از برخی از آنها را شروع کرده باشید؛ پس باید گفت همانطور که میدانید ابزارهای هوش مصنوعی مانند Chat PDF و Custom GPT AI برای مردم بسیار مفید شده اند – و دلیل خوبی هم دارد. روزهایی که برای یافتن یک پاسخ ساده باید در یک سند 50 صفحه ای پیمایش کنید، گذشته است. در عوض، برای انجام کارهای سنگین می توانید به هوش مصنوعی تکیه کنید.
اما این همه ممکن هست از خود بپرسید، توسعه دهندگان دقیقا چگونه این ابزارها را از هوش مصنوعی ایجاد و استفاده می کنند؟ خوب، در جواب باید بگوییم که بسیاری از آنها از یک چارچوب متن باز به نام Lang Chain استفاده می کنند؛ در این مقاله، من قصد دارم شما را با Lang Chain آشنا کنم و به شما نشان دهم که چگونه از آن در ترکیب با API Open AI برای ایجاد این ابزارهای تغییر دهنده بازی استفاده می شود؛ امید است مطالبی که در ادامه ذکر میشوند؛ تا حدی به شما انگیزه دهد که خودتان بتوانید یکی بسیازید؛ پس بیایید آماده آموزش شویم، همراه من باشید!
Lang Chain چیست؟
مسلم هست که با شنیدن اسم این ابزار اولین سوالی که ذهن شما را درگیر میکند، این هست که Lang Chain چیست؟ که در پاسخ باید بگوییم Lang chainیک چارچوب متن باز است که به توسعه دهندگان هوش مصنوعی اجازه می دهد مدل های زبان بزرگ (LLM) مانند GPT-4 را با داده های خارجی ترکیب کنند؛ خوب هست بدانید این کار در زبان های برنامه نویسی پایتون یا جاوا اسکریپت (Type Script) امکان پذیر میباشد.
همانطور که می دانید، مدل های (هوش مصنوعی)GPT تا سال 2021 بر روی داده ها آموزش دیده اند که این مسئله می تواند یک محدودیت قابل توجه در این ابزار باشد؛ همچنین خوب هست بدانید این مسئله در حالی است، که دانش عمومی این مدل ها عالی است، امکان اتصال آنها به داده ها و محاسبات سفارشی درب های زیادی را به روی شما باز می کند و میتواند سبک زندی شما را تغییر دهد؛ که البته این دقیقاً همان کاری است که Lang Chain نیز میتواند انجام دهد و تغییرات زیادی را در هوش مصنوعی به وجود بیاورد.
اساساً این ابزار، به LLM شما اجازه میدهد تا هنگام ارائه مطلب پاسخهای خود به کل پایگاههای داده ارجاع دهد. بنابراین اکنون با استفاده از این ابزار می توانید مدل های GPT خود را به داده های به روز در قالب گزارش ها، اسناد و اطلاعات وب سایت دسترسی داشته باشید.
که این ویژگی ها باعث شده است اخیرا، Lang Chain محبوبیت زیادی پیدا کند؛ کخ این محبوبیت به خصوص پس از راه اندازی GPT-4 در ماه مار به لطف تطبیق پذیری آن و امکانات زیادی که در هنگام جفت شدن با یک LLM قدرتمند باز می کند؛ چند برابر نیز شده است.
Lang Chain چگونه کار می کند؟
حال که در ارتباط با این ابزار اطلاعات نسبتا زیادی کسب کردید، ممکن هست از خود بپرسید که چگونه کار میکند؟ در پاسخ باید بگوییم در حالی که ممکن است فکر کنید که Lang Chain بسیار پیچیده به نظر می رسد، در واقع کاملاً قابل دسترسی است و یادگیری ایکه چگونه مار میکند؛ آنچنان که می اندیشید، سخت نیست.
اگر بخواهیم به طور خلاصه بگوییم، Lang Chain فقط مقادیر زیادی از داده ها را تشکیل می دهد که می تواند به راحتی توسط یک LLM با حداقل قدرت محاسباتی ممکن ارجاع داده شود. این کار با گرفتن یک منبع بزرگ از دادهها، مثلاً یک پی دی اف 50 صفحهای، و تجزیه آن به «تکههایی» کار میکند که سپس در فروشگاه Vector جاسازی میشوند.
اکنون که نمایشهای برداری از سند بزرگ را داریم، میتوانیم از آن در ارتباط با LLM برای بازیابی فقط اطلاعاتی استفاده کنیم که باید هنگام ایجاد یک جفت اعلان-تکمیل به آنها ارجاع داده شود؛ به این ترتیب وقتی درخواستی را در چت ربات جدید خود وارد می کنیم، Lang Chain اطلاعات مرتبط را از فروشگاه Vector استعلام می کند؛ سپس آن را به عنوان یک مینی گوگل برای سند خود در نظر بگیرید. هنگامی که اطلاعات مربوطه بازیابی شد، از آن همراه با اعلان تغذیه به LLM برای تولید پاسخ خود استفاده می کنیم؛ این خلاصه ای از کاری است که انجام میدهیم.
البته نیاز هست ذکر شود که Lang Chain همچنین به شما امکان میدهد برنامههایی ایجاد کنید که میتوانند اقداماتی را انجام دهند و عملیاتی تر باشند که از جمله آن ها میتوان به گشت و گذار در وب، ارسال ایمیل، و تکمیل سایر وظایف مرتبط با API. Agent GPT اشاره کرد.
البته باید بگوییم زمینه هایی که در آن میتوان از این ابزار استفاده کرد بسیار بسیار گسترده است؛ اما تنها چند موردی که در ادامه ذکر میشوند؛ به ذهن من میرسد.
- دستیار ایمیل شخصی هوش مصنوعی
- رفیق مطالعه هوش مصنوعی
- تجزیه و تحلیل داده های هوش مصنوعی
- چت ربات های خدمات مشتری سفارشی شرکت
- دستیار ایجاد محتوای رسانه های اجتماعی
و اگر کمی بیشتر تامل کنیم، لیست تا بی نهایت ادامه دارد؛ همچنین خول هست بدانید من در مقالات بعدی آموزش ساخت صحیح را پوشش خواهم داد، پس منتظر آن باشید.
چگونه با Lang Chain شروع کنیم؟
تا این قسمت در ارتباط با Lang Chain اطلاعات متعددی را کسب کردید، اما در حال حاضر نیاز هست پا را فراتر بگذارید و یاد بگیرید، چگونه با این ابزار کار کنید، پس باید بگوییم یک برنامه Lang Chain از 5 جزء اصلی تشکیل شده است:
- مدلها (LLM Wrappers)
- درخواست کننده ها(Prompts)
- زنجیر(Chain)
- فروشگاه های جاسازی و وکتور(Embedding s and Vector Stores)
- عوامل(Agents)
در این مقاله من قصد دارم یک نمای کلی از هر یک به شما ارائه دهم تا بتوانید درک سطح بالایی از نحوه کار Lang Chain داشته باشید؛ اما با حرکت رو به جلو، باید بتوانید مفاهیم را برای شروع ساختن موارد استفاده خود و ایجاد برنامه های خود به کار ببرید؛ خوب هست بدانید من همه چیز را با کدهای کوتاه از Rabbitmetrics (Github) توضیح خواهم داد؛ این کدها ها به شما اجازه میدهند تا همه چیز را تنظیم کرده و برای استفاده از Lang Chain آماده کنید.
ابتدا بیایید محیط خود را تنظیم کنیم. شما می توانید 3 کتابخانه که برای این کار به آنها نیاز دارید را با پیپ نصب کنید:
pip install -r requirements.txt
python-dotenv==1.0.0
langchain==0.0.137
pinecone-client==2.2.1
خوب هست بدانیدPinecone فروشگاه Vector است که ما در ارتباط با Lang Chain از آن استفاده خواهیم کرد. با این موارد که در قسمت فوق ذکر شد، نیاز هست، مطمئن شوید که کلیدهای API خود را برای Open AI، Pinecone Environment و Pinecone API در فایل محیطی خود ذخیره کرده اید؛ که البته شما می توانید این اطلاعات را در وب سایت های مربوطه پیدا کنید؛ در مرحله بعدی نیاز هست آن فایل محیط را با موارد زیر بارگذاری می کنیم:
# Load environment variables
from dotenv import load_dotenv,find_dotenv
load_dotenv(find_dotenv())
اکنون، ما برای شروع آماده ایم، برویم برای دیدن آموزش هایی در زمینه قسمت های مختلف این ابزار:
- مدلها (LLM Wrappers)
برای تعامل با LLM های خود، نیاز هست در این زمینه یک پوشش برای مدل های GPT Open AI بسازیم. در این مورد، ما از GPT-3.5-turbo Open AI استفاده می کنیم، زیرا مقرون به صرفه ترین است. اما اگر دسترسی دارید، از GPT4 قدرتمندتر استفاده کنید.
برای وارد کردن آنها نیز می توانید از کد زیر استفاده کنید:
# import schema for chat messages and ChatOpenAI in order to query chatmodels GPT-3.5-turbo or GPT-4
from langchain.schema import (
AIMessage,
HumanMessage,
SystemMessage
)
from langchain.chat_models import ChatOpenAI
chat = ChatOpenAI(model_name=”gpt-3.5-turbo”,temperature=0.3)
messages = [
SystemMessage(content=”You are an expert data scientist”),
HumanMessage(content=”Write a Python script that trains a neural network on simulated data “)
]
response=chat(messages)
print(response.content,end=’\n’)
باید بگوییم، در اصل، System Message زمینه ای را برای ماژول GPT-3.5-turbo فراهم می کند که برای هر جفت prompt-completion ارجاع می دهد..
اما برای ایجاد یک چت بات دانش سفارشی، ما اغلب اجزای تکراری یک درخواست را ایجاد می کنیم. به عنوان مثال، اگر من در حال ایجاد یک برنامه تولید توییت بودم، نمیخواهم به تایپ کردن «برای من توییتی درباره… بنویسم» ادامه دهم؛ پی در واقع در واقع، ابزارهای ساده نوشتن هوش مصنوعی به این ترتیب توسعه می یابند!
پس بیایید ببینیم چگونه میتوانیم آن را با الگوهای سریع ایجاد کنیم.
- درخواست کننده ها
باید بدانید که این قسمت Chain Prompt Templates را ارائه می دهد که به شما امکان می دهد به صورت پویا دستورات را با ورودی کاربر تغییر دهید، مشابه نحوه استفاده از regex
# Import prompt and define PromptTemplate
from langchain import PromptTemplate
template = “””
You are an expert data scientist with an expertise in building deep learning models.
Explain the concept of {concept} in a couple of lines
“””
prompt = PromptTemplate(
input_variables=[“concept”],
template=template,
)
# Run LLM with PromptTemplate
llm(prompt.format(concept=”autoencoder”))
llm(prompt.format(concept=”regularization”))
البته نیاز هست ذکر شود که شما می توانید این موارد را به روش های مختلف متناسب با مورد استفاده خود تغییر دهید؛ که اگر با استفاده از Chat GPT آشنا باشید، این باید برای شما راحت باشد.
- زنجیر
باید بدانید که زنجیرهها به شما امکان میدهند Prompt Templates ساده بگیرید و قابلیتهایی را در بالای آنها ایجاد کنید؛ به عبارت دیگر اساساً، زنجیرهها مانند توابع ترکیبی هستند که به شما امکان میدهند Prompt Templates و LLMهای خود را با هم ادغام کنید.
با استفاده از wrapper ها و Prompt Templates قبلی، نیز در این مرحله می توانیم همان دستورات را با یک زنجیره واحد اجرا کنیم که یک Prompt Template را می گیرد و آن را با یک LLM می سازد:
# Import LLMChain and define chain with language model and prompt as arguments.
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
# Run the chain only specifying the input variable.
print(chain.run(“autoencoder”))
علاوه بر این، همانطور که از نام آن پیداست، میتوانیم اینها را به هم زنجیر کنیم تا ترکیبهای بزرگتری ایجاد کنیم, مثلاً من می توانم نتیجه را از یک زنجیر بگیرم و به زنجیره دیگری منتقل کنم. در این قطعه، Rabbitmetrics تکمیل را از زنجیره اول می گیرد و آن را به زنجیره دوم منتقل می کند تا آن را برای یک کودک 5 ساله توضیح دهد.
سپس می توانید آن زنجیره ها را در یک زنجیره بزرگتر ترکیب کرده و آن را اجرا کنید؛ که این روند میتواند بسیار جالب باشد:
second_prompt = PromptTemplate(
input_variables=[“ml_concept”],
template=”Turn the concept description of {ml_concept} and explain it to me like I’m five in 500 words”,
)
chain_two = LLMChain(llm=llm, prompt=second_prompt)
# Define a sequential chain using the two chains above: the second chain takes the output of the first chain as input
from langchain.chains import SimpleSequentialChain
overall_chain = SimpleSequentialChain(chains=[chain, chain_two], verbose=True)
# Run the chain specifying only the input variable for the first chain.
explanation = overall_chain.run(“autoencoder”)
print(explanation)
با استفاده از قسمت زنجیر همچنین شما میتوانید مجموعهای از قابلیتها را ایجاد کنید، که همان چیزی است که Lang Chain را بسیار همهکاره میکند و باعث میشود در میان قلب افراد جا باز کند؛ اما جایی که واقعاً این ابزار می درخشد، استفاده از آن در ارتباط با فروشگاه Vector همانطور که قبلاً بحث شد است؛ پس بیایید هرچه سریعتر آن مولفه را معرفی کنیم.
- فروشگاه های جاسازی و وکتور
اینجاست که ما میتوانیم جنبه داده های سفارشی Lang Chain را ترکیب می کنیم. همانطور که قبلاً ذکر شد، ایده پشت جاسازیها و فروشگاههای برداری این است که دادههای بزرگ را به تکهها تقسیم کنیم و آنهایی را که در صورت لزوم مورد بررسی قرار میگیرند ذخیره کنیم.
که باید بگوییم ابزار پر کاربرد Lang Chain یک تابع تقسیم متن برای انجام این کار دارد:
# Import utility for splitting up texts and split up the explanation given above into document chunks
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
chunk_size = 100,
chunk_overlap = 0,
)
texts = text_splitter.create_documents([explanation])
خوب هست ذکر شود تقسیم متن به دو پارامتر نیاز دارد: اندازه یک تکه چقدر است (chunk_size) و اینکه هر تکه چقدر همپوشانی دارد (chunk_overlap)، که باید بدانید وجود همپوشانی بین هر تکه برای کمک به شناسایی تکه های مجاور مرتبط بسیار مهم است؛ هر یک از آن تکه ها را نیز می توان به این صورت بازیابی کرد:
texts[0].page_content
بعد از اینکه با اجرای مرحله قبل کاری کردیم که آن تکه ها را داشته باشیم، باید آنها را به جاسازی تبدیل کنیم. این به فروشگاه Vector اجازه میدهد تا هر تکه را در صورت پرس و جو پیدا کرده و برگرداند؛ باید ذکر شود که ما از مدل تعبیه Open AI برای این کار استفاده خواهیم کرد.
# Import and instantiate OpenAI embeddings
from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model_name=”ada”)
# Turn the first text chunk into a vector with the embedding
query_result = embeddings.embed_query(texts[0].page_content)
print(query_result)
و در نهایت، ما باید مکانی برای ذخیره این تعبیههای برداری داشته باشیم، که البته همانطور که قبلا ذکر شد، ما از Pinecone برای این کار استفاده خواهیم کرد. با استفاده از کلیدهای API از فایل محیطی قبلی، میتوانیم Pinecone را برای ذخیره سازی تعبیههایمان مقداردهی اولیه کنیم.
# Import and initialize Pinecone client
import os
import pinecone
from langchain.vectorstores import Pinecone
pinecone.init(
api_key=os.getenv(‘PINECONE_API_KEY’),
environment=os.getenv(‘PINECONE_ENV’)
)
# Upload vectors to Pinecone
index_name = “langchain-quickstart”
search = Pinecone.from_documents(texts, embeddings, index_name=index_name)
# Do a simple vector similarity search
query = “What is magical about an autoencoder?”
result = search.similarity_search(query)
print(result)
و اکنون می توانیم اطلاعات مربوطه را از فروشگاه وکتور کاج خود جویا شویم! تنها کاری که باید انجام دهید این است که چیزهایی را که یاد گرفتهایم ترکیب کنیم تا مورد استفاده خاص خود را ایجاد کنیم؛ که قسمت «عامل» در ابزار Lang Chain این کار را برای ما انجام میدهد و هوش مصنوعی تخصصی خود را به ما بدهد.
- عوامل
باید ذکر شود که این یک عامل اساساً یک هوش مصنوعی مستقل است که ورودیها را دریافت میکند و آنها را بهعنوان وظایف متوالی تا رسیدن به هدف نهایی تکمیل میکند. این شامل استفاده از هوش مصنوعی ما از API های دیگر است که به آن اجازه می دهد وظایفی مانند ارسال ایمیل یا انجام مسائل ریاضی را انجام دهد. با استفاده از زنجیرههای سریع LLM + ما میتوانیم یک برنامه هوش مصنوعی مناسب را در کنار هم قرار دهیم.
در حال حاضر، توضیح این بخش گسترده خواهد بود، بنابراین در اینجا یک مثال ساده از نحوه استفاده از یک عامل پایتون در Lang Chain برای حل یک مسئله ساده ریاضی آورده شده است. این عامل در این مورد با اتصال LLM ما به اجرای کد پایتون و یافتن ریشه ها با NumPy مشکل را حل می کند:
# Import Python REPL tool and instantiate Python agent
from langchain.agents.agent_toolkits import create_python_agent
from langchain.tools.python.tool import PythonREPLTool
from langchain.python import PythonREPL
from langchain.llms.openai import OpenAI
agent_executor = create_python_agent(
llm=OpenAI(temperature=0, max_tokens=1000),
tool=PythonREPLTool(),
verbose=True
)
# Execute the Python agent
agent_executor.run(“Find the roots (zeros) if the quadratic function 3 * x**2 + 2*x -1”)
در نهایت نیاز هست شما این مسئله را بدانید یک چت بات دانش سفارشی اساساً عاملی است که اعلانها و اقداماتی را به هم متصل میکند که از فضای ذخیرهسازی بردار پرس و جو میکند، نتایج را میگیرد و آن را با سؤال اصلی زنجیره میزند!
سایر تغییرات
حتی با توجه به درک اولیه شما از عملکرد Lang Chain، مطمئنم که در این مرحله با آموختن این مطالب متعدد در ارتباط با این ابزار ایده هایی را جمع کرده اید؛ اما ما تاکنون تنها به یک مدل Open AI نگاه کردهایم و آن GPT-3.5-turbo مبتنی بر متن است؛ اما همانطور که میدانید Open AI مجموعهای از مدلها را دارد که میتوانید با Lang Chain از آنها استفاده کنید؛ از جمله آن ها نیز میتوان تولید تصویر با Dall-E، اشاره کرد؛ خوب هست بدانید با استفاده از همان مفاهیمی که در مورد آن صحبت کردیم، میتوانیم عاملهای AI Art Generator، عوامل Website Builder و بسیاری موارد دیگر را ایجاد کنید؛ پس تنها کاری که نیاز هست انجام دهید این هست که کمی وقت بگذارید و چشم انداز هوش مصنوعی را کشف کنید و من مطمئن هستم که ایده های بیشتر و بیشتری دریافت خواهید کرد.
نتیجه
به عنوان سخن پایانی نیاز هست بگویم، امیدوارم با ارائه مطالب فوق کمی بیشتر در مورد آنچه در پشت صحنه همه این ابزارهای هوش مصنوعی جدید می گذرد، یاد گرفته باشید، و ای آموزه ها به کارتان نیز بیاید؛ زیرا درک اینکه Lang Chain چگونه کار می کند این روزها یک مهارت ارزشمند برای برنامه نویسی است به هرکسی فرصت یادگیری اش را ندارد و می تواند فرصت هایی را برای توسعه هوش مصنوعی در زندگی شما باز کند؛ پس اگر از این مقاله لذت بردید و میخواهید درباره ابزارهای جدید و جالبی که سازندگان هوش مصنوعی میسازند اطلاعات بیشتری کسب کنید، میتوانید با خبرنامه هوش مصنوعی من به روز تر از دنیای اطرافتان باشید؛ زیرا من هزاران داستان هیجان انگیز از آنچه مردم در فضای هوش مصنوعی می سازند وجود دارد، و من دوست دارم شما به جامعه ما بپیوندید تا این اطلاعات را کسب کنید.