ai-agents-for-beginners

মাইক্রোসফট এজেন্ট ফ্রেমওয়ার্ক অন্বেষণ

Agent Framework

পরিচিতি

এই পাঠে আলোচনা করা হবে:

শেখার লক্ষ্য

এই পাঠ শেষ করার পরে, আপনি জানতে পারবেন:

কোড নমুনা

মাইক্রোসফট এজেন্ট ফ্রেমওয়ার্ক (MAF) এর কোড নমুনাগুলি এই রিপোজিটরিতে xx-python-agent-framework এবং xx-dotnet-agent-framework ফাইলগুলির মধ্যে পাওয়া যাবে।

মাইক্রোসফট এজেন্ট ফ্রেমওয়ার্ক বোঝা

Framework Intro

মাইক্রোসফট এজেন্ট ফ্রেমওয়ার্ক (MAF) Semantic Kernel এবং AutoGen থেকে প্রাপ্ত অভিজ্ঞতা এবং শিক্ষা ভিত্তিক। এটি প্রোডাকশন এবং গবেষণা পরিবেশে দেখা বিভিন্ন এজেন্টিক ব্যবহারের ক্ষেত্রে নমনীয়তা প্রদান করে, যার মধ্যে রয়েছে:

প্রোডাকশনে AI এজেন্ট সরবরাহ করার জন্য, MAF অন্তর্ভুক্ত করেছে:

মাইক্রোসফট এজেন্ট ফ্রেমওয়ার্ক আন্তঃপরিচালনযোগ্য হওয়ার উপরও মনোযোগ কেন্দ্রীভূত করেছে:

এখন আমরা মাইক্রোসফট এজেন্ট ফ্রেমওয়ার্কের কিছু মূল ধারণাগুলিতে এই বৈশিষ্ট্যগুলি কীভাবে প্রয়োগ করা হয় তা দেখব।

মাইক্রোসফট এজেন্ট ফ্রেমওয়ার্কের মূল ধারণা

এজেন্ট

Agent Framework

এজেন্ট তৈরি করা

এজেন্ট তৈরি করা হয় ইনফারেন্স সার্ভিস (LLM Provider), AI এজেন্টের জন্য অনুসরণ করার নির্দেশাবলী এবং একটি নির্ধারিত name সংজ্ঞায়িত করে:

agent = AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent( instructions="You are good at recommending trips to customers based on their preferences.", name="TripRecommender" )

উপরের উদাহরণটি Azure OpenAI ব্যবহার করছে, তবে এজেন্টগুলি বিভিন্ন পরিষেবা ব্যবহার করে তৈরি করা যেতে পারে, যার মধ্যে রয়েছে Azure AI Foundry Agent Service:

AzureAIAgentClient(async_credential=credential).create_agent( name="HelperAgent", instructions="You are a helpful assistant." ) as agent

OpenAI Responses, ChatCompletion APIs

agent = OpenAIResponsesClient().create_agent( name="WeatherBot", instructions="You are a helpful weather assistant.", )
agent = OpenAIChatClient().create_agent( name="HelpfulAssistant", instructions="You are a helpful assistant.", )

বা A2A প্রোটোকল ব্যবহার করে রিমোট এজেন্ট:

agent = A2AAgent( name=agent_card.name, description=agent_card.description, agent_card=agent_card, url="https://your-a2a-agent-host" )

এজেন্ট চালানো

এজেন্টগুলি .run বা .run_stream পদ্ধতি ব্যবহার করে চালানো হয়, যা নন-স্ট্রিমিং বা স্ট্রিমিং প্রতিক্রিয়ার জন্য ব্যবহৃত হয়।

result = await agent.run("What are good places to visit in Amsterdam?")
print(result.text)
async for update in agent.run_stream("What are the good places to visit in Amsterdam?"):
    if update.text:
        print(update.text, end="", flush=True)

প্রতিটি এজেন্ট রানেও max_tokens, এজেন্টের দ্বারা আহ্বান করা টুল, এমনকি এজেন্টের জন্য ব্যবহৃত model এর মতো প্যারামিটার কাস্টমাইজ করার বিকল্প থাকতে পারে।

