![]()
यह पाठ निम्नलिखित को कवर करेगा:
इस पाठ को पूरा करने के बाद, आप जानेंगे कि कैसे:
Microsoft Agent Framework (MAF) के लिए कोड उदाहरण इस रिपॉजिटरी में xx-python-agent-framework और xx-dotnet-agent-framework फाइलों के तहत पाए जा सकते हैं।

Microsoft Agent Framework (MAF) Microsoft का एक एकीकृत फ्रेमवर्क है जो AI एजेंट बनाने के लिए है। यह उत्पादन और शोध वातावरण दोनों में देखी जाने वाली एजेंटिक उपयोग केसों की विस्तृत विविधता को संबोधित करने के लिए लचीलापन प्रदान करता है, जिनमें शामिल हैं:
AI एजेंट को उत्पादन में प्रदान करने के लिए, MAF में निम्नलिखित सुविधाएँ भी शामिल हैं:
Microsoft Agent Framework का फोकस सहयोगशीलता पर भी है:
आइए देखें कि Microsoft Agent Framework की कुछ मूल अवधारणाओं पर ये विशेषताएं कैसे लागू की जाती हैं।

एजेंट बनाना
एजेंट का निर्माण इनफेरेंस सेवा (LLM प्रदाता) को परिभाषित करके, 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 का उपयोग किया गया है लेकिन एजेंट विभिन्न सेवाओं का उपयोग करके बनाए जा सकते हैं, जिनमें Microsoft 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.", )
या MiniMax, जो बड़े संदर्भ विंडो (204K टोकन तक) के साथ OpenAI-संगत API प्रदान करता है:
agent = OpenAIChatClient(base_url="https://api.minimax.io/v1", api_key=os.environ["MINIMAX_API_KEY"], model_id="MiniMax-M2.7").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 जैसे पैरामीटर, एजेंट द्वारा कॉल किए जाने वाले tools, और यहां तक कि एजेंट के लिए उपयोग किए गए 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."
# जब सीधे एक ChatAgent बनाया जा रहा हो
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] # इस रन के लिए केवल टूल प्रदान किया गया है )
एजेंट थ्रेड्स
एजेंट थ्रेड्स का उपयोग मल्टी-टर्न वार्तालापों को संभालने के लिए किया जाता है। थ्रेड्स को या तो निम्नलिखित से बनाया जा सकता है:
get_new_thread() का उपयोग करके जो थ्रेड को समय के साथ संजोने की अनुमति देता हैथ्रेड बनाने के लिए कोड इस तरह दिखता है:
# एक नया थ्रेड बनाएं।
thread = agent.get_new_thread() # थ्रेड के साथ एजेंट चलाएं।
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)
आप बाद में उपयोग के लिए थ्रेड को सीरियलाइज़ भी कर सकते हैं:
# एक नया थ्रेड बनाएं।
thread = agent.get_new_thread()
# थ्रेड के साथ एजेंट चलाएं।
response = await agent.run("Hello, how are you?", thread=thread)
# संग्रह के लिए थ्रेड को सीरियलाइज़ करें।
serialized_thread = await thread.serialize()
# संग्रह से लोड करने के बाद थ्रेड स्थिति को डीसीरियलाइज़ करें।
resumed_thread = await agent.deserialize_thread(serialized_thread)
एजेंट मिडलवेयर
एजेंट उपयोगकर्ता के कार्य पूरे करने के लिए टूल्स और LLMs के साथ इंटरैक्ट करते हैं। कुछ परिदृश्यों में, हम इन इंटरैक्शनों के बीच निष्पादन या ट्रैक करना चाहते हैं। एजेंट मिडलवेयर हमें ऐसा करने की अनुमति देता है:
फ़ंक्शन मिडलवेयर
यह मिडलवेयर एजेंट और उस फंक्शन/टूल के बीच एक क्रिया निष्पादित करने देता है जिसे एजेंट कॉल करेगा। इसका एक उदाहरण तब हो सकता है जब आप फंक्शन कॉल पर लॉगिंग करना चाहते हैं।
नीचे के कोड में next निर्धारित करता है कि अगला मिडलवेयर या वास्तविक फंक्शन कॉल होना चाहिए।
async def logging_function_middleware(
context: FunctionInvocationContext,
next: Callable[[FunctionInvocationContext], Awaitable[None]],
) -> None:
"""Function middleware that logs function execution."""
# पूर्व-प्रसंस्करण: फ़ंक्शन निष्पादन से पहले लॉग करें
print(f"[Function] Calling {context.function.name}")
# अगले मिडलवेयर या फ़ंक्शन निष्पादन पर जारी रखें
await next(context)
# पश्च-प्रसंस्करण: फ़ंक्शन निष्पादन के बाद लॉग करें
print(f"[Function] {context.function.name} completed")
चैट मिडलवेयर
यह मिडलवेयर एजेंट और LLM के बीच अनुरोधों के बीच कार्रवाई या लॉगिंग करने की अनुमति देता है।
इसमें महत्वपूर्ण जानकारी शामिल है जैसे कि AI सेवा को भेजे जा रहे messages।
async def logging_chat_middleware(
context: ChatContext,
next: Callable[[ChatContext], Awaitable[None]],
) -> None:
"""Chat middleware that logs AI interactions."""
# पूर्व-संसाधन: एआई कॉल से पहले लॉग
print(f"[Chat] Sending {len(context.messages)} messages to AI")
# अगले मिडलवेयर या एआई सेवा तक जारी रखें
await next(context)
# पश्च-प्रसंस्करण: एआई प्रतिक्रिया के बाद लॉग
print("[Chat] AI response received")
एजेंट मेमोरी
जैसा कि Agentic Memory पाठ में कवर किया गया है, मेमोरी एजेंट को विभिन्न संदर्भों में कार्य करने में सक्षम करने के लिए एक महत्वपूर्ण तत्व है। MAF कई प्रकार की मेमोरी प्रदान करता है:
इन-मेमोरी स्टोरेज
यह मेमोरी एप्लिकेशन रनटाइम के दौरान थ्रेड्स में संग्रहीत होती है।
# एक नया थ्रेड बनाएं।
thread = agent.get_new_thread() # थ्रेड के साथ एजेंट को चलाएं।
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)
स्थायी संदेश
यह मेमोरी विभिन्न सत्रों में बातचीत का इतिहास संग्रहीत करने के लिए उपयोग की जाती है। इसे chat_message_store_factory के माध्यम से परिभाषित किया जाता है:
from agent_framework import ChatMessageStore
# एक कस्टम संदेश स्टोर बनाएं
def create_message_store():
return ChatMessageStore()
agent = ChatAgent(
chat_client=OpenAIChatClient(),
instructions="You are a Travel assistant.",
chat_message_store_factory=create_message_store
)
डायनामिक मेमोरी
यह मेमोरी एजेंटों को चलाने से पहले संदर्भ में जोड़ी जाती है। ये मेमोरी बाहरी सेवाओं जैसे mem0 में संग्रहीत की जा सकती हैं:
from agent_framework.mem0 import Mem0Provider
# उन्नत मेमोरी क्षमताओं के लिए Mem0 का उपयोग करना
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"):
# कुछ करें
pass
counter = meter.create_counter("my_custom_counter")
counter.add(1, {"key": "value"})
MAF कार्यप्रवाह प्रदान करता है, जो किसी कार्य को पूरा करने के लिए पूर्व-परिभाषित चरण होते हैं और उन चरणों में AI एजेंट शामिल होते हैं।
कार्यप्रवाह विभिन्न घटकों से बने होते हैं जो बेहतर नियंत्रण प्रवाह की अनुमति देते हैं। कार्यप्रवाह मल्टी-एजेंट ऑर्केस्ट्रेशन और चेकपॉइंटिंग को सक्षम करते हैं ताकि कार्यप्रवाह की स्थिति सहेजी जा सके।
कार्यप्रवाह के मुख्य घटक हैं:
एक्जीक्यूटर्स
एक्जीक्यूटर्स इनपुट संदेश प्राप्त करते हैं, अपने सौंपे गए कार्य करते हैं, और फिर आउटपुट संदेश उत्पन्न करते हैं। इससे कार्यप्रवाह बड़े कार्य को पूरा करने की दिशा में आगे बढ़ता है। एक्जीक्यूटर्स AI एजेंट या कस्टम लॉजिक हो सकते हैं।
एजेस
एजेस कार्यप्रवाह में संदेशों के प्रवाह को परिभाषित करने के लिए उपयोग किए जाते हैं। ये हो सकते हैं:
डायरेक्ट एजेस - एक्जीक्यूटर्स के बीच सरल एक-से-एक कनेक्शन:
from agent_framework import WorkflowBuilder
builder = WorkflowBuilder()
builder.add_edge(source_executor, target_executor)
builder.set_start_executor(source_executor)
workflow = builder.build()
शर्तीय एजेस - जब कोई शर्त पूरी होती है तो सक्रिय होती हैं। उदाहरण के लिए, जब होटल के कमरे उपलब्ध नहीं होते, एक्जीक्यूटर अन्य विकल्प सुझा सकता है।
स्विच-केस एजेस - परिभाषित शर्तों के आधार पर संदेशों को विभिन्न एक्जीक्यूटर्स को मार्गित करती हैं। उदाहरणतः यदि यात्रा ग्राहक के पास प्राथमिकता पहुँच है, तो उनके कार्य अन्य कार्यप्रवाह के माध्यम से संभाले जाएंगे।
फैन-आउट एजेस - एक संदेश को कई लक्ष्यों को भेजना।
फैन-इन एजेस - विभिन्न एक्जीक्यूटर्स से कई संदेश इकट्ठा करके एक लक्ष्य को भेजना।
इवेंट्स
कार्यप्रवाह में बेहतर ऑब्जर्वेबिलिटी प्रदान करने के लिए, MAF में निष्पादन के लिए इनबिल्ट इवेंट्स होते हैं, जिनमें शामिल हैं:
WorkflowStartedEvent - कार्यप्रवाह निष्पादन शुरू होता हैWorkflowOutputEvent - कार्यप्रवाह आउटपुट उत्पन्न करता हैWorkflowErrorEvent - कार्यप्रवाह त्रुटि का सामना करता हैExecutorInvokeEvent - एक्जीक्यूटर प्रसंस्करण शुरू करता हैExecutorCompleteEvent - एक्जीक्यूटर प्रसंस्करण पूरा करता हैRequestInfoEvent - एक अनुरोध जारी किया गया हैऊपर के खंड Microsoft Agent Framework की मुख्य अवधारणाओं को कवर करते हैं। जैसे-जैसे आप अधिक जटिल एजेंट बनाते हैं, यहाँ कुछ उन्नत पैटर्न हैं जिन्हें ध्यान में रखें:
Microsoft Agent Framework के लिए कोड उदाहरण इस रिपॉजिटरी में xx-python-agent-framework और xx-dotnet-agent-framework फाइलों के तहत पाए जा सकते हैं।
अन्य शिक्षार्थियों से मिलने, ऑफिस आवर्स में भाग लेने और अपने AI एजेंट प्रश्नों का उत्तर पाने के लिए Microsoft Foundry Discord में शामिल हों।
अस्वीकरण:
इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा Co-op Translator का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ जो अपनी मातृभाषा में है, उसे आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं।