Summary
Azure AI Projects v2.0 introduced a new management client (AIProjectClient) that only supports project‑level operations (create, list, delete projects).
Retrieving an existing agent with project.agents.get() is no longer part of that SDK, which is why the call returns ResourceNotFoundError.
The correct way to interact with a runtime agent is to use the Agent Framework SDK (azure.ai.agentframework) and provide an AzureAIAgentClient that points to the agent’s resource ID.
Root Cause
- Wrong SDK for the operation –
AIProjectClientis a management client; it cannot query runtime agents. - Missing
clientargument when constructingAgent– the high‑levelAgentwrapper requires an instantiatedAzureAIAgentClient. - Endpoint/ID mismatch – the
agent_idmust be the full Azure resource ID of the agent (including subscription, resource group, project, and agent name).
Why This Happens in Real Systems
- Azure services evolve quickly; new SDK generations split management and runtime responsibilities.
- Documentation sometimes shows mixed snippets, leading engineers to combine the wrong classes.
- Autoscaling or soft‑delete of agents can also surface “not found” errors if the ID is stale.
Real-World Impact
- Production outages when background jobs try to invoke an agent that cannot be resolved.
- Increased support tickets because developers see ambiguous “resource not found” messages.
- Wasted compute if retry loops keep hitting the same faulty call.
- Security risk if developers fall back to hard‑coded credentials to bypass the SDK.
Example or Code (if necessary and relevant)
from azure.identity import DefaultAzureCredential
from azure.ai.agentframework import AzureAIAgentClient, Agent
import asyncio
# 1️⃣ Full Azure resource ID of the existing agent
agent_resource_id = (
"/subscriptions//resourceGroups//providers/"
"Microsoft.AIProject/projects//agents/"
)
# 2️⃣ Create the low‑level client that talks to the agent runtime
agent_client = AzureAIAgentClient(
credential=DefaultAzureCredential(),
endpoint="https://myendpoint.openai.azure.com", # your Azure AI endpoint
api_version="2024-05-01-preview", # latest preview version
)
# 3️⃣ Wrap the client in the high‑level Agent helper
async def main():
async with Agent(
client=agent_client,
agent_id=agent_resource_id,
instructions="You are a helpful assistant."
) as agent:
result = await agent.run("Hello!")
print(result.text)
asyncio.run(main())
How Senior Engineers Fix It
- Identify the correct SDK layer (management vs. runtime) before writing code.
- Use the full resource ID for the agent; avoid just the name.
- Pass the
clientargument when instantiatingAgent. - Pin the latest preview version of
azure-ai-agentframework(or a GA release) to ensure theagent_idformat is supported. - Add robust error handling:
from azure.core.exceptions import ResourceNotFoundError, HttpResponseError # ... inside async with Agent ... try: result = await agent.run("Hello!") except ResourceNotFoundError: log.error("Agent not found – verify agent_resource_id") except HttpResponseError as exc: log.error(f"Agent call failed: {exc.message}")
Why Juniors Miss It
- Assume a single SDK covers everything – they often start with
AIProjectClientbecause it appears first in docs. - Overlook the required
clientparameter in theAgentconstructor, treating it as optional. - Copy‑paste code snippets without adjusting the
agent_idto the fully qualified Azure resource ID. - Neglect SDK versioning, leading to mismatched method signatures between 1.x and 2.x releases.