দ্রুত শুরু
এই দ্রুত শুরুতে, আমরা টেক্সট থেকে তথ্য বের করার জন্য ফাংশন/টুল কলিং করতে পারে চ্যাট মডেলগুলি ব্যবহার করব।
ফাংশন/টুল কলিং ব্যবহার করে এক্সট্রাকশন শুধুমাত্র মডেলগুলি সমর্থন করে।
সেট আপ
আমরা যে ল্যাংগচেইন মডেল ব্যবহার করব তা নির্বাচন করে, তা যেসব ডিপেন্ডেন্সিগুলি ইন্সটল করে তারপরে API কী সেট করবে!
!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="মিটারে পরিমাপিত উচ্চতা"
)
স্কিমা সংজ্ঞানা করার সময় দুটি সেরা প্র্যাকটিস:
- অ্যাট্রিবিউট এবং স্কিমা নিজে: এই তথ্যটি এলএলএমে প্ঠাচার করা হয় এবং তার মাধ্যমে তথ্য বের করার গুণগত গুণগতি উন্নত করার জন্য ব্যবহৃত হয়।
- এলএলএমকে জানা তথ্য তৈরি করার জন্য বাধ্য করা নয়! উপরে, আমরা অ্যাট্রিবিউটের জন্য
Optional
ব্যবহার করেছি যা বৈধ করে লন যদি তার উত্তরটি জানা না থাকে।
সেরা ফলাফলের জন্য, স্কিমা সঠিকভাবে বর্ণনা করুন এবং নিশ্চিত করুন যে মডেলটি তথ্য বের করতে বাধ্য নয় যদি কোনও তথ্য টেক্সটে থাকে না।
এক্সট্র্যাক্টর
আসুন আমরা উপরে সংজ্ঞা করা স্কিমার ব্যবহার করে একটি তথ্য এক্সট্র্যাক্টর তৈরি করি।
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",
"আপনি একজন উত্তোলন অ্যালগরিদম বিশেষজ্ঞ। "
"কেবল টেক্সট থেকে সংশ্লিষ্ট তথ্য বের করুন। "
"যদি আপনি কোনটির মান না জানেন, তবে অ্যাট্রিবিউটের মানের জন্য null রিটার্ন করুন।",
),
("human", "{text}"),
]
)
আমাদের একটি মডেল ব্যবহার করতে হবে যা ফাংশন/টুল কলিং সমর্থন করে।
from langchain_openai import ChatOpenAI
llm = ChatOpenAI()
runnable = prompt | llm.with_structured_output(schema=Person)
আসুন এটা টেস্ট করি।
text = "Alan Smith is 6 feet tall and has blond hair."
runnable.invoke({"text": text})
Person(name='Alan Smith', hair_color='blond', height_in_meters='1.8288')
বিশ্লেষণ জেবার পরিধির 💡 এলএলএমগুলি জেবারেটিভ মডেল, তাই তারা চমৎকার সম্পদ করতে পারে যেমন পাশার উচ্চতাকে মিটারে বিশ্লেষণ করা হয়েছে হাওয়াই!
একাধিক ইউনিট
সর্বাধিক মামলায়, সিঙ্গেল ইউনিটের পরিবর্তে, সংগঠিত সম্পূর্ণ তালিকা বাহির করা উচিত।
এটা খুব সহজে পাইডান্টিক ব্যবহার করে এই কাজটি করা যায়, এখানে একে অপরের মধ্যে মডেল নেস্ট করে।
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]
এখানে একাধিক ইউনিট বাহির করা হতে পারে না। Refrence Examples ব্যবহার করে প্রস্তুতির গুনগত হওয়ার উপযুক্ত উদাহরণ দেখতে আগামীতে চলা যাবে, এবং guidelines অধ্যায়টি দেখুন!
runnable = prompt | llm.with_structured_output(schema=Data)
text = "আমার নাম জেফ, আমার চুল কালো এবং আমি 6 ফুট উচ্চ। আনা আমার সমান রংযুক্ত চুলের একই উচ্চতায় আছে।"
runnable.invoke({"text": text})
Data(people=[Person(name='Jeff', hair_color=None, height_in_meters=None), Person(name='Anna', hair_color=None, height_in_meters=None)])
যখন স্কিমায় একাধিক ইউনিট বাহির করার সুযোগ থাকে, তখন প্রয়োজনীয় তথ্য ধারণ না থাকলে খালি তালিকা প্রদান করে তারপরে এই ইউনিট বাহির করা যায।
এটা সাধারণত ভালো কাজ! এটা অনুমতি দেয় একটি ইউনিটের প্রয়োজনীয় বৈশিষ্ট্য উল্লেখ করা বিনা এমন হওয়ার জন্য যেটি এই ইউনিটটি সনাক্ত করার জন্য বাধাদায়ক হতে পারে না।