মূল কনটেন্টে যান
এআই টিউটোরিয়াল

miniEvoAgent দিয়ে টুল-কলিং ও স্ব-উন্নয়নশীল LLM এজেন্ট তৈরি করুন

এই টিউটোরিয়ালে miniEvoAgent পরিচয় করানো হয়েছে। এটি একক-অ্যাকশন LLM এজেন্ট তৈরি, Python টুল চালানো, QA পূর্বাভাস মূল্যায়ন এবং ফিডব্যাক থেকে প্রম্পট উন্নত করার জন্য একটি সহজপাঠ্য ফ্রেমওয়ার্ক। আপনি evo_repro প্যাকেজ ইনস্টল করবেন, OpenAI-সামঞ্জস্যপূর্ণ মডেল কনফিগার করবেন, মৌলিক ও টুল-সক্ষম এজেন্ট চালাবেন, বিবর্তন ট্রেস পর্যালোচনা করবেন এবং রিমোট মডেল কল ছাড়াই ফ্রেমওয়ার্কটি পরীক্ষা করবেন।

miniEvoAgent দিয়ে টুল-কলিং ও স্ব-উন্নয়নশীল LLM এজেন্ট তৈরি

miniEvoAgent কী?

miniEvoAgent হলো LLM-ভিত্তিক এজেন্ট কীভাবে তৈরি ও উন্নত করা হয় তা শেখার জন্য একটি সংক্ষিপ্ত Python ফ্রেমওয়ার্ক। EvoAgentX-এর অনুপ্রেরণায় তৈরি এই ফ্রেমওয়ার্কে এজেন্ট এক্সিকিউশন, টুল কলিং, মূল্যায়ন, প্রম্পট পুনর্লিখন এবং স্ব-বিবর্তনের মূল ধারণাগুলো রাখা হয়েছে, তবে বড় এজেন্ট ফ্রেমওয়ার্কের জটিলতা বাদ দেওয়া হয়েছে।

প্যাকেজটির বর্তমান নাম evo_repro। এর ইচ্ছাকৃতভাবে ছোট নকশা প্রতিটি প্রক্রিয়া পড়া, পরীক্ষা করা এবং সম্প্রসারণ করা সহজ করে। ওয়ার্কফ্লো গ্রাফ, মেমরি, ভিজ্যুয়াল এডিটর, বেঞ্চমার্ক অ্যাডাপ্টার বা বড় টুল ইকোসিস্টেম দেওয়ার পরিবর্তে এটি একটি স্বচ্ছ একক-অ্যাকশন এজেন্ট এবং প্রম্পট বিবর্তন লুপের ওপর গুরুত্ব দেয়।

ফ্রেমওয়ার্কটি কীভাবে কাজ করে

miniEvoAgent অ্যাপ্লিকেশন কয়েকটি নির্দিষ্ট উপাদান দিয়ে তৈরি হয়:

  • PromptTemplate: টাস্কের ইনপুটগুলো একটি প্রম্পট টেমপ্লেটে বসায়।
  • Action: একটি LLM-কে কল করে, প্রয়োজনে একাধিক ধাপে টুল এক্সিকিউশন সম্পন্ন করে এবং চূড়ান্ত প্রতিক্রিয়া পার্স করে।
  • Agent: একটি অ্যাকশনকে মোড়কবদ্ধ করে এবং একটি কাঠামোবদ্ধ বার্তা ফেরত দেয়।
  • Evaluator functions: exact match, token-level F1 এবং accuracy ব্যবহার করে QA পূর্বাভাসের স্কোর নির্ধারণ করে।
  • PromptRewriter: নির্দিষ্ট ফিডব্যাক উদাহরণ থেকে সংশোধিত প্রম্পট প্রস্তাব করতে একটি অপ্টিমাইজার LLM ব্যবহার করে।
  • PromptSelector: একই ডেভেলপমেন্ট সেটে একটি প্যারেন্ট প্রম্পটের সঙ্গে তার প্রার্থী প্রম্পটের তুলনা করে এবং যেটি ভালো ফল দেয় সেটি রাখে।
  • evolve: ট্রেনিং এক্সিকিউশন, ফিডব্যাক তৈরি, পুনর্লিখন, মূল্যায়ন এবং নির্বাচন বারবার সম্পন্ন করে।

