পার্সিং
যারা প্রম্পট নির্দেশনা ভালোভাবে অনুসরণ করতে পারে তাদের সাথে এলএলএম দ্বারা নির্ধারিত তথ্য আউটপুট করার জন্য কাজে লাগানো যায়।
এই পদক্ষেপটি ভালো প্রম্পট ডিজাইন করা এবং তারপর এলএলএমস এর আউটপুটকে পার্স করার উপর নির্ভর করে।
এখানে, আমরা ক্লড ব্যবহার করবো যা নির্দেশনাগুলি ঠিক ভাবে অনুসরতে অসাধারণ! দেখুন Anthropic models।
from langchain_anthropic.chat_models import ChatAnthropic
model = ChatAnthropic(model_name="claude-3-sonnet-20240229", temperature=0)
টিপ: পার্সিং পদক্ষেপের জন্য সমস্ত একই বিবেচনা গুণমান প্রয়োগ করে। পারফরমেন্স বাড়ানোর জন্য বিবেচনা গুণমানের জন্য নির্দেশিকারণ পর্যালোচনা করুন।
এই টিউটোরিয়ালটি সহজ হতে হবে, কিন্তু সাধারণত এর মধ্যে পারফরমেন্স আউট করার জন্য উদাহরণ সংযোজন করা উচিত!
PydanticOutputParser ব্যবহার করা
নিম্নলিখিত উদাহরণটি প্রবর্তন একটি চ্যাট মডেলের আউটপুট পার্স করা হওয়ার জন্য নির্মিত PydanticOutputParser
ব্যবহার করে।
from typing import List, Optional
from langchain.output_parsers import PydanticOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field, validator
class Person(BaseModel):
"""ব্যক্তির তথ্য।"""
name: str = Field(..., description="ব্যক্তির নাম")
height_in_meters: float = Field(
..., description="ব্যক্তি দ্বারা মাপা লম্বা, মিটারে ব্যাক্তিগত সর্বসাধারণ."
)
class People(BaseModel):
"""একটি পাঠে সমস্যার ব্যক্তিগত তথ্য।"""
people: List[Person]
parser = PydanticOutputParser(pydantic_object=People)
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"ব্যবহারকারীর জিজ্ঞাসা উত্তর দিন। `json` ট্যাগে আউটপুট ঘেরে রাখুন\n{format_instructions}",
),
("human", "{query}"),
]
).partial(format_instructions=parser.get_format_instructions())
আসুন দেখে নেই এমন কী তথ্য মডেলে পাঠানো হয়
query = "আনা ২৩ বছর বয়সী এবং তার লম্বা ৬ ফুট"
print(prompt.format_prompt(query=query).to_string())
সিস্টেম: ব্যবহারকারীর জিজ্ঞাসা উত্তর দিন। `json` ট্যাগে আউটপুট ঘেরে রাখুন
আউটপুটটি বেশিরভাগ হোক JSON স্কিমা অনুযায়ী ফর্ম্যাট করা হওয়া উচিত।
উদাহরণস্বরূপ, স্কীমা {"properties": {"foo": {"title": "Foo", "description": "a list of strings", "type": "array", "items": {"type": "string"}}}, "required": ["foo"]} এর জন্য শব্দ " {"foo": ["bar", "baz"]} হল স্কীমা এর ভালভাবে ফর্ম্যাট করা উদাহরণ। আবার, " {"properties": {"foo": ["bar", "baz"]}} হল এর মধ্যে ভালভাবে ফর্ম্যাট করা নেই।
এখানে আউটপুট স্কীমা:
{"description": "একটি পাঠে সমসসিবিদ্বেষী তথ্য।", "properties": {"people": {"title": "People", "type": "array", "items": {"$ref": "#/definitions/Person"}}}, "required": ["people"], "definitions": {"Person": {"title": "Person", "description": "ব্যক্তির তথ্য।", "type": "object", "properties": {"name": {"title": "Name", "description": "ব্যক্তির নাম", "type": "string"}, "height_in_meters": {"title": "Height In Meters", "description": "ব্যক্তি দ্বারা মাপা লম্বা, মিটারে ব্যাক্তিগত সর্বসাধারণ.", "type": "number"}}, "required": ["name", "height_in_meters"]}}}
মানুষ: আনা ২৩ বছর বয়সী এবং তার লম্বা ৬ ফুট
chain = prompt | model | parser
chain.invoke({"query": query})
People(people=[Person(name='আনা', height_in_meters=1.83)])
কাস্টম পার্সিং
LangChain
এবং LCEL
দিয়ে একটি কাস্টম প্রম্প্ট এবং পার্সার তৈরি করা সহজ।
আপনি একটি সহজ ফাংশন ব্যবহার করতে পারেন মডেল থেকে আউটপুট পার্স করার জন্য!
import json
import re
from typing import List, Optional
from langchain_anthropic.chat_models import ChatAnthropic
from langchain_core.messages import AIMessage
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field, validator
class Person(BaseModel):
"""একটি ব্যক্তি সম্পর্কিত তথ্য।"""
name: str = Field(..., description="ব্যক্তির নাম")
height_in_meters: float = Field(
..., description="ব্যক্তির উচ্চতা মিটারে প্রকাশ করা।"
)
class People(BaseModel):
"""পাঠে সব মানুষের সনাক্ত তথ্য।"""
people: List[Person]
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"ব্যবহারকারী প্রশ্নে উত্তর দিন। আপনার উত্তরটি ```json দ্বারা প্রদত্ত স্কীমার সাথে মেলে। ``` তা নিশ্চিত করুন।",
),
("human", "{query}"),
]
).partial(schema=People.schema())
def extract_json(message: AIMessage) -> List[dict]:
"""একটি স্ট্রিং থেকে JSON সামগ্রী বের করে। JSON টি ```json এবং ``` ট্যাগের মধ্যে সন্নিহিত হয়েছে।
প্যারামিটার:
টেক্সট (str): JSON সামগ্রী ধারণ করা স্ট্রিং।
ফেরত:
list: বের করা JSON স্ট্রিংগুলির তালিকা।
"""
text = message.content
pattern = r"```json(.*?)```"
matches = re.findall(pattern, text, re.DOTALL)
try:
return [json.loads(match.strip()) for match in matches]
except Exception:
raise ValueError(f"পার্স করা যায়নি: {message}")
query = "অ্যানা ২৩ বছর বয়সী এবং সে ৬ ফুট উচ্চ"
print(prompt.format_prompt(query=query).to_string())
System: ব্যবহারকারী প্রশ্নে উত্তর দিন। আপনার উত্তরটি ```json দ্বারা প্রদত্ত স্কীমার সাথে মেলে। ``` তা নিশ্চিত করুন।
Human: অ্যানা ২৩ বছর বয়সী এবং সে ৬ ফুট উচ্চ
chain = prompt | model | extract_json
chain.invoke({"query": query})
[{'people': [{'name': 'অ্যানা', 'height_in_meters': 1.83}]}]
অন্যান্য লাইব্রেরিস
যদি আপনি পার্সিং পদ্ধতিতে উত্তোলন চান, তবে Kor লাইব্রেরি দেখুন। এটি একটি LangChain
মেইনটেইনার দ্বারা লেখা হয়েছে এবং এটি উদাহরণ গুলি গ্রহণ করার সুযোগ দেয়, ফরম্যাট নিয়ন্ত্রণ করার সুযোগ দেয় (যেমন, JSON বা CSV) এবং TypeScript এ স্কীমা প্রকাশ করার সুযোগ দেয়। এটি খুব ভালো ভাবে কাজ করে!