উদাহরণ রেফারেন্স ব্যবহার করুন

সাধারণভাবে এলএলএমকে রেফারেন্স উদাহরণ প্রদান করে এক্সট্রাকশনের গুণগতি উন্নত করা যায়।

টিপ: যাৎত্তবিকভাবে এই টিউটোরিয়ালটি সরনিয় টুল কলিং মডেল সহ যেকোনো জেএসওএন বা প্রোম্পট-ভিত্তিক কৌশলে উদাহরণ ব্যবহার করার উপর কেন্দ্রিত করে, তবে এই কৌশলটি সাধারণভাবে প্‌রযোজ্য এবং জেএসওএন মোর বা প্রোম্পটের সাথেও হাজিরা হবে।

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "You are an expert extraction algorithm. "
            "Only extract relevant information from the text. "
            "If you do not know the value of an attribute asked "
            "to extract, return null for the attribute's value.",
        ),
        MessagesPlaceholder("examples"),  # <-- উদাহরণ!
        ("human", "{text}"),
    ]
)

টেম্পলেট পরীক্ষা করুন:

from langchain_core.messages import (
    HumanMessage,
)

prompt.invoke(
    {"text": "this is some text", "examples": [HumanMessage(content="testing 1 2 3")]}
)
ChatPromptValue(messages=[SystemMessage(content="You are an expert extraction algorithm. Only extract relevant information from the text. If you do not know the value of an attribute asked to extract, return null for the attribute's value."), HumanMessage(content='testing 1 2 3'), HumanMessage(content='this is some text')])

স্কিমা সংজ্ঞায়িত করুন

আসুন কুইকস্টার্ট থেকে ব্যক্তির স্কিমা পুনরায় ব্যবহার করা যাক।

from typing import List, Optional

from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI


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]

Define reference examples

উদাহরণগুলি হতে পারে ইনপুট-আউটপুট জোড়ার তালিকা।

প্রতিটি উদাহরণে একটি উদাহরণ ইনপুট টেক্সট এবং উদাহরণ আউটপুট থাকে যা টেক্সট থেকে কি বের করতে হবে তা দেখায়।

তথ্য

এটা একটু জঙ্গল থেকে বাহিরে বিষয়, সুতরাং যদি আপনি বুঝতে পারেন না তবে বিবেচনা করতে অনুমতি দিতে পারেন!

উদাহরণের ফর্ম্যাট অ্যাপি ব্যবহার করা সাধন করার প্রত্যাশিত ফর্ম্যাট সাথে মেলে খেলা করা জরুরী।

এখানে, ফরমেট করা উদাহরণগুলি স্বামীতের অপেক্ষিত ফর্ম্যাটের সাথে মেলে খেলার জন্য হবে।

import uuid
from typing import Dict, List, TypedDict

from langchain_core.messages import (
    AIMessage,
    BaseMessage,
    HumanMessage,
    SystemMessage,
    ToolMessage,
)
from langchain_core.pydantic_v1 import BaseModel, Field


class Example(TypedDict):
    """একটি উদাহরণের প্রতিনিধিত্ব করে একটি উদাহরণ থেকে টেক্সট ইনপুট এবং প্রত্যাশিত শস্যি কল।

    তুলনার জন্য, উদাহরণটি প্রত্যাশিত শস্যি মডেলের প্রতিনিধিত্ব করা হয়।
    """

    input: str  # এটি উদাহরনের টেক্সট
    tool_calls: List[BaseModel]  # প্রত্যাশিত হতে হবে পাইডান্টিক মডেলের দুটি নমুনা


def tool_example_to_messages(example: Example) -> List[BaseMessage]:
    """একটি উদাহরন থেকে একটি LLM এ পৌঁছে দিতে পারা বক্তব্য একটি বার্তা তালিকায় রূপান্তর করুন।

    এই কোড হল একটি অ্যাডাপ্টার যা আমাদের উদাহরনটি রূপান্তর করে একটি LLM এ পৌঁছে দিতে পারা বার্তা তালিকায়।

    প্রতিটি উদাহরনের মেলার বার্তার জন্য তালিকা প্রকাশ করে:

    1) HumanMessage: থেকে প্রত্যাশিত বিষয়ের বিষয় ধারণ করে।
    2) AIMessage: এমে থেকে মডেল থেকে বের করা তথ্য রয়েছে।
    3) ToolMessage: নির্ধারণে জানাতে যে মডেল সঠিকভাবে টুল কল করেছে।

    কিছু চ্যাট মডেল অ্যাজেন্টের জন্য হাইপার-অপ্টিমাইজডে ছিলতা বেশি, সে জন্য ToolMessage প্রয়োজন হয়।।
    """
    messages: List[BaseMessage] = [HumanMessage(content=example["input"])]
    openai_tool_calls = []
    for tool_call in example["tool_calls"]:
        openai_tool_calls.append(
            {
                "id": str(uuid.uuid4()),
                "type": "function",
                "function": {
                    "নাম": tool_call.__class__.__name__,
                    "বিষয়": tool_call.json(),
                },
            }
        )
    messages.append(
        AIMessage(content="", additional_kwargs={"শস্যি কল": openai_tool_calls})
    )
    tool_outputs = example.get("tool_outputs") or [
        "আপনি এই টুলটি সঠিকভাবে কল করেছেন।"
    ] * len(openai_tool_calls)
    for output, tool_call in zip(tool_outputs, openai_tool_calls):
        messages.append(ToolMessage(content=output, tool_call_id=tool_call["id"]))
    return messages