মূল বৈশিষ্ট্য

  • একটি ন্যূনতম ও সহজে পরিদর্শনযোগ্য একক-অ্যাকশন এজেন্ট অ্যাবস্ট্রাকশন।
  • পরিবেশ ভেরিয়েবল বা স্থানীয় .env ফাইলের মাধ্যমে কনফিগার করা OpenAI-সামঞ্জস্যপূর্ণ LLM অ্যাডাপ্টার।
  • একাধিক ধাপে টুল এক্সিকিউশনসহ OpenAI-ধাঁচের ফাংশন টুল।
  • অপ্টিমাইজার LLM-এর মাধ্যমে ফিডব্যাক-নির্ভর প্রম্পট পুনর্লিখন।
  • ডেভেলপমেন্ট-সেট নির্বাচন, যেখানে স্কোর উন্নত হলেই কেবল কোনো প্রার্থীকে গ্রহণ করা হয়।
  • ট্রেনিং এক্সিকিউশন, পুনর্লিখনের ইনপুট, ডেভেলপমেন্ট স্কোর এবং নির্বাচনের সিদ্ধান্তসহ বিবর্তন ট্রেস।
  • রিমোট API কল ছাড়াই ফ্রেমওয়ার্কের আচরণ পরীক্ষা করার জন্য নির্ধারিত ফল প্রদানকারী নকল LLM।

miniEvoAgent ইনস্টল করুন

প্রয়োজনীয়তা

Python 3.10 বা পরবর্তী সংস্করণ ব্যবহার করুন। নিচের PowerShell কমান্ডগুলো রিপোজিটরিতে প্রবেশ করে, একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি ও সক্রিয় করে, pip আপডেট করে এবং প্যাকেজটি editable mode-এ ইনস্টল করে:

cd D:\Projects\RSIProject\student-project\Evo-repro
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -U pip
python -m pip install -e .

সোর্স কোড অধ্যয়ন বা পরিবর্তনের সময় editable installation উপযোগী, কারণ স্থানীয় প্যাকেজের পরিবর্তনগুলো সঙ্গে সঙ্গেই আপনার Python এনভায়রনমেন্টে পাওয়া যায়।

একটি OpenAI-সামঞ্জস্যপূর্ণ LLM কনফিগার করুন

ডিফল্ট OpenAILLM অ্যাডাপ্টার পরিবেশ ভেরিয়েবল বা স্থানীয় .env ফাইল থেকে সেটিংস পড়ে। PowerShell-এ API key এবং model এভাবে সেট করুন:

$env:OPENAI_API_KEY="your_api_key"
$env:OPENAI_MODEL="gpt-4o-mini"

আপনি অন্য কোনো OpenAI-সামঞ্জস্যপূর্ণ সেবা ব্যবহার করলে তার endpoint সেট করুন:

$env:OPENAI_BASE_URL="https://your-compatible-endpoint/v1"

বিকল্পভাবে, .env.example ফাইলটি .env নামে কপি করে সেখানে একই কনফিগারেশন মান যোগ করুন।

একটি মৌলিক প্রশ্নোত্তর এজেন্ট তৈরি করুন

একটি মৌলিক এজেন্টের জন্য একটি LLM, একটি প্রম্পট টেমপ্লেট, একটি আউটপুট পার্সার এবং একটি অ্যাকশন প্রয়োজন। এরপর এজেন্টটি একটি সহজ এক্সিকিউশন ইন্টারফেসের মাধ্যমে এসব উপাদান ব্যবহার করতে দেয়।

