तेज़ शुरुआत
इस तेज़ शुरुआत में, हम उन चैट मॉडल्स का उपयोग करेंगे जो पाठ से जानकारी निकालने की क्षमता रखते हैं कार्य/उपकरण को बुलाना।
कार्य/उपकरण को बुलाना का उपयोग केवल उन मॉडल्स के साथ होता है जो कार्य/उपकरण को बुलाने का समर्थन करते हैं।
सेट अप
हमें संरचित परिणाम पद्धति का उपयोग करना होगा जो कार्य/उपकरण को बुलाने की क्षमता रखने वाले LLMs पर उपलब्ध है।
एक मॉडल का चयन करें, उसके लिए आवश्यकताएँ स्थापित करें और एपीआई कुंजी सेट करें!
!pip install langchain
स्कीमा
सबसे पहले, हमें वर्णित करना होगा कि हम पाठ से कौन सी जानकारी निकालना चाहतें हैं।
हम व्यक्तिगत जानकारी निकालने के लिए एक उदाहरण स्कीमा को परिभाषित करने के लिए Pydantic का उपयोग करेंगे।
from typing import Optional
from langchain_core.pydantic_v1 import BaseModel, Field
class Person(BaseModel):
"""किसी व्यक्ति की जानकारी।"""
name: Optional[str] = Field(..., description="व्यक्ति का नाम")
hair_color: Optional[str] = Field(
..., description="व्यक्ति के बालों का रंग अगर पता हो"
)
height_in_meters: Optional[str] = Field(
..., description="मीटर में नापी गई ऊँचाई"
)
स्कीमा को परिभाषित करते समय दो सर्वोत्तम अभ्यास हैं:
- विशेषताएँ और स्कीमा को दस्तावेज़ बनाएं: यह जानकारी LLM को भेजी जाती है और उसे जानकारी निकालने की गुणवत्ता में सुधार करने के लिए उपयोग की जाती है।
- LLM को जानकारी तैयार करने के लिए मजबूर न करें! ऊपर हमने विशेषताओं के लिए
Optional
का उपयोग किया जिससे LLM को यदि उत्तर पता नहीं हो तो वहNone
लौटा सके।
सर्वश्रेष्ठ प्रदर्शन के लिए, स्कीमा को अच्छे से दस्तावेजिकरण करें और सुनिश्चित करें कि मॉडल को यदि पाठ से निकालने के लिए कोई जानकारी नहीं है तो परिणाम लौटाने का जोर नहीं डालता है।
उत्तरदाता
आइए उस स्कीमा का उपयोग करके जो हमने ऊपर परिभाषित किया है, एक जानकारी निकालने वाला उपकरण बनाते हैं।
from typing import Optional
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"आप एक विशेषज्ञ निकालने एल्गोरिदम हैं। "
"केवल पाठ से संबंधित जानकारी निकालें। "
"अगर आपको विशेषता पूछने मांगी जाने वाली किसी विशेषता की मान्यता मालूम नहीं है, "
"तो उस विशेषता की मान्यता के लिए कुछ न करने के लिए जिम्मेदार रहिए।",
),
("human", "{text}"),
]
)
हमें एक मॉडल का उपयोग करना होगा जो कार्य/उपकरण को बुलाने की क्षमता का समर्थन करता है।
from langchain_openai import ChatOpenAI
llm = ChatOpenAI()
runnable = prompt | llm.with_structured_output(schema=Person)
आइए इसे टेस्ट करते हैं
text = "एलन स्मिथ 6 फीट लंबा है और उसके बाल सुनहरे हैं।"
runnable.invoke({"text": text})
Person(name='एलन स्मिथ', hair_color='सुनहरे', height_in_meters='1.8288')
निष्कर्षण उत्पन्नकर्ता है 🤯 LLMs उत्पन्नकर्ता मॉडल हैं, इसलिए उनमें कुछ बहुत अच्छी बातें कर सकते हैं, जैसे कि वे वास्तविक रूप से व्यक्ति की ऊँचाई को मीटर में निकाल सकते हैं, भले ही वह फीट में दी गई हो!
एकाधिक एंटिटियों
अधिकांश मामलों में, आपको एक ही एंटिटी की बजाय एंटिटी की सूची निकालनी चाहिए।
इसे पाइडांटिक का उपयोग करके आसानी से प्राप्त किया जा सकता है जिसमें एक दुसरे के अंदर मॉडल नेस्ट किए जा सकते हैं।
from typing import List, Optional
from langchain_core.pydantic_v1 import BaseModel, Field
class Person(BaseModel):
"""व्यक्ति के बारे में जानकारी।"""
name: Optional[str] = Field(..., description="व्यक्ति का नाम")
hair_color: Optional[str] = Field(
..., description="अगर पता है तो व्यक्ति के बालों का रंग"
)
height_in_meters: Optional[str] = Field(
..., description="मीटर में नापी गई ऊँचाई"
)
class Data(BaseModel):
"""लोगों के बारे में प्राप्त डेटा।"""
people: List[Person]
यहां पर निकाल में कुछ भी समाप्त नहीं हो सकता है। कृपया संदर्भ उदाहरणों का उपयोग कैसे करके निकाल की गुणवत्ता को बेहतर बनाने और निर्देशिका अनुभाग देखने के लिए जारी रखें!
runnable = prompt | llm.with_structured_output(schema=Data)
text = "मेरा नाम जेफ है, मेरे बाल काले हैं और मैं 6 फूट लंबा हूँ। अन्ना के बाल मेरे जैसे ही रंग के हैं।"
runnable.invoke({"text": text})
Data(people=[Person(name='जेफ', hair_color=None, height_in_meters=None), Person(name='अन्ना', hair_color=None, height_in_meters=None)])
जब स्कीमा एकाधिक एंटिटियों को निकालने के लिए अनुमति देता है, तो यह भी मॉडल को बाध्य नहीं करता है कि यह एंटिटी का पता लगाए।