LangChain Agent-এর মৌলিক ধারণা হল এলএলএম-কে মন হিসেবে ব্যবহার করা, স্বয়ংক্রিয়ভাবে ভাব করা, নির্ণয় নিতে ও পরিবিষ্ট কাজগুলি সম্পাদন করার মাধ্যমে পরিষ্কৃত কাজ পূর্ণ করার জন্য।

কোড বিশ্লেষণ দৃষ্টিকোণ থেকে, এটা মানে এ ধরনের যোগো বিগতে আমরা পূর্বেই বিভিন্ন API তৈরি করে এবং তারপরে এলএলএমকে একটি কাজ দেওয়ার চেয়ে দেই, যাতে এলএলএম দেখতে পারে কোন API-কে কল করবে তার কাজ সম্পন্ন করতে।

LangChain Agent যে সমস্যার সমাধানে লক্ষ্য করে তা বুঝতে হলে, আমরা একটি উদাহরণ দেখতে পারি।

যেমন:

যদি আমরা সম্পাদন সমাধান হিসাবে "Docker ব্যবহার করা যায় কি?" পরীক্ষা করতে চাই, তাহলে আমরা প্রথমে "ডকারের পরিচিতি" বাইদুতে খোঁজা, খোঁজের ফলাফল পর্যন্ত ব্রাউজ করব। এরপর "Docker বাস্তবায়নে সুবিধা ও অসুবিধা" অনুসন্ধান করে ফলাফল ব্রাউজ করব, এভাবে পাশাপাশি একটি নির্ণয় পেতে।

LangChain Agent এই প্রক্রিয়ার অনুরূপ। তো আমি একটা সিরিজ টুল (যেমন: বাইদু সার্চ, URL বিষয় নিয়ে টুল) প্রিপ্যাকেজ করতে পারি এবং তারপরে Agent কে লক্ষ্য নির্ধারণ করতে হয় "Docker কি ব্যবহার করা যাবে কি?" Agent তারপর প্রম্পস গড়ে তৈরি করবে যাতে LLM কে ডাকা যায়। এই কাজ সম্পাদনের জন্য, পরবর্তী পদক্ষেপ হল যে কোনটা ক্রিয়া (অর্থাৎ, কোনটা পদবি) ঠিক করা। এই 'এমন ই' আই যোজ্যতা ফিরেত দেবে। এইচটি কোড ক্যালিং এই 'টুল' কোডগুলি চালাবে এবং পপনে এই টুল সম্পন্ন দেওয়ার ফল ফেরা দেবে আই এ এবং পরবর্তী পদক্ষেপের জন্য কোনটি চালাতে হয়। এই প্রক্রিয়া পুনরাবৃত্তি করলে উল্লিখিত কাজ সম্পূর্ণ হয়।

টিপ: জিপিটি মডেলের মুক্তির সময় এই ব্যু'ডো সম্পদের প্রভাবাত্মক শক্তি, যা চিন্তা করার মন, এবং আমাদের তৈরি বিভিন্ন এপিআই ডাকানোর প্রেরণা দিতে পারে। এটি এলএলএম-এর সুযোগ কুশলতা অত্যন্ত বৃদ্ধি করে। বর্তমানে, এই বৈশিষ্ট্যটি আধুনিক অবস্থায় আছে এবং এটি বারবাদির অবস্থায় বা অসংখ্য ডাকানো থেকে বেশি টোকেন খায়। সমাপ্ত টোকেন লোডের চেয়ে প্রশ্নভুক্তির প্রথমে এলএলএমকে সাধারণ গণিতমুখী বিচার করার জন্য প্রথমে সুপারিশ করা হয়।

কোর সংকষ্ঠানা

এখন আসা করি সংশ্লিষ্ট উপাদান ও ধারণা পরিচিত করি।

এজেন্ট

একটি এজেন্ট আমাদের সাহায্যক। LangChain এজেন্টের অবস্থানের নিচের ইমপ্লিমেন্টেশন মাধ্যমে তাদের আগের এজেন্ট.

ল্যাঙগচেইন বিভিন্ন অনুসারে প্রকারের এজেন্ট প্রদান করে।

সরঞ্জাম

আমি মনে করি সরঞ্জামগুলি হল এপিআই, যেগুলি এলএলএম-এর ক্ষমতা প্রসারিত করার জন্য পূর্ব প্যাকেজ করা হয়েছে। এলএম নির্ধারিত করে যো নির্দিষ্ট এপিআই-টা কল করবে তার কাজ।

টুলকিট

টুলকিট সাধারণভাবে এলএমকে একটি বা দুটি সরঞ্জাম দেবে যেটি ল্যাংছেইনকে বিশেষ ভাবে ফলোর্ডেক করার জন্য বিকল্প দেবে।

অভিযান্তা নিবারক