from evo_repro import Action, Agent, OpenAILLM, PromptTemplate, TextOutputParser

llm = OpenAILLM()

action = Action(
    name="answer_question",
    prompt_template=PromptTemplate(
        template="Answer the following question:\n\n{question}"
    ),
    llm=llm,
    output_parser=TextOutputParser(),
)

agent = Agent(
    name="qa_agent",
    description="Answers a single user question.",
    action=action,
)

message = agent.execute({
    "question": "What is Retrieval-Augmented Generation?"
})
print(message.content)

agent.execute-এ দেওয়া question কীটি টেমপ্লেটের {question} প্লেসহোল্ডারের সঙ্গে সম্পর্কিত। অ্যাকশনটি প্রম্পট তৈরি করে, কনফিগার করা LLM-এ পাঠায়, ফেরত আসা টেক্সট পার্স করে এবং ফলাফলটি একটি কাঠামোবদ্ধ বার্তায় মোড়কবদ্ধ করে।

আপনি প্যাকেজের সঙ্গে থাকা উদাহরণটিও চালাতে পারেন:

python examples\simple_agent.py

একটি কলযোগ্য Python টুল যোগ করুন

miniEvoAgent-এর টুলগুলো Python ফাংশনের ওপর তৈরি পাতলা মোড়ক। প্রতিটি টুল একটি JSON schema প্রদান করে, যা মডেল ফাংশন কলিংয়ের জন্য ব্যবহার করতে পারে, এবং একটি কাঠামোবদ্ধ ToolResult ফেরত দেয়।

প্যাকেজে get_word_length_tool রয়েছে, যা এর tools আর্গুমেন্টের মাধ্যমে একটি অ্যাকশনে সংযুক্ত করা যায়:

from evo_repro import Action, Agent, OpenAILLM, PromptTemplate, TextOutputParser
from evo_repro import get_word_length_tool

agent = Agent(
    name="tool_agent",
    description="Answers a question and can use tools.",
    action=Action(
        name="answer_with_tools",
        prompt_template=PromptTemplate(
            template=(
                "Answer the following question. "
                "Use tools when useful:\n\n{question}"
            )
        ),
        llm=OpenAILLM(),
        output_parser=TextOutputParser(),
        tools=[get_word_length_tool],
    ),
)

message = agent.execute({
    "question": 'How many characters are in "retrieval"?'
})

print(message.content)
print(message.metadata["tool_results"])

LLM কোনো সমর্থিত ফাংশনের অনুরোধ করলে, অ্যাকশনটি সেটি কার্যকর করে এবং কথোপকথনে টুলের ফলাফল ফিরিয়ে দেয়। চূড়ান্ত মডেল আউটপুট পার্স করার আগে অ্যাকশনটি এই প্রক্রিয়ার একাধিক ধাপ সমর্থন করে। টুল কার্যকরের রেকর্ড message.metadata["tool_results"]-এর মাধ্যমে পাওয়া যায়।

অন্তর্ভুক্ত টুল উদাহরণটি চালান:

python examples\tool_agent.py

প্রম্পটের স্ব-বিবর্তন বুঝুন

স্ব-বিবর্তন ব্যবস্থা একটি নিয়ন্ত্রিত প্রতিক্রিয়া ও মূল্যায়ন চক্রের মাধ্যমে প্রম্পট উন্নত করে:

  1. প্রশিক্ষণ উদাহরণে বর্তমান প্রম্পট চালান।
  2. পূর্বাভাস, প্রত্যাশিত লেবেল এবং মূল্যায়ন মেট্রিক্সকে প্রতিক্রিয়া উদাহরণে রূপান্তর করুন।
  3. একটি অপ্টিমাইজার LLM দ্বারা সমর্থিত PromptRewriter-কে একটি প্রার্থী প্রম্পট তৈরি করতে বলুন।
  4. একই ডেভেলপমেন্ট সেটে প্যারেন্ট ও প্রার্থী প্রম্পট উভয়ই মূল্যায়ন করুন।
  5. ভালো প্রম্পটটি ধরে রাখতে PromptSelector ব্যবহার করুন।
  6. কনফিগার করা সংখ্যক জেনারেশন পর্যন্ত প্রক্রিয়াটি পুনরাবৃত্তি করুন।