পরবর্তী আসুন আমরা আমাদের উদাহরণগুলি নির্ধারণ করি এবং তারপরে মেসেজের ফরম্যাটে রূপান্তর করি।

examples = [
    (
        "মহাসাগরটি ব্যাপক এবং নীল। এটি অনেকটা 20,000 ফুট গভীর। এতে অনেক মাছ রয়েছে।",
        ব্যক্তি (নাম=না, উচ্চতা_মিটারে=না, চুলের_রং=না),
    ),
    (
        "ফিওনা ফরাসি থেকে স্পেনে দূরত্ব ভ্রমণ করেছিলেন।",
        ব্যক্তি (নাম="ফিওনা", উচ্চতা_মিটারে=না, চুলের_রং=না),
    ),
]


messages = []

for text, tool_call in examples:
    messages.extend(
        tool_example_to_messages({"input": text, "tool_calls": [tool_call]})
    )

আসুন প্রম্প্ট টেস্ট করি

prompt.invoke({"টেক্সট": "এটা কিছু টেক্সট", "উদাহরণ": messages})
ChatPromptValue(messages=[SystemMessage(content="আপনি একজন বিশেষজ্ঞ অনুষ্ঠান এলগোরিদম। পাঠের থেকে শুধুমাত্র প্রাসঙ্গিক তথ্য বের করুন। যদি আপনি যে কোন বৈশিষ্ট্যের মানটি বের করতে না পারেন তবে শূন্য লোপপ্রাপ্তির জন্য ঐ বৈশিষ্ট্যের মানটি প্রত্যাখ্যান করুন।"), HumanMessage(content="সমুদ্র অসীম এবং নীল। এটি ২০,০০০ ফুটের বেশি। এতে অনেক মাছ রয়েছে।"), AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'c75e57cc-8212-4959-81e9-9477b0b79126', 'type': 'function', 'function': {'name': 'Person', 'arguments': '{"name": null, "hair_color": null, "height_in_meters": null}'}}]}), ToolMessage(content='আপনি এই সরঞ্জাম সঠিকভাবে কল করেছেন।', tool_call_id='c75e57cc-8212-4959-81e9-9477b0b79126'), HumanMessage(content='ফিওনা ফ্রান্স থেকে স্পেনে দূরে ভ্রমণ করেছিল।'), AIMessage(content='', additional_kwargs={'tool_calls': [{'id': '69da50b5-e427-44be-b396-1e56d821c6b0', 'type': 'function', 'function': {'name': 'Person', 'arguments': '{"name": "ফিওনা", "hair_color": null, "height_in_meters": null}'}}]}), ToolMessage(content='আপনি এই সরঞ্জাম সঠিকভাবে কল করেছেন।', tool_call_id='69da50b5-e427-44be-b396-1e56d821c6b0'), HumanMessage(content='এটা কিছু লেখা')
])
## একটি এক্সট্রাক্টর তৈরি করুন

এখানে, আমরা **gpt-4** ব্যবহার করে একটি এক্সট্রাক্টর তৈরি করব।

```python
llm = ChatOpenAI(
    model="gpt-4-0125-preview",
    temperature=0,
)

runnable = prompt | llm.with_structured_output(
    schema=Data,
    method="function_calling",
    include_raw=False,
)
/Users/harrisonchase/workplace/langchain/libs/core/langchain_core/_api/beta_decorator.py:86: LangChainBetaWarning: ফাংশন `with_structured_output` বেটা অবস্থায় রয়েছে। এটি সক্রিয়ভাবে কাজ করা হচ্ছে, তাই API পরিবর্তন হতে পারে।
  warn_beta(

উদাহরণ ছাড়া

দেখা যাক, যদিও আমরা gpt-4 ব্যবহার করছি, তবুও এটি একটি খুব সহজ টেস্ট কেস দিয়ে ব্যর্থ হচ্ছে!

for _ in range(5):
    text = "সৌরজগৎটি বড়, তবে পৃথিবীতে কেবল 1 টি চাঁদ আছে।"
    print(runnable.invoke({"text": text, "examples": []}))
people=[]
people=[Person(name='earth', hair_color=None, height_in_meters=None)]
people=[Person(name='earth', hair_color=None, height_in_meters=None)]
people=[]
people=[]

উদাহরণ সহ

ব্যর্থতা ঠিক করতে প্রমাণ উদাহরণ সহায়ক!

for _ in range(5):
    text = "সৌরজগৎটি বড়, তবে পৃথিবীতে কেবল 1 টি চাঁদ আছে।"
    print(runnable.invoke({"text": text, "examples": messages}))
people=[]
people=[]
people=[]
people=[]
people=[]
runnable.invoke(
    {
        "text": "আমার নাম হ্যারিসন। আমার চুল কালো।",
        "examples": messages,
    }
)
Data(people=[Person(name='Harrison', hair_color='black', height_in_meters=None)])