অভিযান্তা নিবারক সম্মিলিত নির্দিষ্ট টুলটি (এপিআই) পরিচালনা করতে দায়িত্বশীল। এই রানটাইমের প্যাস্'ডো কোড হল:

next_action = agent.get_action(...)
while next_action != AgentFinish:
    observation = run(next_action)
    next_action = agent.get_action(..., next_action, observation)
return next_action

যদিও এই কার্যপ্রক্রিয়া জটিল নয়, অভিযান্তা তাদের সমস্যাগুলির অনেক বিস্তৃত বিবরণের সাথে ব্যবস্থা করে:

  1. যে সম্পর্কে অভিযান্তা একটি অস্তিত্ব নিয়ে কাজ নির্বাচন করে
  2. সরঞ্জাম সমস্যা ব্যবস্থা
  3. যে অ্যাজেন্ট আউটপুট বিপণ্য পুনর্নীতি দেবে যা একটি সরঞ্জাম কল হয়নি,
  4. ডিবাগিং ছাড়।

দ্রুত শুরু করুন

এই অনুচ্ছেদটি LangChain এজেন্টের মৌলিক ব্যবহারের বর্ণনা করে।

1. এলএলএম লোড করুন

প্রথমে আসুন এজেন্ট কন্ট্রোল করার জন্য ভাষা মডেল (LLM) লোড করি।

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)

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

পরে, আমরা এজেন্টের জন্য কিছু সরঞ্জাম ডিফাইন করি। আমরা খুব সাধারণ একটি পাইথন ফাংশন লেখব যা ইনপুট শব্দগুলির দৈর্ঘ্য গণনা করব।

from langchain.agents import tool

@tool
def get_word_length(word: str) -> int:
    """সবজটির দৈর্ঘ্য ফেরত দেবে।"""
    return len(word)

get_word_length.invoke("abc")

বিঃদ্রঃ: ফাংশন মন্তব্য খুব গুরুত্বপূর্ণ। এগুলি এলএলএম কে বলে যো কোন সমস্যা সমাধান করতে হয় তা বলে দেয়। get_word_length ফাংশনটি এলএলএম-কে বলে যো ঐ মনে হয় একটি শব্দের দৈর্ঘ্য গণনা করতে পারে।

3

এক সেট সরঞ্জাম ডিফাইন করুন

tools = [get_word_length]
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "আপনি একজন খুব শক্তিশালী সহায়ক, কিন্তু বর্তমান অবস্থাটা বোঝতে পারছেন না।",
        ),
        ("user", "{input}"),
        MessagesPlaceholder(variable_name="agent_scratchpad"),
    ]
)
llm_with_tools = llm.bind_tools(tools)
from langchain.agents.format_scratchpad.openai_tools import format_to_openai_tool_messages
from langchain.agents.output_parsers.openai_tools import OpenAIToolsAgentOutputParser

agent = (
    {
        "input": lambda x: x["input"],
        "agent_scratchpad": lambda x: format_to_openai_tool_messages(x["intermediate_steps"]),
    }
    | prompt
    | llm_with_tools
    | OpenAIToolsAgentOutputParser()
)
from langchain.agents import AgentExecutor

agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
list(agent_executor.stream({"input": "শব্দটি 'ইউডকা' এ কতগুলি অক্ষর?"}))
> একটি নতুন এজেন্ট ক্ষেত্রে প্রবেশ করছে...

আহ্বান: `get_word_length` চালিয়ে পারামিটার `{'word': 'educa'}` দিয়ে চালানো হচ্ছে

শব্দ "educa" এ 5 টি অক্ষর আছে।

> প্রয়োজনীয় নয়, কাজ শেষ হয়ে গেছে।
MEMORY_KEY = "chat_history"
prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "আপনি একজন অসাধারণ সহায়ক, কিন্তু শব্দের দৈর্ঘ্য গণনা করার জন্য খুব ভালো নয়।",
        ),
        MessagesPlaceholder(variable_name=MEMORY_KEY),
        ("user", "{input}"),
        MessagesPlaceholder(variable_name="agent_scratchpad"),
    ]
)
agent = (
    {
        "input": lambda x: x["input"],
        "agent_scratchpad": lambda x: format_to_openai_tool_messages(x["intermediate_steps"]),
        "chat_history": lambda x: x["chat_history"],
    }
    | prompt
    | llm_with_tools
    | OpenAIToolsAgentOutputParser()
)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
chat_history = []

input1 = "শব্দ 'শিক্ষা' কতটি অক্ষর আছে?"
result = agent_executor.invoke({"input": input1, "chat_history": chat_history})
chat_history.extend(
    [
        HumanMessage(content=input1),
        AIMessage(content=result["output"]),
    ]
)
agent_executor.invoke({"input": "এই শব্দটি কি সত্যিই বিদ্যমান?", "chat_history": chat_history})