1. রিট্রিভার

রিট্রিভার হলো ল্যাংচেন দ্বারা ক্যাপসুলেট ইন্টারফেস, যা অবিবস্ত্র ক্যুয়েরির ভিত্তিতে সম্পর্কিত ডকুমেন্ট ফেরৎ করতে পারে। রিট্রিভার ডিজাইনের উদ্দেশ্য হলো স্থানীয় ডেটা প্রশ্ন করার সুবিধা দেওয়া। রিট্রিভারের অনুমুক্তকরণে ভেক্টর স্টোরেজ ব্যবহার করা যেতে পারে, এবং ল্যাংচেন রিট্রিভার ইন্টারফেসের একাধিক নীচক সংযোজন সমর্থন করে।

2. রিট্রিভার দিয়ে শুরু হওয়া

2.1. ইনস্টলেশন

রিট্রিভার পেতে কীভাবে ডেমনস্ট্রেট করতে, আমরা কিউডারান্ট ভেক্টর ডাটাবেস ব্যবহার করব।

%pip install --upgrade --quiet qdrant-client

2.2. ওপেনএআই API কী পেতে

OpenAIEmbeddings ব্যবহার করার আগে, আমাদের অবশ্যই ওপেনএআই API কী পেতে হবে।

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")

2.3. ডকুমেন্ট ডেটা ইমপোর্ট করা ও কিউডারান্ট ক্লায়েন্ট পেতে

নিম্নলিখিত কোড দেখায় যেভাবে ডকুমেন্ট ডেটা ইমপোর্ট করা এবং রিট্রিভার তৈরি করার পদক্ষেপ গ্রহণ করা হয়:

from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import Qdrant
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter

loader = TextLoader("../../modules/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

embeddings = OpenAIEmbeddings()

qdrant = Qdrant.from_documents(
    docs,
    embeddings,
    path="/tmp/local_qdrant",
    collection_name="my_documents",
)

2.4. রিট্রিভার পেতে

নিম্নলিখিত কোড দেখায় যেভাবে কিউডারান্ট থেকে রিট্রিভার পেতে হয়:

retriever = qdrant.as_retriever()
retriever

এরপর, একটি প্রশ্নের সাথে সম্পর্কিত ডকুমেন্ট কীভাবে কুয়ারি করতে হয়, এমনকি এমনকি রিট্রিভারের জন্য সিমিল্যারিটি থ্রেশহোল্ড সেট করতে হয়:

docs = retriever.get_relevant_documents("কেতনজি ব্রাউন জ্যাকসন সম্পর্কে উনি কী বলেছিলেন")

2.5. রিট্রিভার ব্যবহার করা LCEL এ

রিট্রিভার হলো চালনাত্মক অবজেক্ট, তাই আমরা তাদের অন্য চালনাত্মক অবজেক্ট সাথে সহজেই যোগ করতে পারি যা ওয়ার্কফ্লো নির্ধারিত করতে পারে:

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough

template = """মাত্র নিম্নলিখিত সন্দর্ভে ভিত্তি করে প্রশ্নের উত্তর দিন:

{context}

প্রশ্ন: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
model = ChatOpenAI()

def format_docs(docs):
    return "\n\n".join([d.page_content for d in docs])

chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | prompt
    | model
    | StrOutputParser()
)

chain.invoke("প্রেসিডেন্ট প্রযুক্তিতে কী বলেছিলেন?")

প্রক্রিয়ার ব্যাখ্যা:

  • পদক্ষেপ 1: লক্ষ্য হলো, প্যারামিটার পরিপ্রেক্ষিত করা। 'কারণ হচ্ছে প্যারামিটারটা 'প্রেসিডেন্ট প্রযুক্তিতে কী বলেছিলেন?' হলে সম্পর্কিত ডকুমেন্ট রিসিভ করা, তারপর format_docs ফাংশন ব্যবহার করে ডকুমেন্ট অ্যারেকে ফরম্যাট করা হয় দিয়ে "context" প্রপার্টির মান সেট করা। RunnablePassthrough ফাংশন চেইনের প্যারামিটারকে question প্রপার্টির মানে কপি করে।
  • পদক্ষেপ 2: প্রথম পদক্ষেপে তৈরি হয়া ম্যাপ প্রপার্টিগুলি প্রমাণে ফরম্যাট করার জন্য প্রম্পট টেম্পলেটে পাঠানো।
  • পদক্ষেপ 3: প্রম্পট টেম্পলেট থেকে ফরম্যাট করা প্রম্পট কে মডেলে পাঠাতে হয়।
  • পদক্ষেপ 4: মডেল কলের ফলাফল আউটপুট পার্সার ব্যবহার করে "StrOutputParser"।

3. কাস্টম রিট্রিভার

3.1. রিট্রিভার ইন্টারফেসের পরিচিতি

রিট্রিভার ইন্টারফেস খুব সহজ এবং আমরা সহজে কাস্টম রিট্রিভার লিখতে পারি।

4.2. অস্ত্রোপণযোগ্য ব্যর্থকারী উদাহরণ

নিম্নলিখিতটি হল একটি কাস্টম রিট্রিভারের উদাহরণ, যা প্রদর্শন করে কীভাবে কাস্টম রিট্রিভার লিখতে এবং সেটা ব্যবহার করে যুক্তিসঙ্গত নথি সন্ধান করতে হয়।

from langchain_core.retrievers import BaseRetriever
from langchain_core.callbacks import CallbackManagerForRetrieverRun
from langchain_core.documents import Document
from typing import List

class CustomRetriever(BaseRetriever):
  
    def _get_relevant_documents(
        self, query: str, *, run_manager: CallbackManagerForRetrieverRun
    ) -> List[Document]:
        return [Document(page_content=query]

retriever = CustomRetriever()

retriever.get_relevant_documents("bar")

উপরোক্ত বিভাগগুলির অধ্যয়নের মাধ্যমে, আপনি অবস্থান, পুনঃপ্রাপ্তিবিধি, এবং রিট্রিভারের কাস্টমাইজেশনের ধারণা উপভোগ করবেন এবং আলোকিত হবেন।