home / skills / openclaw / skills / azure-ai-agents-py

azure-ai-agents-py skill

/skills/thegovind/azure-ai-agents-py

This skill helps you build and manage Azure AI Agents using the Python SDK to deploy threads, messages, runs, and tools.

npx playbooks add skill openclaw/skills --skill azure-ai-agents-py

Review the files below or copy the command above to add this skill to your agents.

Files (6)
SKILL.md
6.9 KB
---
name: azure-ai-agents-py
description: Build AI agents using the Azure AI Agents Python SDK (azure-ai-agents). Use when creating agents hosted on Azure AI Foundry with tools (File Search, Code Interpreter, Bing Grounding, Azure AI Search, Function Calling, OpenAPI, MCP), managing threads and messages, implementing streaming responses, or working with vector stores. This is the low-level SDK - for higher-level abstractions, use the agent-framework skill instead.
package: azure-ai-agents
---

# Azure AI Agents Python SDK

Build agents hosted on Azure AI Foundry using the `azure-ai-agents` SDK.

## Installation

```bash
pip install azure-ai-agents azure-identity
# Or with azure-ai-projects for additional features
pip install azure-ai-projects azure-identity
```

## Environment Variables

```bash
PROJECT_ENDPOINT="https://<resource>.services.ai.azure.com/api/projects/<project>"
MODEL_DEPLOYMENT_NAME="gpt-4o-mini"
```

## Authentication

```python
from azure.identity import DefaultAzureCredential
from azure.ai.agents import AgentsClient

credential = DefaultAzureCredential()
client = AgentsClient(
    endpoint=os.environ["PROJECT_ENDPOINT"],
    credential=credential,
)
```

## Core Workflow

The basic agent lifecycle: **create agent → create thread → create message → create run → get response**

### Minimal Example

```python
import os
from azure.identity import DefaultAzureCredential
from azure.ai.agents import AgentsClient

client = AgentsClient(
    endpoint=os.environ["PROJECT_ENDPOINT"],
    credential=DefaultAzureCredential(),
)

# 1. Create agent
agent = client.create_agent(
    model=os.environ["MODEL_DEPLOYMENT_NAME"],
    name="my-agent",
    instructions="You are a helpful assistant.",
)

# 2. Create thread
thread = client.threads.create()

# 3. Add message
client.messages.create(
    thread_id=thread.id,
    role="user",
    content="Hello!",
)

# 4. Create and process run
run = client.runs.create_and_process(thread_id=thread.id, agent_id=agent.id)

# 5. Get response
if run.status == "completed":
    messages = client.messages.list(thread_id=thread.id)
    for msg in messages:
        if msg.role == "assistant":
            print(msg.content[0].text.value)

# Cleanup
client.delete_agent(agent.id)
```

## Tools Overview

| Tool | Class | Use Case |
|------|-------|----------|
| Code Interpreter | `CodeInterpreterTool` | Execute Python, generate files |
| File Search | `FileSearchTool` | RAG over uploaded documents |
| Bing Grounding | `BingGroundingTool` | Web search |
| Azure AI Search | `AzureAISearchTool` | Search your indexes |
| Function Calling | `FunctionTool` | Call your Python functions |
| OpenAPI | `OpenApiTool` | Call REST APIs |
| MCP | `McpTool` | Model Context Protocol servers |

See [references/tools.md](references/tools.md) for detailed patterns.

## Adding Tools

```python
from azure.ai.agents import CodeInterpreterTool, FileSearchTool

agent = client.create_agent(
    model=os.environ["MODEL_DEPLOYMENT_NAME"],
    name="tool-agent",
    instructions="You can execute code and search files.",
    tools=[CodeInterpreterTool()],
    tool_resources={"code_interpreter": {"file_ids": [file.id]}},
)
```

## Function Calling

```python
from azure.ai.agents import FunctionTool, ToolSet

def get_weather(location: str) -> str:
    """Get weather for a location."""
    return f"Weather in {location}: 72F, sunny"

functions = FunctionTool(functions=[get_weather])
toolset = ToolSet()
toolset.add(functions)

agent = client.create_agent(
    model=os.environ["MODEL_DEPLOYMENT_NAME"],
    name="function-agent",
    instructions="Help with weather queries.",
    toolset=toolset,
)

# Process run - toolset auto-executes functions
run = client.runs.create_and_process(
    thread_id=thread.id,
    agent_id=agent.id,
    toolset=toolset,  # Pass toolset for auto-execution
)
```

## Streaming

```python
from azure.ai.agents import AgentEventHandler

class MyHandler(AgentEventHandler):
    def on_message_delta(self, delta):
        if delta.text:
            print(delta.text.value, end="", flush=True)

    def on_error(self, data):
        print(f"Error: {data}")

with client.runs.stream(
    thread_id=thread.id,
    agent_id=agent.id,
    event_handler=MyHandler(),
) as stream:
    stream.until_done()
```

