आउटपुट पार्सर

LLM भाषा मॉडल टेक्स्ट फ़ॉर्मैट में सामग्री उत्पन्न करता है, लेकिन AI ऍप्लीकेशंस डेवलप करते समय, हमें फ़ॉर्मैटेड सामग्री प्राप्त करनी चाहिए, जैसे परिणामों को लक्षित ऑब्जेक्ट्स, एरे इत्यादि में रूपांतरित करना, ताकि प्रोग्राम प्रोसेसिंग सुविधाजनक हो। इसके लिए LangChain द्वारा प्रदान किए गए आउटपुट पार्सर की आवश्यकता होती है।

आउटपुट पार्सर का कार्य भाषा मॉडल द्वारा वापस लौटाई गई परिणामों को फ़ॉर्मैट करना है। एक आउटपुट पार्सर को दो आवश्यक विधियों को अमल कराना होता है:

  • "get_format_instructions" : भाषा मॉडल को वापसी रूप में कैसे लौटाना चाहिए इसके लिए निर्देशिका समेत स्ट्रिंग लौटाता है।
  • "parse" : मॉडल द्वारा लौटाई गई सामग्री को लक्षित फ़ॉर्मैट में पार्स करता है।

चलो अब LangChain में संग्रहीत आउटपुट पार्सर्स पर एक नजर डालते हैं।

Pydantic पार्सर

नीचे एक कोर आउटपुट पार्सर PydanticOutputParser दिखाया गया है जिसे LangChain द्वारा कैप्सूल किया गया है। यह पार्सर पायथन पायडेंटिक पुस्तकालय पर आधारित है और मॉडल के आउटपुट परिणाम को पायथन ऑब्जेक्ट में रूपांतरित करने के लिए उपयोग होता है।

from langchain.output_parsers import PydanticOutputParser
from langchain.prompts import PromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field, validator
from langchain_openai import OpenAI

model = OpenAI(model_name="gpt-3.5-turbo-instruct", temperature=0.0)

class Joke(BaseModel):
    setup: str = Field(description="कोई सवाल जोक को सेट करता है")
    punchline: str = Field(description="जोक का उत्तर")

    @validator("setup")
    def question_ends_with_question_mark(cls, field):
        if field[-1] != "?":
            raise ValueError("खराब तरह से फॉर्म किया गया सवाल!")
        return field

parser = PydanticOutputParser(pydantic_object=Joke)

prompt = PromptTemplate(
    template="उपयोगकर्ता का प्रश्न का जवाब दो।\n{format_instructions}\n{query}\n",
    input_variables=["query"],
    partial_variables={"format_instructions": parser.get_format_instructions()},
)

prompt_and_model = prompt | model
output = prompt_and_model.invoke({"query": "मुझे कोई चुटकुला सुनाओ।"})
parser.invoke(output)

नमूना लौटाई गई रिजल्ट:

Joke(setup='क्यों मुर्गा सड़क पार कर गया?', punchline='दूसरी तरफ पहुंचने के लिए!')

LCEL इंटरफेस

Runnable इंटरफेस

आउटपुट पार्सर रननेबल इंटरफेस को अमल करता है, जो LangChain Expression Language (LCEL) के मूल निर्माण ब्लॉक में से एक है। इसमें invoke, ainvoke, stream, astream, batch, abatch, astream_log आदि जैसे आवाहन विधियों का समर्थन होता है।

LCEL में आउटपुट पार्सर का अनुप्रयोग

आउटपुट पार्सर एक स्ट्रिंग या BaseMessage को इनपुट के रूप में स्वीकार कर सकता है और किसी भी प्रकार के संरचित डेटा को लौटा सकता है। हम किसी भी पार्सर को रननेबल सिक्वेंस में जोड़कर पार्सर चेन बना और उसे आवाहन कर सकते हैं।

chain = prompt | model | parser
chain.invoke({"query": "मुझे कोई चुटकुला सुनाओ।"})

लौटाता है

Joke(setup='क्यों मुर्गा सड़क पार कर गया?', punchline='दूसरी तरफ पहुंचने के लिए!')

कुछ पार्सर्स भागीरथी तथा सरल जैसे SimpleJsonOutputParser के आंश वृत्तियों को स्ट्रीम कर सकते हैं, जबकि अन्य इसे समर्थन नहीं करते। अंतिम आउटपुट उसकी निर्माण योग्यता पर निर्भर करता है।

from langchain.output_parsers.json import SimpleJsonOutputParser

json_prompt = PromptTemplate.from_template(
    "एक जेसन ऑब्जेक्ट लाौटाएँ जिसमें `जवाब` कुंजी हो जो निम्नलिखित सवाल का जवाब देती है: {question}"
)
json_parser = SimpleJsonOutputParser()
json_chain = json_prompt | model | json_parser
list(json_chain.stream({"question": "किसने खोजलेंसार बनाया था?"}))
[{},
 {'answer': ''},
 {'answer': 'और'},
 {'answer': 'औरतर'},
 {'answer': 'औरतरी'},
 {'answer': 'औरतरीपट'},
 {'answer': 'औरतरीपट कर'},
 {'answer': 'औरतरीपट करल'},
 {'answer': 'औरतरीपट करलें'},
 {'answer': 'औरतरीपट करलेंगे'},
 {'answer': 'औरतरीपट करलेंगे'}]

LCEL में हम विभिन्न पार्सर्स को मिलाकर विभिन्न आवश्यकताओं को पूरा करने के लिए विभिन्न डेटा प्रोसेसिंग फ्लो बना सकते हैं।