1. रिट्रीवर (Retriever)
रिट्रीवर एक इंटरफेस है जो लैंगचेन (LangChain) द्वारा एनक्रिप्ट किया जाता है, जो अनंतरित पूछताछ के आधार पर संबंधित दस्तावेज़ लौटा सकता है। रिट्रीवर डिज़ाइन का उद्देश्य स्थानीय डेटा की पूछताछ को सुविधाजनक बनाना है। यहां तक कि रिट्रीवर के आंतरजन्य कार्यान्वयन के रूप में वेक्टर स्टोरेज का उपयोग किया जा सकता है, और लैंगचेन रिट्रीवर इंटरफेस के विभिन्न आंतरजन्य कार्यान्वयनों का समर्थन करता है।
2. रिट्रीवर के साथ प्रारंभ
2.1. स्थापना (Installation)
रिट्रीवर प्राप्त करने का दिखाने के लिए, हम क्यूड्रांट वेक्टर डेटाबेस का उदाहरण उपयोग करेंगे।
%pip install --upgrade --quiet qdrant-client
2.2. ओपनएआई एपीआई कुंजी प्राप्त करना
OpenAIEmbeddings
का उपयोग करने से पहले, हमें ओपनएआई एपीआई कुंजी प्राप्त करनी होगी।
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("केतन्जी ब्राउन जैक्सन के बारे में उसने क्या कहा")
आप रिट्रीवर के लिए समानता अनुक्रमणिका को भी सेट कर सकते हैं:
retriever = db.as_retriever(
search_type="similarity_score_threshold", search_kwargs={"score_threshold": 0.5}
)
इसके अलावा, आप रिट्रीवर को शीर्ष 'K' सबसे समान रिकॉर्ड लौटाने के लिए सेट कर सकते हैं, उदाहरण के लिए, शीर्ष 2 सबसे समान रिकॉर्ड लौटाने के लिए:
retriever = db.as_retriever(search_kwargs={"k": 2})
2.5. LCEL में रिट्रीवर का उपयोग
क्योंकि रिट्रीवर एक 'Runnable' ऑब्जेक्ट होते हैं, हम उन्हें आसानी से अन्य 'Runnable' ऑब्जेक्टों के साथ संरचित कार्यप्रणालियों के साथ मेल कर सकते हैं:
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: उद्देश्य है एक शब्दकोश उत्पन्न करना जो
प्रस्तुत_संदर्भ
औरप्रश्न
दो विशेषताओं को तैयार करने के लिए PARAMS की तैयारी के लिए हो।प्रस्तुत_संदर्भ
पैरामीटरinvoke
मेथड में पारित किये जाने वाले "राष्ट्रपति ने तकनीक के बारे में क्या कहा?" के आधार पररिट्रीवर
द्वारा दस्तावेज़ पूछताछ समान दस्तावेज़ रिटीव। यहरिट्रीवर
फ़ंक्शन का उपयोग करके दस्तावेज़ एरे कोformat_docs
फ़ंक्शन का उपयोग करके स्वरूपित करते हुएप्रस्तुत_संदर्भ
विशेषता में स्थापित करता है।RunnablePassthrough
फ़ंक्शन श्रृंखला के चेन के पैरामीटर (उपयोगकर्ता का प्रश्न) की कॉपी करता है। - स्टेप 2: पहले स्टेप में उत्पन्न शब्दकोश को प्रारूपित करने के लिए प्रॉम्प्ट टेम्पलेट को पास करें।
- स्टेप 3: प्रारूपित प्रॉम्प्ट को मॉडल को पास करें।
- स्टेप 4: मॉडल के कॉल का परिणाम आउटपुट पार्सर
StrOutputParser
को पास करें।
3. Custom रिट्रीवर (कस्टम रिट्रीवर)
4.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")
उपरोक्त खंडों का अध्ययन करके, आप अवधारणा, रिट्रीवल विधियाँ, और रिट्रीवर की अनुकूलन की गहरी समझ प्राप्त करेंगे।