আউটপুট পার্সার

রিএলএম ভাষা মডেলটি পাঠ্য ফরম্যাটে সামগ্রিক তথ্য উত্পাদন করে, তবে এ.আই অ্যাপ্লিকেশন তৈরি করার সময়, আমরা ফরম্যাটেড তথ্য পেতে চাই, যেমন ফলাফলগুলি টার্গেট অবজেক্ট, অ্যারে, ইত্যাদি-তে রূপান্তর করে সহজ করে প্রোগ্রাম প্রসেসিং করার জন্য। এটা প্রয়োজন হয় ল্যাংচেইন দ্বারা প্রদত্ত আউটপুট পার্সারের মাধ্যমে মডেল দ্বারা ফিরে যাওয়া তথ্যকে ফরম্যাট করুক।

আউটপুট পার্সারের কাজ হল ভাষা মডেল দ্বারা ফিরে আসা ফলাফলগুলি ফরম্যাট করা। একটি আউটপুট পার্সার অবশ্যই দুটি প্রয়োজনীয় পদক্ষেপ অনুসরণ করতে হবে

  • "get_format_instructions": ভাষা মডেল যে ফরম্যাটে প্রত্যাখ্যান করবে তা নির্ধারণ করা স্ট্রিং ফেরত দেয়।
  • "পার্স": মডেল ফিরে আসা বিষয়বস্তুকে টার্গেট ফরম্যাটে পার্স করা।

আপনি এখন ল্যাংচেইনে নির্মিত আউটপুট পার্সারগুলি দেখতে চলুন।

পাইডানিক পার্সার

নিচে পাইডানিকআউটপুটপার্সার দেওয়া হল, যা ল্যাংচেইন দ্বারা এনক্রিপ্ট করা হয়েছে। এই পার্সারটি পাইথন পাইডানিক লাইব্রেরিতে ভিত্তি এবং এটি ব্যবহার করা হয় আউটপুট ফলাফলগুলি পাইথন অবজেক্টে রূপান্তর করার জন্য।

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 ইন্টারফেস

রানাবল ইন্টারফেস

আউটপুট পার্সারটি রানাবল ইন্টারফেস সমর্থন করে, যা ল্যাংচেইন এক্সপ্রেশন ল্যাঙ্গুয়েজ (এলসিইইল) এর মধ্যের একটি মৌলিক গঠনক ব্লক হয়। এটি invoke, ainvoke, stream, astream, batch, abatch, astream_log ইত্যাদি এমন কলিং মেথড সমর্থন করে।

LCEL এ আউটপুট পার্সারের প্রয়োগ

আউটপুট পার্সারটি একটি স্ট্রিং বা বেসমেসেজ কে স্ট্রাকচারড ডেটা আকারে গ্রহণ করতে পারে এবং যেকোনো এক টাইপ এর ডেটা ফেরত দেয়। আমরা পার্সার চেইন তৈরি এবং আমদানি করার জন্য পার্সারগুলি যোগ করে সংকলন করা যেতে পারে।

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': 'অ্যান্টনি ভ্যান লিউয়েনহুক'}]

এলসিইএলে, আমরা বিভিন্ন প্রয়োজনীয়তা পূরণের জন্য বিভিন্ন পার্সার সংমিশ্রণ করে জটিল ডেটা প্রসেসিং ফ্লো তৈরি করতে পারি।