একটি জেনারেশন চালাতে চাইলে evolve_once(...) ব্যবহার করুন। এটি একটি EvolutionRoundTrace ফিরিয়ে দেয়। একাধিক জেনারেশন চালিয়ে চূড়ান্ত প্রম্পট ও সম্পূর্ণ ইতিহাস পেতে evolve(...) ব্যবহার করুন।

রিমোট মডেল ছাড়াই বিবর্তন অডিট করুন

রিপোজিটরিতে একটি নির্ধারক অডিট উদাহরণ রয়েছে, যা নকল LLM আচরণ ব্যবহার করে:

python examples\evolution_audit.py

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

QA পূর্বাভাস মূল্যায়ন করুন

অন্তর্নির্মিত মূল্যায়নকারীরা তিনটি ইচ্ছাকৃতভাবে সরল QA মেট্রিক প্রদান করে:

  • Exact match: মূল্যায়নকারীর তুলনা পদ্ধতি অনুযায়ী পূর্বাভাসটি প্রত্যাশিত উত্তরের সঙ্গে হুবহু মেলে কি না পরীক্ষা করে।
  • Token-level F1: পূর্বাভাস ও প্রত্যাশিত উত্তরের মধ্যে টোকেনের ওভারল্যাপ পরিমাপ করে।
  • Accuracy: সঠিক পূর্বাভাসের অনুপাত প্রকাশ করে।

এই মেট্রিকগুলো বিবর্তন লুপ যাচাই ও প্রদর্শনের জন্য তৈরি। প্রকল্পের নোট অনুযায়ী, পরে এগুলো নির্দিষ্ট বেঞ্চমার্ক বা কাজের উপযোগী মূল্যায়নকারী দিয়ে প্রতিস্থাপন করা যেতে পারে।

টেস্ট স্যুট চালান

রিপোজিটরির রুট থেকে সব টেস্ট চালান:

python -m pytest

কেন্দ্রিত টেস্ট স্যুটে এজেন্ট, টুল এবং বিবর্তন-সংক্রান্ত আচরণ অন্তর্ভুক্ত রয়েছে। যেখানে সম্ভব, নকল LLM বাস্তবায়ন ব্যবহার করা হয়, তাই API কী বা রিমোট মডেল কল ছাড়াই অধিকাংশ ফ্রেমওয়ার্ক লজিক যাচাই করা যায়।

উন্নত পরামর্শ

লাইভ পরীক্ষা করার আগে নির্ধারক টেস্ট ব্যবহার করুন

প্রম্পট নির্বাচন, টুল হ্যান্ডলিং বা বিবর্তন লজিক পরিবর্তন করার সময় নকল LLM উদাহরণ ও টেস্ট দিয়ে শুরু করুন। নির্ধারক আউটপুট ব্যর্থতাকে পুনরুৎপাদনযোগ্য করে এবং ফ্রেমওয়ার্কের বাগকে লাইভ মডেল প্রতিক্রিয়ার ভিন্নতা থেকে আলাদা করতে সহায়তা করে।

প্রতিটি জেনারেশনে ট্রেস পরিদর্শন করুন

কেবল চূড়ান্ত প্রম্পট দেখে কোনো বিবর্তন রান মূল্যায়ন করবেন না। রেকর্ড করা প্রশিক্ষণ এক্সিকিউশন, রিরাইটারকে দেওয়া প্রতিক্রিয়া, প্রার্থী প্রম্পট, ডেভেলপমেন্ট স্কোর এবং নির্বাচনের সিদ্ধান্ত পর্যালোচনা করুন। এই রেকর্ডগুলো দেখায় কেন কোনো প্রার্থী গৃহীত বা প্রত্যাখ্যাত হয়েছে।