এটি এমন ক্ষেত্রে কার্যকর যেখানে ব্যবহারকারীর কাজ সম্পন্ন করার জন্য নির্দিষ্ট মডেল বা টুল প্রয়োজন।

টুল

টুলগুলি এজেন্ট সংজ্ঞায়িত করার সময় সংজ্ঞায়িত করা যেতে পারে:

def get_attractions( location: Annotated[str, Field(description="The location to get the top tourist attractions for")], ) -> str: """Get the top tourist attractions for a given location.""" return f"The top attractions for {location} are." 


# When creating a ChatAgent directly 

agent = ChatAgent( chat_client=OpenAIChatClient(), instructions="You are a helpful assistant", tools=[get_attractions]

এবং এজেন্ট চালানোর সময়ও:


result1 = await agent.run( "What's the best place to visit in Seattle?", tools=[get_attractions] # Tool provided for this run only )

এজেন্ট থ্রেড

এজেন্ট থ্রেডগুলি বহু-টার্ন কথোপকথন পরিচালনা করতে ব্যবহৃত হয়। থ্রেডগুলি তৈরি করা যেতে পারে:

থ্রেড তৈরি করতে কোডটি দেখতে এরকম:

# Create a new thread. 
thread = agent.get_new_thread() # Run the agent with the thread. 
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)

আপনি পরে ব্যবহারের জন্য থ্রেড সংরক্ষণ করতে এটি সিরিয়ালাইজ করতে পারেন:

# Create a new thread. 
thread = agent.get_new_thread() 

# Run the agent with the thread. 

response = await agent.run("Hello, how are you?", thread=thread) 

# Serialize the thread for storage. 

serialized_thread = await thread.serialize() 

# Deserialize the thread state after loading from storage. 

resumed_thread = await agent.deserialize_thread(serialized_thread)

এজেন্ট মিডলওয়্যার

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

Function Middleware

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

নিচের কোডে next সংজ্ঞায়িত করে যে পরবর্তী মিডলওয়্যার বা প্রকৃত ফাংশনটি কল করা উচিত কিনা।

async def logging_function_middleware(
    context: FunctionInvocationContext,
    next: Callable[[FunctionInvocationContext], Awaitable[None]],
) -> None:
    """Function middleware that logs function execution."""
    # Pre-processing: Log before function execution
    print(f"[Function] Calling {context.function.name}")

    # Continue to next middleware or function execution
    await next(context)

    # Post-processing: Log after function execution
    print(f"[Function] {context.function.name} completed")

Chat Middleware

এই মিডলওয়্যারটি এজেন্ট এবং LLM-এর মধ্যে অনুরোধগুলির মধ্যে একটি ক্রিয়া সম্পাদন বা লগ করতে দেয়।

এটি গুরুত্বপূর্ণ তথ্য ধারণ করে যেমন messages যা AI পরিষেবাতে পাঠানো হচ্ছে।

async def logging_chat_middleware(
    context: ChatContext,
    next: Callable[[ChatContext], Awaitable[None]],
) -> None:
    """Chat middleware that logs AI interactions."""
    # Pre-processing: Log before AI call
    print(f"[Chat] Sending {len(context.messages)} messages to AI")

    # Continue to next middleware or AI service
    await next(context)

    # Post-processing: Log after AI response
    print("[Chat] AI response received")

এজেন্ট মেমরি

Agentic Memory পাঠে আলোচনা করা হয়েছে, মেমরি এজেন্টকে বিভিন্ন প্রসঙ্গে কাজ করতে সক্ষম করার একটি গুরুত্বপূর্ণ উপাদান। MAF বিভিন্ন ধরনের মেমরি প্রদান করে:

In-Memory Storage

এটি অ্যাপ্লিকেশন রানটাইমের সময় থ্রেডে সংরক্ষিত মেমরি।

# Create a new thread. 
thread = agent.get_new_thread() # Run the agent with the thread. 
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)

Persistent Messages

এই মেমরি বিভিন্ন সেশনের মধ্যে কথোপকথনের ইতিহাস সংরক্ষণ করতে ব্যবহৃত হয়। এটি chat_message_store_factory ব্যবহার করে সংজ্ঞায়িত করা হয়:

from agent_framework import ChatMessageStore