See [references/streaming.md](references/streaming.md) for advanced patterns.

## File Operations

### Upload File

```python
file = client.files.upload_and_poll(
    file_path="data.csv",
    purpose="assistants",
)
```

### Create Vector Store

```python
vector_store = client.vector_stores.create_and_poll(
    file_ids=[file.id],
    name="my-store",
)

agent = client.create_agent(
    model=os.environ["MODEL_DEPLOYMENT_NAME"],
    tools=[FileSearchTool()],
    tool_resources={"file_search": {"vector_store_ids": [vector_store.id]}},
)
```

## Async Client

```python
from azure.ai.agents.aio import AgentsClient

async with AgentsClient(
    endpoint=os.environ["PROJECT_ENDPOINT"],
    credential=DefaultAzureCredential(),
) as client:
    agent = await client.create_agent(...)
    # ... async operations
```

See [references/async-patterns.md](references/async-patterns.md) for async patterns.

## Response Format

### JSON Mode

```python
agent = client.create_agent(
    model=os.environ["MODEL_DEPLOYMENT_NAME"],
    response_format={"type": "json_object"},
)
```

### JSON Schema

```python
agent = client.create_agent(
    model=os.environ["MODEL_DEPLOYMENT_NAME"],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "weather_response",
            "schema": {
                "type": "object",
                "properties": {
                    "temperature": {"type": "number"},
                    "conditions": {"type": "string"},
                },
                "required": ["temperature", "conditions"],
            },
        },
    },
)
```

## Thread Management

### Continue Conversation

```python
# Save thread_id for later
thread_id = thread.id

# Resume later
client.messages.create(
    thread_id=thread_id,
    role="user",
    content="Follow-up question",
)
run = client.runs.create_and_process(thread_id=thread_id, agent_id=agent.id)
```

### List Messages

```python
messages = client.messages.list(thread_id=thread.id, order="asc")
for msg in messages:
    role = msg.role
    content = msg.content[0].text.value
    print(f"{role}: {content}")
```

## Best Practices

1. **Use context managers** for async client
2. **Clean up agents** when done: `client.delete_agent(agent.id)`
3. **Use `create_and_process`** for simple cases, **streaming** for real-time UX
4. **Pass toolset to run** for automatic function execution
5. **Poll operations** use `*_and_poll` methods for long operations

## Reference Files

- [references/tools.md](references/tools.md): All tool types with detailed examples
- [references/streaming.md](references/streaming.md): Event handlers and streaming patterns
- [references/async-patterns.md](references/async-patterns.md): Async client usage

Overview

This skill provides a low-level Python SDK to build and run AI agents on Azure AI Foundry using the azure-ai-agents package. It covers creating agents, managing threads and messages, adding tools (File Search, Code Interpreter, Bing Grounding, Azure AI Search, Function Calling, OpenAPI, MCP), streaming responses, and working with vector stores. Use it when you need fine-grained control of agent lifecycle and tool integration on Azure.

How this skill works

The SDK exposes an AgentsClient to create agents, threads, messages, and runs. Typical lifecycle: create an agent, open a thread, post messages, invoke create_and_process or stream runs, then read assistant messages from the thread. Tools and toolsets attach to agents and runs to enable file search, code execution, web grounding, API calls, and automatic function execution. Async clients and streaming event handlers support real-time and long-running workflows.

When to use it

  • You need direct control of agent lifecycle, threads, and message history on Azure AI Foundry.
  • You want to attach tools like Code Interpreter, File Search, or Bing Grounding to agents.
  • You need streaming responses for live UX or long outputs.
  • You must run or auto-execute Python functions via Function Calling toolsets.
  • You are building RAG solutions with uploaded files and vector stores.

Best practices

  • Use DefaultAzureCredential and environment variables for secure authentication.
  • Prefer create_and_process for simple synchronous flows and stream for interactive UX.
  • Pass a ToolSet when you want automatic function execution during runs.
  • Upload files and create vector stores with *_and_poll helpers to handle long ops.
  • Always delete or clean up agents and resources when no longer needed.

Example use cases

  • A chatbot hosted on Azure that queries enterprise documents via a FileSearch-backed vector store.
  • A data analysis assistant that uses Code Interpreter to run Python, generate plots, and return files.
  • A weather skill that exposes Python functions and auto-executes them via Function Calling.
  • A real-time assistant that streams partial responses to a web client using an AgentEventHandler.
  • An automation agent that calls external REST APIs via the OpenAPI tool and integrates web search via BingGrounding.

FAQ

When should I use the async client?

Use the async AgentsClient for non-blocking workflows, high concurrency, or when integrating into async frameworks. Use context managers to manage lifecycle.

How do I enable streaming output?

Use client.runs.stream with a custom AgentEventHandler that implements on_message_delta and on_error, then call stream.until_done() to consume the stream.