خانه هوش مصنوعی ساخت پایپ لاین RAG در یک قدم بسیار ساده + نمونه کد واقعی هوش مصنوعی LLM نوشته شده توسط: نگین فاتحی تاریخ انتشار: ۰۱ آبان ۱۴۰۳ آخرین بروزرسانی: 01 آبان 1403 زمان مطالعه: 4 دقیقه ۳ (۲) مدلهای هوش مصنوعی مولد عملکرد فوقالعادهای در پاسخ دادن به بسیاری از سوالات کاربران دارند؛ اما بهدلیل دانش محدود، امکان جواب دادن آنها به سوالهای خاص و خارج از چهارچوب دانش آموزش دادهشده وجود ندارد. اما آیا این انتهای راه است و نمیتوان انتظارات بیشتری از این مدلها داشت؟ خیر. کلید این قفل بهدست “Pipeline” در تکنیک RAG است. پایپلاین روشی برای ارائه دانش خاص به مدلهای هوش مصنوعی مولد است؛ دانشی که آنها درحالحاضر ندارند. در این مقاله، نحوه ساخت یک فایل PDF از سوالات متداول کاربران را بههمراه کد آن نشان خواهیم داد. RAG چیست؟ مدلهای هوش مصنوعی بر پایه زبان بزرگ (LLM) بسیار توانمند هستند؛ اما با مسائل متعددی مانند ایجاد محتوای نادرست و نامربوط (هذیانگویی) و عدم شفافیت در نحوه عملکرد مواجه میشوند. Retrieval-Augmented Generation (RAG) تکنیکی برای حل این مشکلات با تقویت دانش LLM است. این فرآیند با ارائه دادههای خاص به مدل، دامنه پاسخگویی آن را افزایش میدهد. یکی از کاربردهای کلیدی مدلهای مبتنیبر LLM در رباتهای پرسشوپاسخ پیشرفته (Q&A) است. برای ایجاد این ربات لازم است که دانش مدلهای LLM را با دادههای خاص مورد نیاز گسترش داد. بر این اساس، باید از فرآیند بهینهسازی پاسخهای مدل با تکنیک RAG استفاده کنیم. در این حالت میتوانیم انتظار فهمیدن سوالات مربوطبه موضوعات خصوصی یا خاص و پاسخگویی به آنها را از مدل داشته باشیم. مبانی پایپلاین در RAG بهطور معمول، مبانی پایپلاین در الگوریتم RAG بهشکل زیر است: یک پایپلاین RAG در دو فاز اصلی فرآیند را اجرا میکند: فرآیند ایندکس کردن داده ها این بخش شامل مراحل زیر میشود: بارگذاری دادهها: اولین مرحله که در آن، تمام اسناد یا اطلاعات مورد استفاده وارد مدل میشوند؛ تقسیم دادهها: اسناد بزرگ به قطعات کوچکتر تقسیم میشوند؛ بهعنوان مثال، بخشهایی که هرکدام حداکثر ۵۰۰ کاراکتر دارند؛ جاسازی دادهها: دادهها با استفاده از یک مدل جاسازی (Embedding Model)، بهشکل برداری تبدیل میشوند تا برای سیستمهای کامپیوتری قابل درک باشند؛ ذخیرهسازی دادهها: این جاسازیهای برداری در یک پایگاه داده برداری (Vector Database) ذخیره میشوند. بنابراین جستوجوی هر فیلد آسان خواهد بود. فرآیند بازیابی و تولید فرآیند بازیابی “Retrieval” و فرآیند تولید “Generation” نام دارد. در ادامه، ابتدا به تشریح مراحل Retrieval خواهیم پرداخت. بازیابی: وقتی کاربر سوالی میپرسد: ابتدا ورودی او با استفاده از همان مدل تعبیهشده از مرحله ایندکس کردن داده، به یک بردار (بردار کوئری) تبدیل میشود؛ سپس این بردار کوئری با همه بردارهای Vector Database مطابقت داده میشود. هدف از این تطابق، پیدا کردن مشابهترین بردارهایی است که احتمال میرود حاوی پاسخ سوال کاربر باشند. بهطور مثال، استفاده از متریک فاصله Euclidean میتواند فرآیند را به نتیجه مورد نظر برساند. این مرحله تلاش دارد تا بخشهایی از دانش مدل که با پرسش کاربر مرتبط هستند را شناسایی کند. تولید: مدل LLM سوال کاربر و اطلاعات بازیابیشده از پایگاه داده برداری را برای ایجاد پاسخ میگیرد. این فرآیند با ترکیب سوال کاربر و دادههای شناساییشده در مرحله بازیابی، تلاش دارد تا پاسخ کاربر را تولید کند. ساخت یک پایپلاین ساده برای سوالات متداول کاربران ساخت یک پایپلاین ابتدایی RAG، با نوشتن چند خط کد ممکن است. برای این کار، از چهار مورد استفاده میکنیم: Langchain OpenAI Embeddings Chroma Vector Database OpenAI LLM “Langchain” کتابخانهای محبوب در پایتون است که برای ساخت برنامههای سفارشی RAG استفاده میشود. کتابخانه پرطرفدار دیگر برای همین هدف، “LlamaIndex” است. برای ساخت یک سند PDF که حاوی سوالات متداول کاربران است، کدهای زیر را در پایتون نوشته و آنها را اجرا کنید. # import libraries import os from langchain_community.document_loaders import PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings.openai import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.prompts import ChatPromptTemplate from langchain.chat_models import ChatOpenAI OPENAI_API_KEY = os.getenv('OPENAI_API_KEY') # add your OpenAI API Key # for this example I used Alphabet Inc 10-K Report 2022 # https://www.sec.gov/Archives/edgar/data/1652044/000165204423000016/goog-20221231.htm DOC_PATH = "../alphabet_10K_2022.pdf" CHROMA_PATH = "your_db_name" # ----- Data Indexing Process ----- # load your pdf doc loader = PyPDFLoader(DOC_PATH) pages = loader.load() # split the doc into smaller chunks i.e. chunk_size=500 text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50) chunks = text_splitter.split_documents(pages) # get OpenAI Embedding model embeddings = OpenAIEmbeddings(openai_api_key=OPENAI_API_KEY) # embed the chunks as vectors and load them into the database db_chroma = Chroma.from_documents(chunks, embeddings, persist_directory=CHROMA_PATH) # ----- Retrieval and Generation Process ----- # this is an example of a user question (query) query = 'what are the top risks mentioned in the document?' # retrieve context - top 5 most relevant (closests) chunks to the query vector # (by default Langchain is using cosine distance metric) docs_chroma = db_chroma.similarity_search_with_score(query, k=5) # generate an answer based on given user query and retrieved context information context_text = "\n\n".join([doc.page_content for doc, _score in docs_chroma]) # you can use a prompt template PROMPT_TEMPLATE = """ Answer the question based only on the following context: {context} Answer the question based on the above context: {question}. Provide a detailed answer. Don’t justify your answers. Don’t give information not mentioned in the CONTEXT INFORMATION. Do not say "according to the context" or "mentioned in the context" or similar. """ # load retrieved context and user query in the prompt template prompt_template = ChatPromptTemplate.from_template(PROMPT_TEMPLATE) prompt = prompt_template.format(context=context_text, question=query) # call LLM model to generate the answer based on the given context and query model = ChatOpenAI() response_text = model.predict(prompt) """ Generated response: The top risks mentioned in the provided context are: ۱. Decline in the value of investments ۲. Lack of adoption of products and services ۳. Interference or interruption from various factors such as modifications, terrorist attacks, natural disasters, etc. ۴. Compromised trade secrets and legal and financial risks ۵. Reputational, financial, and regulatory exposure ۶. Abuse of platforms and misuse of user data ۷. Errors or vulnerabilities leading to service interruptions or failure ۸. Risks associated with international operations. """ آنچه در ساخت پایپ لاین در RAG خواندیم پایپلاینها در RAG بازوی قدرتمند توسعهدهندگان مدلهای هوش مصنوعی هستند؛ چراکه با کمک این ویژگی، میتوان دانشی به مدل آموخت که در فضاهای توسعه اولیه، در اختیار قرار نگرفتند. استفاده از پایپلاین متخصصان را قادر میسازد تا مدلهای خود را کارآمد کنند؛ مدلهایی که میتوانند پاسخ سوالات دقیق و جزئی کاربران را هم بدهند. چه رتبه ای میدهید؟ میانگین ۳ / ۵. از مجموع ۲ اولین نفر باش معرفی نویسنده مقالات 35 مقاله توسط این نویسنده محصولات 0 دوره توسط این نویسنده نگین فاتحی از اسفند 99 مشغول گشتوگذار توی دنیای کلمات هستم؛ با این هدف که خوب بنویسم و این چشمانداز که کمکهای موثری کنم. حالا سه ساله که توی زمینههای گوناگون بازاریابی آنلاین مطالعه میکنم و یکی از حوزههای موردعلاقم، رفتارشناسی مخاطبان این فضا هست. دستاوردهای این مطالعه شده نوشتن محتوایی که امیدوارم شما بخونی، لُبکلام رو متوجه بشی، لذت ببری و با دست پر صفحه رو ترک کنی؛ شایدم بقیه نوشتههام رو بخونی :) معرفی محصول مسعود طاهری، حمیدرضا حداد دوره آموزش Vector Database [با رویکرد تصویر و متون فارسی] 1.200.000 تومان 720.000 تومان مقالات مرتبط ۰۳ آبان هوش مصنوعی راهنمای کاربردی اصطلاحات هوش مصنوعی تیم فنی نیک آموز ۰۴ مهر هوش مصنوعی پارادایم های RAG در مدل های زبانی بزرگ تیم فنی نیک آموز ۲۰ شهریور هوش مصنوعی نحوه ساخت RAG های کارآمد با Query Routing نگین فاتحی ۰۴ شهریور هوش مصنوعی راهنمای گام به گام مانیتورینگ مدل یادگیری ماشین نگین فاتحی دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