agent-framework-azure-ai-py
द्वारा microsoft
Microsoft Agent Framework Python SDK (agent-framework-azure-ai) का उपयोग करके Azure AI Foundry एजेंट बनाएँ। स्थायी एजेंट बनाते समय उपयोग करें…
npx skills add https://github.com/microsoft/skills --skill agent-framework-azure-ai-pyAgent Framework Azure Hosted Agents
Build persistent agents on Azure AI Foundry using the Microsoft Agent Framework Python SDK.
Architecture
User Query → AzureAIAgentsProvider → Azure AI Agent Service (Persistent)
↓
Agent.run() / Agent.run_stream()
↓
Tools: Functions | Hosted (Code/Search/Web) | MCP
↓
AgentThread (conversation persistence)
Installation
# Full framework (recommended)
pip install agent-framework --pre
# Or Azure-specific package only
pip install agent-framework-azure-ai --pre
Environment Variables
export AZURE_AI_PROJECT_ENDPOINT="https://<project>.services.ai.azure.com/api/projects/<project-id>" # Required for all auth methods
export AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-4o-mini" # Required for all auth methods
export BING_CONNECTION_ID="your-bing-connection-id" # For web search
export AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
Authentication & Lifecycle
🔑 Two rules apply to every code sample below:
- Prefer
DefaultAzureCredential. It works locally (Azure CLI / VS Code / Developer CLI) and in Azure (managed identity, workload identity) with no code change. Avoid connection strings, account/API keys — they bypass Entra audit and rotation.
- Local dev:
DefaultAzureCredentialworks as-is.- Production: set
AZURE_TOKEN_CREDENTIALS=prod(orAZURE_TOKEN_CREDENTIALS=<specific_credential>) to constrain the credential chain to production-safe credentials.- Wrap every client in a context manager so HTTP transports, sockets, and token caches are released deterministically:
- Sync:
with <Client>(...) as client:- Async:
async with <Client>(...) as client:andasync with DefaultAzureCredential() as credential:(fromazure.identity.aio)Snippets may abbreviate this setup, but production code should always follow both rules.
from azure.identity.aio import AzureCliCredential, DefaultAzureCredential, ManagedIdentityCredential
# Development
credential = AzureCliCredential()
# Production
# Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
credential = DefaultAzureCredential(require_envvar=True)
# Or use a specific credential directly in production:
# See https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()
Core Workflow
Basic Agent
import asyncio
from agent_framework.azure import AzureAIAgentsProvider
from azure.identity.aio import AzureCliCredential
async def main():
async with (
AzureCliCredential() as credential,
AzureAIAgentsProvider(credential=credential) as provider,
):
agent = await provider.create_agent(
name="MyAgent",
instructions="You are a helpful assistant.",
)
result = await agent.run("Hello!")
print(result.text)
asyncio.run(main())
Agent with Function Tools
from typing import Annotated
from pydantic import Field
from agent_framework.azure import AzureAIAgentsProvider
from azure.identity.aio import AzureCliCredential
def get_weather(
location: Annotated[str, Field(description="City name to get weather for")],
) -> str:
"""Get the current weather for a location."""
return f"Weather in {location}: 72°F, sunny"
def get_current_time() -> str:
"""Get the current UTC time."""
from datetime import datetime, timezone
return datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S UTC")
async def main():
async with (
AzureCliCredential() as credential,
AzureAIAgentsProvider(credential=credential) as provider,
):
agent = await provider.create_agent(
name="WeatherAgent",
instructions="You help with weather and time queries.",
tools=[get_weather, get_current_time], # Pass functions directly
)
result = await agent.run("What's the weather in Seattle?")
print(result.text)
Agent with Hosted Tools
from agent_framework import (
HostedCodeInterpreterTool,
HostedFileSearchTool,
HostedWebSearchTool,
)
from agent_framework.azure import AzureAIAgentsProvider
from azure.identity.aio import AzureCliCredential
async def main():
async with (
AzureCliCredential() as credential,
AzureAIAgentsProvider(credential=credential) as provider,
):
agent = await provider.create_agent(
name="MultiToolAgent",
instructions="You can execute code, search files, and search the web.",
tools=[
HostedCodeInterpreterTool(),
HostedWebSearchTool(name="Bing"),
],
)
result = await agent.run("Calculate the factorial of 20 in Python")
print(result.text)
Streaming Responses
async def main():
async with (
AzureCliCredential() as credential,
AzureAIAgentsProvider(credential=credential) as provider,
):
agent = await provider.create_agent(
name="StreamingAgent",
instructions="You are a helpful assistant.",
)
print("Agent: ", end="", flush=True)
async for chunk in agent.run_stream("Tell me a short story"):
if chunk.text:
print(chunk.text, end="", flush=True)
print()
Conversation Threads
from agent_framework.azure import AzureAIAgentsProvider
from azure.identity.aio import AzureCliCredential
async def main():
async with (
AzureCliCredential() as credential,
AzureAIAgentsProvider(credential=credential) as provider,
):
agent = await provider.create_agent(
name="ChatAgent",
instructions="You are a helpful assistant.",
tools=[get_weather],
)
# Create thread for conversation persistence
thread = agent.get_new_thread()
# First turn
result1 = await agent.run("What's the weather in Seattle?", thread=thread)
print(f"Agent: {result1.text}")
# Second turn - context is maintained
result2 = await agent.run("What about Portland?", thread=thread)
print(f"Agent: {result2.text}")
# Save thread ID for later resumption
print(f"Conversation ID: {thread.conversation_id}")
Structured Outputs
from pydantic import BaseModel, ConfigDict
from agent_framework.azure import AzureAIAgentsProvider
from azure.identity.aio import AzureCliCredential
class WeatherResponse(BaseModel):
model_config = ConfigDict(extra="forbid")
location: str
temperature: float
unit: str
conditions: str
async def main():
async with (
AzureCliCredential() as credential,
AzureAIAgentsProvider(credential=credential) as provider,
):
agent = await provider.create_agent(
name="StructuredAgent",
instructions="Provide weather information in structured format.",
response_format=WeatherResponse,
)
result = await agent.run("Weather in Seattle?")
weather = WeatherResponse.model_validate_json(result.text)
print(f"{weather.location}: {weather.temperature}°{weather.unit}")
Provider Methods
| Method | Description |
|---|---|
create_agent() | Create new agent on Azure AI service |
get_agent(agent_id) | Retrieve existing agent by ID |
as_agent(sdk_agent) | Wrap SDK Agent object (no HTTP call) |
Hosted Tools Quick Reference
| Tool | Import | Purpose |
|---|---|---|
HostedCodeInterpreterTool | from agent_framework import HostedCodeInterpreterTool | Execute Python code |
HostedFileSearchTool | from agent_framework import HostedFileSearchTool | Search vector stores |
HostedWebSearchTool | from agent_framework import HostedWebSearchTool | Bing web search |
HostedMCPTool | from agent_framework import HostedMCPTool | Service-managed MCP |
MCPStreamableHTTPTool | from agent_framework import MCPStreamableHTTPTool | Client-managed MCP |
Complete Example
import asyncio
from typing import Annotated
from pydantic import BaseModel, Field
from agent_framework import (
HostedCodeInterpreterTool,
HostedWebSearchTool,
MCPStreamableHTTPTool,
)
from agent_framework.azure import AzureAIAgentsProvider
from azure.identity.aio import AzureCliCredential
def get_weather(
location: Annotated[str, Field(description="City name")],
) -> str:
"""Get weather for a location."""
return f"Weather in {location}: 72°F, sunny"
class AnalysisResult(BaseModel):
summary: str
key_findings: list[str]
confidence: float
async def main():
async with (
AzureCliCredential() as credential,
MCPStreamableHTTPTool(
name="Docs MCP",
url="https://learn.microsoft.com/api/mcp",
) as mcp_tool,
AzureAIAgentsProvider(credential=credential) as provider,
):
agent = await provider.create_agent(
name="ResearchAssistant",
instructions="You are a research assistant with multiple capabilities.",
tools=[
get_weather,
HostedCodeInterpreterTool(),
HostedWebSearchTool(name="Bing"),
mcp_tool,
],
)
thread = agent.get_new_thread()
# Non-streaming
result = await agent.run(
"Search for Python best practices and summarize",
thread=thread,
)
print(f"Response: {result.text}")
# Streaming
print("\nStreaming: ", end="")
async for chunk in agent.run_stream("Continue with examples", thread=thread):
if chunk.text:
print(chunk.text, end="", flush=True)
print()
# Structured output
result = await agent.run(
"Analyze findings",
thread=thread,
response_format=AnalysisResult,
)
analysis = AnalysisResult.model_validate_json(result.text)
print(f"\nConfidence: {analysis.confidence}")
if __name__ == "__main__":
asyncio.run(main())
Conventions
- Always use async context managers:
async with provider: - Pass functions directly to
tools=parameter (auto-converted to AIFunction) - Use
Annotated[type, Field(description=...)]for function parameters - Use
get_new_thread()for multi-turn conversations - Prefer
HostedMCPToolfor service-managed MCP,MCPStreamableHTTPToolfor client-managed
Best Practices
- This SDK is async-first — use
async defhandlers andasync withthroughout. - Always use context managers for clients and async credentials. Wrap every client in
with Client(...) as client:(sync) orasync with Client(...) as client:(async). For asyncDefaultAzureCredentialfromazure.identity.aio, also useasync with credential:so tokens and transports are cleaned up.
Reference Files
- references/tools.md: Detailed hosted tool patterns
- references/mcp.md: MCP integration (hosted + local)
- references/threads.md: Thread and conversation management
- references/advanced.md: OpenAPI, citations, structured outputs
microsoft की और Skills
oss-growth
microsoft
OSS ग्रोथ हैकर व्यक्तित्व
official
microsoft-foundry
microsoft
Foundry एजेंटों को एंड-टू-एंड डिप्लॉय, मूल्यांकन और प्रबंधित करें: Docker बिल्ड, ACR पुश, होस्टेड/प्रॉम्प्ट एजेंट क्रिएट, कंटेनर स्टार्ट, बैच इवैल्यूएशन, कंटीन्यूअस इवैल्यूएशन, प्रॉम्प्ट ऑप्टिमाइज़र वर्कफ़्लो, agent.yaml, ट्रेस से डेटासेट क्यूरेशन। इसका उपयोग करें: Foundry पर एजेंट डिप्लॉय करना, होस्टेड एजेंट, एजेंट बनाना, एजेंट को इनवोक करना, एजेंट का मूल्यांकन
officialdevelopmentdevops
azure-ai
microsoft
Azure AI के लिए उपयोग करें: खोज, वाक्, OpenAI, दस्तावेज़ बुद्धिमत्ता। खोज, वेक्टर/हाइब्रिड खोज, वाक्-से-पाठ, पाठ-से-वाक्, प्रतिलेखन, OCR में सहायता करता है। कब उपयोग करें: AI खोज, क्वेरी खोज, वेक्टर खोज, हाइब्रिड खोज, सिमैंटिक खोज, वाक्-से-पाठ, पाठ-से-वाक्, प्रतिलेखन, OCR, पाठ को वाक् में बदलना।
officialdevelopmentapi
azure-deploy
microsoft
पहले से तैयार एप्लिकेशनों के लिए Azure डिप्लॉयमेंट निष्पादित करें जिनमें मौजूदा .azure/deployment-plan.md और इंफ्रास्ट्रक्चर फ़ाइलें हों। इस स्किल का उपयोग तब न करें जब उपयोगकर्ता कोई नया एप्लिकेशन बनाने के लिए कहे — इसके बजाय azure-prepare का उपयोग करें। यह स्किल azd up, azd deploy, terraform apply, और az deployment कमांड को बिल्ट-इन एरर रिकवरी के साथ चलाती है। इसके लिए azure-prepare से .azure/deployment-plan.md और azure-validate से सत्यापित स्थिति आवश्यक है। कब: "azd
officialdevopsaws
azure-storage
microsoft
Azure Storage सेवाएँ जिनमें Blob Storage, File Shares, Queue Storage, Table Storage और Data Lake शामिल हैं। स्टोरेज एक्सेस टियर (हॉट, कूल, कोल्ड, आर्काइव), प्रत्येक टियर का उपयोग कब करें और टियर तुलना के बारे में प्रश्नों के उत्तर देता है। ऑब्जेक्ट स्टोरेज, SMB फ़ाइल शेयर, एसिंक्रोनस मैसेजिंग, NoSQL की-वैल्यू और बिग डेटा एनालिटिक्स प्रदान करता है। लाइफसाइकिल प्रबंधन शामिल है। उपयोग करें: ब्लॉब स्टोरेज, फ़ाइल शेयर, क्य
officialdevelopmentdatabase
azure-diagnostics
microsoft
Azure पर AppLens, Azure Monitor, संसाधन स्वास्थ्य और सुरक्षित ट्राइएज का उपयोग करके Azure उत्पादन समस्याओं को डीबग करें। कब: उत्पादन समस्याओं को डीबग करना, ऐप सेवा समस्या निवारण, ऐप सेवा उच्च CPU, ऐप सेवा परिनियोजन विफलता, कंटेनर ऐप्स समस्या निवारण, फंक्शन्स समस्या निवारण, AKS समस्या निवारण, kubectl कनेक्ट नहीं हो सकता, kube-system/CoreDNS विफलताएँ, पॉड लंबित, क्रैशलूप, नोड तैयार नहीं, अपग्रेड विफ
officialdevopsdevelopment
azure-prepare
microsoft
Azure ऐप्स को तैनाती के लिए तैयार करें (infra Bicep/Terraform, azure.yaml, Dockerfiles)। निर्माण/आधुनिकीकरण या निर्माण+तैनाती के लिए उपयोग करें; क्रॉस-क्लाउड माइग्रेशन के लिए नहीं (azure-cloud-migrate का उपयोग करें)। इसका उपयोग न करें: copilot-sdk ऐप्स के लिए (azure-hosted-copilot-sdk का उपयोग करें)। कब: "create app", "build web app", "create API", "create serverless HTTP API", "create frontend", "create back end", "build a service", "modernize application", "update application", "add authentication", "add caching", "host on Azure", "create and...
officialdevelopmentdevops
azure-validate
microsoft
Azure तैनाती-पूर्व तत्परता के लिए सत्यापन। तैनाती से पहले कॉन्फ़िगरेशन, इंफ्रास्ट्रक्चर (Bicep या Terraform), RBAC भूमिका असाइनमेंट, प्रबंधित पहचान अनुमतियाँ और पूर्वापेक्षाओं की गहन जाँच करें। कब: मेरे ऐप को सत्यापित करें, तैनाती तत्परता की जाँच करें, प्रीफ्लाइट जाँच चलाएँ, कॉन्फ़िगरेशन सत्यापित करें, तैनाती के लिए तैयार है या नहीं जाँचें, azure.yaml सत्यापित करें, Bicep सत्यापित
officialdevopstesting