# Create a custom message store
def create_message_store():
    return ChatMessageStore()

agent = ChatAgent(
    chat_client=OpenAIChatClient(),
    instructions="You are a Travel assistant.",
    chat_message_store_factory=create_message_store
)

Dynamic Memory

এই মেমরি এজেন্ট চালানোর আগে প্রসঙ্গে যোগ করা হয়। এই মেমরি mem0-এর মতো বাহ্যিক পরিষেবাগুলিতে সংরক্ষণ করা যেতে পারে:

from agent_framework.mem0 import Mem0Provider

# Using Mem0 for advanced memory capabilities
memory_provider = Mem0Provider(
    api_key="your-mem0-api-key",
    user_id="user_123",
    application_id="my_app"
)

agent = ChatAgent(
    chat_client=OpenAIChatClient(),
    instructions="You are a helpful assistant with memory.",
    context_providers=memory_provider
)

এজেন্ট পর্যবেক্ষণযোগ্যতা

পর্যবেক্ষণযোগ্যতা নির্ভরযোগ্য এবং রক্ষণাবেক্ষণযোগ্য এজেন্টিক সিস্টেম তৈরি করতে গুরুত্বপূর্ণ। MAF OpenTelemetry-এর সাথে ইন্টিগ্রেট করে ট্রেসিং এবং মিটার প্রদান করে আরও ভালো পর্যবেক্ষণযোগ্যতার জন্য।

from agent_framework.observability import get_tracer, get_meter

tracer = get_tracer()
meter = get_meter()
with tracer.start_as_current_span("my_custom_span"):
    # do something
    pass
counter = meter.create_counter("my_custom_counter")
counter.add(1, {"key": "value"})

ওয়ার্কফ্লো

MAF এমন ওয়ার্কফ্লো প্রদান করে যা একটি কাজ সম্পন্ন করার জন্য পূর্ব-সংজ্ঞায়িত ধাপ এবং সেই ধাপগুলিতে উপাদান হিসাবে AI এজেন্ট অন্তর্ভুক্ত করে।

ওয়ার্কফ্লো বিভিন্ন উপাদান নিয়ে গঠিত যা আরও ভালো নিয়ন্ত্রণ প্রবাহ সক্ষম করে। ওয়ার্কফ্লো মাল্টি-এজেন্ট অর্কেস্ট্রেশন এবং চেকপয়েন্টিং সক্ষম করে যা ওয়ার্কফ্লো স্টেট সংরক্ষণ করে।

ওয়ার্কফ্লোর মূল উপাদানগুলি হল:

Executors

Executors ইনপুট বার্তা গ্রহণ করে, তাদের নির্ধারিত কাজ সম্পাদন করে এবং তারপর একটি আউটপুট বার্তা তৈরি করে। এটি বৃহত্তর কাজ সম্পন্ন করার দিকে ওয়ার্কফ্লোকে এগিয়ে নিয়ে যায়। Executors AI এজেন্ট বা কাস্টম লজিক হতে পারে।

Edges

Edges ওয়ার্কফ্লোতে বার্তার প্রবাহ সংজ্ঞায়িত করতে ব্যবহৃত হয়। এগুলি হতে পারে:

Direct Edges - Executors-এর মধ্যে সরল এক-টু-এক সংযোগ:

from agent_framework import WorkflowBuilder

builder = WorkflowBuilder()
builder.add_edge(source_executor, target_executor)
builder.set_start_executor(source_executor)
workflow = builder.build()

Conditional Edges - নির্দিষ্ট শর্ত পূরণের পরে সক্রিয় হয়। উদাহরণস্বরূপ, যখন হোটেলের রুম পাওয়া যায় না, তখন একটি Executor অন্যান্য বিকল্পগুলি প্রস্তাব করতে পারে।

Switch-case Edges - সংজ্ঞায়িত শর্তের উপর ভিত্তি করে বার্তাগুলি বিভিন্ন Executors-এ রুট করে। উদাহরণস্বরূপ, যদি ভ্রমণ গ্রাহকের অগ্রাধিকার অ্যাক্সেস থাকে এবং তাদের কাজগুলি অন্য একটি ওয়ার্কফ্লো দ্বারা পরিচালিত হবে।

Fan-out Edges - এক বার্তা একাধিক টার্গেটে পাঠান।

Fan-in Edges - বিভিন্ন Executors থেকে একাধিক বার্তা সংগ্রহ করুন এবং এক টার্গেটে পাঠান।

Events

ওয়ার্কফ্লোতে আরও ভালো পর্যবেক্ষণযোগ্যতা প্রদান করতে, MAF কার্যকর করার জন্য বিল্ট-ইন ইভেন্ট প্রদান করে, যার মধ্যে রয়েছে:

অন্যান্য ফ্রেমওয়ার্ক থেকে মাইগ্রেট করা (Semantic Kernel এবং AutoGen)

MAF এবং Semantic Kernel এর মধ্যে পার্থক্য

সরল এজেন্ট তৈরি

Semantic Kernel প্রতিটি এজেন্টের জন্য একটি Kernel instance তৈরি করার উপর নির্ভর করে। MAF একটি সরল পদ্ধতি ব্যবহার করে প্রধান প্রদানকারীদের জন্য এক্সটেনশন ব্যবহার করে।

agent = AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent( instructions="You are good at reccomending trips to customers based on their preferences.", name="TripRecommender" )

এজেন্ট থ্রেড তৈরি

Semantic Kernel-এ থ্রেডগুলি ম্যানুয়ালি তৈরি করতে হয়। MAF-এ, এজেন্ট সরাসরি একটি থ্রেড বরাদ্দ করা হয়।

thread = agent.get_new_thread() # Run the agent with the thread. 

টুল নিবন্ধন

Semantic Kernel-এ, টুলগুলি Kernel-এ নিবন্ধিত হয় এবং তারপর Kernel এজেন্টে পাস করা হয়। MAF-এ, টুলগুলি সরাসরি এজেন্ট তৈরি করার সময় নিবন্ধিত হয়।

agent = ChatAgent( chat_client=OpenAIChatClient(), instructions="You are a helpful assistant", tools=[get_attractions]

MAF এবং AutoGen এর মধ্যে পার্থক্য

Teams বনাম Workflows

AutoGen-এ এজেন্টদের ইভেন্ট চালিত কার্যকলাপের জন্য Teams ইভেন্ট স্ট্রাকচার। MAF Workflows ব্যবহার করে যা গ্রাফ ভিত্তিক আর্কিটেকচারের মাধ্যমে ডেটা Executors-এ রুট করে।

টুল তৈরি

AutoGen এজেন্টদের কল করার জন্য ফাংশন মোড়ানোর জন্য FunctionTool ব্যবহার করে। MAF @ai_function ব্যবহার করে যা অনুরূপভাবে কাজ করে তবে প্রতিটি ফাংশনের জন্য স্কিমা স্বয়ংক্রিয়ভাবে অনুমান করে।

এজেন্ট আচরণ

AutoGen-এ এজেন্টগুলি ডিফল্টরূপে এক-টার্ন এজেন্ট, যদি না max_tool_iterations উচ্চতর কিছুতে সেট করা হয়। MAF-এ ChatAgent ডিফল্টরূপে মাল্টি-টার্ন, অর্থাৎ এটি ব্যবহারকারীর কাজ সম্পন্ন না হওয়া পর্যন্ত টুল কল করতে থাকবে।

কোড নমুনা

মাইক্রোসফট এজেন্ট ফ্রেমওয়ার্কের কোড নমুনাগুলি এই রিপোজিটরিতে xx-python-agent-framework এবং xx-dotnet-agent-framework ফাইলগুলির মধ্যে পাওয়া যাবে।

মাইক্রোসফট এজেন্ট ফ্রেমওয়ার্ক সম্পর্কে আরও প্রশ্ন আছে?

Azure AI Foundry Discord এ যোগ দিন, অন্যান্য শিক্ষার্থীদের সাথে দেখা করুন, অফিস আওয়ার্সে অংশগ্রহণ করুন এবং আপনার AI এজেন্ট সম্পর্কিত প্রশ্নের উত্তর পান।


অস্বীকৃতি:
এই নথিটি AI অনুবাদ পরিষেবা Co-op Translator ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না।