Agent Operations Reference
Agent Types and Kinds
from azure.ai.projects.models import AgentKind
# Agent kinds
# - "prompt": Standard prompt-based agents
# - "hosted": Hosted agents
# - "container_app": Container App agents
# - "workflow": Workflow agents
# Filter agents by kind
agents = project_client.agents.list(kind=AgentKind.PROMPT)Basic Agent Creation
agent = project_client.agents.create_agent(
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
name="my-agent",
instructions="You are a helpful assistant.",
)
print(f"Created agent, ID: {agent.id}")
# Clean up when done
project_client.agents.delete_agent(agent.id)Versioned Agents with PromptAgentDefinition
For production deployments, use versioned agents:
from azure.ai.projects.models import PromptAgentDefinition
agent = project_client.agents.create_version(
agent_name="customer-support-agent",
definition=PromptAgentDefinition(
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
instructions="You are a customer support specialist.",
tools=[], # Add tools as needed
),
version_label="v1.0",
description="Initial version",
)
print(f"Agent created (id: {agent.id}, name: {agent.name}, version: {agent.version})")Agent with Tools
from azure.ai.agents.models import CodeInterpreterTool, FileSearchTool
from azure.ai.projects.models import PromptAgentDefinition
agent = project_client.agents.create_version(
agent_name="tool-agent",
definition=PromptAgentDefinition(
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
instructions="You can execute code and search files.",
tools=[CodeInterpreterTool(), FileSearchTool()],
),
)Agent with Response Format
JSON Mode
agent = project_client.agents.create_agent(
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
name="json-agent",
instructions="Always respond in JSON format.",
response_format={"type": "json_object"},
)JSON Schema
agent = project_client.agents.create_agent(
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
name="schema-agent",
instructions="Respond with weather data.",
response_format={
"type": "json_schema",
"json_schema": {
"name": "weather_response",
"schema": {
"type": "object",
"properties": {
"temperature": {"type": "number"},
"conditions": {"type": "string"},
"humidity": {"type": "number"},
},
"required": ["temperature", "conditions"],
},
},
},
)Thread Operations
Create Thread
thread = project_client.agents.threads.create()
print(f"Created thread, ID: {thread.id}")Create Thread with Tool Resources
from azure.ai.agents.models import FileSearchTool
file_search = FileSearchTool(vector_store_ids=[vector_store.id])
thread = project_client.agents.threads.create(
tool_resources=file_search.resources
)List Threads
threads = project_client.agents.threads.list()
for thread in threads:
print(f"Thread ID: {thread.id}")Message Operations
Create Message
message = project_client.agents.messages.create(
thread_id=thread.id,
role="user",
content="What is the weather in Seattle?",
)
print(f"Created message, ID: {message.id}")Create Message with Attachment
from azure.ai.agents.models import MessageAttachment, FileSearchTool
attachment = MessageAttachment(
file_id=file.id,
tools=FileSearchTool().definitions
)
message = project_client.agents.messages.create(
thread_id=thread.id,
role="user",
content="What feature does Smart Eyewear offer?",
attachments=[attachment],
)List Messages
messages = project_client.agents.messages.list(thread_id=thread.id)
for msg in messages:
print(f"Role: {msg.role}")
for content in msg.content:
if hasattr(content, 'text'):
print(f"Content: {content.text.value}")Run Operations
Create and Process Run
run = project_client.agents.runs.create_and_process(
thread_id=thread.id,
agent_id=agent.id,
)
print(f"Run finished with status: {run.status}")
if run.status == "failed":
print(f"Run failed: {run.last_error}")Create and Process with ToolSet
from azure.ai.agents.models 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)
# Enable auto function calls
project_client.agents.enable_auto_function_calls(toolset)
run = project_client.agents.runs.create_and_process(
thread_id=thread.id,
agent_id=agent.id,
toolset=toolset, # Pass toolset for auto-execution
)Streaming Run
from azure.ai.agents.models 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 project_client.agents.runs.stream(
thread_id=thread.id,
agent_id=agent.id,
event_handler=MyHandler(),
) as stream:
stream.until_done()File Operations
Upload File
from azure.ai.agents.models import FilePurpose
file = project_client.agents.files.upload_and_poll(
file_path="./data/document.pdf",
purpose=FilePurpose.AGENTS,
)
print(f"Uploaded file, ID: {file.id}")Create Vector Store
vector_store = project_client.agents.vector_stores.create_and_poll(
file_ids=[file.id],
name="my-vector-store",
)
print(f"Created vector store, ID: {vector_store.id}")Agent Lifecycle Best Practices
# 1. Use context managers
with project_client:
agent = project_client.agents.create_agent(...)
thread = project_client.agents.threads.create()
# ... use agent
# Clean up
project_client.agents.delete_agent(agent.id)
# 2. For versioned agents, manage versions explicitly
agent_v1 = project_client.agents.create_version(
agent_name="my-agent",
definition=PromptAgentDefinition(...),
version_label="v1.0",
)
agent_v2 = project_client.agents.create_version(
agent_name="my-agent",
definition=PromptAgentDefinition(...),
version_label="v2.0",
)
# 3. Reuse threads for conversation continuity
thread_id = thread.id # Save for later
# Resume conversation
project_client.agents.messages.create(
thread_id=thread_id,
role="user",
content="Follow-up question",
)