প্রশিক্ষণ ও ডেভেলপমেন্টের ভূমিকা আলাদা রাখুন

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

গঠিত টুল ফলাফল পরিদর্শন করুন

টুল-সক্ষম এজেন্টের ক্ষেত্রে চূড়ান্ত টেক্সটের পাশাপাশি message.metadata["tool_results"] পরীক্ষা করুন। এতে মডেল কোনো টুল নির্বাচন করেছে কি না, এক্সিকিউশন সফল হয়েছে কি না এবং কী গঠিত ফলাফল ফেরত এসেছে তা যাচাই করতে সহায়তা করে।

প্রয়োজনে সামঞ্জস্যপূর্ণ কাস্টম এন্ডপয়েন্ট ব্যবহার করুন

OPENAI_BASE_URL সেটিং OpenAILLM-কে একটি OpenAI-সামঞ্জস্যপূর্ণ এন্ডপয়েন্টে নির্দেশ করতে দেয়। API কী ও নির্বাচিত মডেলকে এন্ডপয়েন্টের প্রয়োজনীয়তার সঙ্গে সামঞ্জস্যপূর্ণ রাখুন।

প্রকল্পের বর্তমান পরিসর বুঝুন

miniEvoAgent ইচ্ছাকৃতভাবে EvoAgentX-এর তুলনায় সীমিত। এটি বর্তমানে ওয়ার্কফ্লো গ্রাফ, মাল্টি-এজেন্ট অর্কেস্ট্রেশন, মেমরি, মানব-সম্পৃক্ততা বৈশিষ্ট্য, বেঞ্চমার্ক ইন্টিগ্রেশন, ভিজ্যুয়াল এডিটিং বা বিস্তৃত টুলকিটের দাবি করে না। রোডম্যাপে আরও সমৃদ্ধ ওয়ার্কফ্লো কম্পোজিশন, অতিরিক্ত প্রোভাইডার অ্যাডাপ্টার, বেঞ্চমার্ক লোডার, পুনর্ব্যবহারযোগ্য টুলকিট, JSON পারসিসটেন্স এবং অতিরিক্ত ডকুমেন্টেশন অন্তর্ভুক্ত রয়েছে, তবে এগুলো বর্তমান বৈশিষ্ট্য নয়, পরিকল্পিত বৈশিষ্ট্য।

পুনর্বিতরণের আগে লাইসেন্স যাচাই করুন

প্রকল্পে বর্তমানে কোনো লাইসেন্স ফাইল অন্তর্ভুক্ত নেই। কোড প্রকাশ বা পুনর্বিতরণের আগে উপযুক্ত লাইসেন্স যোগ করুন।

উপসংহার

miniEvoAgent LLM এজেন্ট ইঞ্জিনিয়ারিংয়ে প্রবেশের জন্য একটি ছোট ও পরীক্ষাযোগ্য পথ প্রদান করে। evo_repro প্যাকেজের মাধ্যমে আপনি প্রম্পট-চালিত এজেন্ট তৈরি করতে, OpenAI-স্টাইল ফাংশন টুল যোগ করতে, QA কর্মদক্ষতা পরিমাপ করতে, ব্যর্থতা থেকে প্রম্পট রিরাইট করতে এবং ডেভেলপমেন্ট সেটের মূল্যায়নের মাধ্যমে উন্নতিগুলো ধরে রাখতে পারেন। এর সংক্ষিপ্ত আর্কিটেকচার ও নির্ধারক উদাহরণগুলো এজেন্ট এক্সিকিউশন এবং প্রম্পট বিবর্তন কীভাবে অভ্যন্তরীণভাবে কাজ করে তা অধ্যয়নের জন্য বিশেষভাবে কার্যকর।