Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Microsoft Agent Framework prend en charge l'inférence de modèle direct à partir de points de terminaison de projet Microsoft Foundry et des agents gérés par le service Foundry Agent Service.
Getting Started
Ajoutez les packages NuGet requis à votre projet.
dotnet add package Azure.Identity
dotnet add package Microsoft.Agents.AI.Foundry --prerelease
Deux types d’agent
L’intégration Microsoft Foundry expose deux modèles d’utilisation distincts :
| Type | Type de production | Description | À utiliser lorsque |
|---|---|---|---|
| Agent de réponses | ChatClientAgent |
Votre application fournit par programmation un modèle, des instructions et des outils au moment de l’exécution via AIProjectClient.AsAIAgent(...). Aucune ressource d’agent côté serveur n’est créée. |
Vous êtes propriétaire de la définition de l’agent et souhaitez une configuration simple et flexible. Il s’agit du modèle utilisé dans la plupart des exemples. |
| Foundry Agent (versionné) | FoundryAgent |
Géré par le serveur : les définitions d’agent sont créées et versionnée par le biais du portail Foundry ou par programmation via AIProjectClient.AgentAdministrationClient. Passez un ProjectsAgentVersion ou un ProjectsAgentRecord ou AgentReference à AIProjectClient.AsAIAgent(...). |
Vous avez besoin de définitions d’agent avec version strictes gérées dans le portail Foundry, via des API de service |
Agent de réponses (inférence directe)
Utilisez AsAIAgent sur AIProjectClient directement avec un modèle et des instructions. Il s’agit du point de départ recommandé pour la plupart des scénarios.
using Azure.AI.Projects;
using Azure.Identity;
using Microsoft.Agents.AI;
AIAgent agent = new AIProjectClient(
new Uri("<your-foundry-project-endpoint>"),
new DefaultAzureCredential())
.AsAIAgent(
model: "gpt-4o-mini",
name: "Joker",
instructions: "You are good at telling jokes.");
Console.WriteLine(await agent.RunAsync("Tell me a joke about a pirate."));
Avertissement
DefaultAzureCredential est pratique pour le développement, mais nécessite une considération minutieuse en production. En production, envisagez d’utiliser des informations d’identification spécifiques (par exemple ManagedIdentityCredential) pour éviter les problèmes de latence, la détection involontaire des informations d’identification et les risques de sécurité potentiels liés aux mécanismes de secours.
Ce chemin d’accès est code-first et ne crée pas de ressource d’agent managé par le serveur.
Agent de Fonderie (versionné)
Utilisez les API natives AIProjectClient.AgentAdministrationClient du Kit de développement logiciel (SDK) AI Projects pour récupérer les ressources de l’agent avec version, puis encapsulez-les avec AsAIAgent. Les agents peuvent être créés et configurés directement dans le portail Foundry ou par programmation via AIProjectClient.AgentAdministrationClient.
using Azure.AI.Projects;
using Azure.AI.Projects.Agents;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry;
var aiProjectClient = new AIProjectClient(
new Uri("<your-foundry-project-endpoint>"),
new DefaultAzureCredential());
// Retrieve an existing agent by name (uses the latest version automatically)
ProjectsAgentRecord jokerRecord = await aiProjectClient.AgentAdministrationClient.GetAgentAsync("Joker");
FoundryAgent agent = aiProjectClient.AsAIAgent(jokerRecord);
Console.WriteLine(await agent.RunAsync("Tell me a joke about a pirate."));
Important
Les outils et instructions des agents de fonderie sont stricts pour ceux avec lesquels ils ont été créés, tenter de modifier des outils ou des instructions pendant l'exécution n'est pas supportée.
Utilisation de l’agent
Les deux ChatClientAgent (réponses) et FoundryAgent (versioned) sont des instances standard AIAgent et prennent en charge toutes les opérations standard, notamment les sessions, les outils, les intergiciels et la diffusion en continu.
AgentSession session = await agent.CreateSessionAsync();
Console.WriteLine(await agent.RunAsync("Tell me a joke.", session));
Console.WriteLine(await agent.RunAsync("Now make it funnier.", session));
Pour plus d’informations sur l’exécution et l’interaction avec les agents, consultez les didacticiels de prise en main de l’agent.
Boîtes à outils
Note
Les documents .NET de la boîte à outils Foundry seront bientôt disponibles.
Foundry dans Python
Dans Python, tous les clients spécifiques à Foundry vivent désormais sous agent_framework.foundry.
-
agent-framework-foundryfournit les connecteurs Cloud Foundry :FoundryChatClient,FoundryAgent,FoundryEmbeddingClientetFoundryMemoryProvider. -
agent-framework-foundry-localfournit l’exécutionFoundryLocalClientdu modèle local.
Important
Cette page présente les clients Python actuels pour les points de terminaison de projet de Microsoft Foundry, les points de terminaison de modèles et du service agent Foundry. Si vous disposez Azure d’un point de terminaison de ressource OpenAI autonome (https://<your-resource>.openai.azure.com), utilisez les instructions Python sur la page du fournisseur OpenAI. Si vous souhaitez exécuter des modèles pris en charge localement, consultez la page fournisseur local Foundry.
Modèles de discussion et d'agents dans le cadre de la fonderie en Python
| Scénario | forme Python | À utiliser lorsque |
|---|---|---|
| Inférence simple avec le point de terminaison Foundry Responses | Agent(client=FoundryChatClient(...)) |
Votre application possède la définition, les outils et la boucle de conversation de l’agent, et vous souhaitez déployer un modèle dans un projet Foundry. |
| Agents gérés par le service dans le service d'agents Foundry | FoundryAgent(...) |
Vous souhaitez vous connecter à un PromptAgent ou HostedAgent créé et configuré dans le portail Foundry ou via les API de service. |
Installation
pip install agent-framework-foundry
pip install azure-identity
Le même agent-framework-foundry package inclut également FoundryEmbeddingClient pour les encodages des modèles et des points de terminaison Foundry.
Paramétrage
FoundryChatClient
FOUNDRY_PROJECT_ENDPOINT="https://<your-project>.services.ai.azure.com"
FOUNDRY_MODEL="gpt-4o-mini"
FoundryAgent
FOUNDRY_PROJECT_ENDPOINT="https://<your-project>.services.ai.azure.com"
FOUNDRY_AGENT_NAME="my-agent"
FOUNDRY_AGENT_VERSION="1.0"
Utiliser FOUNDRY_AGENT_VERSION pour les agents d’invite. Les agents hébergés peuvent l’omettre.
FoundryEmbeddingClient
FOUNDRY_MODELS_ENDPOINT="https://<apim-instance>.azure-api.net/<foundry-instance>/models"
FOUNDRY_MODELS_API_KEY="<api-key>"
FOUNDRY_EMBEDDING_MODEL="text-embedding-3-small"
FOUNDRY_IMAGE_EMBEDDING_MODEL="Cohere-embed-v3-english" # optional
FoundryChatClient et FoundryAgent utilisent le point de terminaison du projet.
FoundryEmbeddingClient utilise le point de terminaison des modèles distincts.
Choisir le bon client Python
| Scénario | Client préféré | Remarques |
|---|---|---|
| ressource Azure OpenAI | OpenAIChatCompletionClient / OpenAIChatClient |
Utilisez la page du fournisseur OpenAI. |
| Projet d'inférence Microsoft Foundry | Agent(client=FoundryChatClient(...)) |
Utilise l'endpoint Foundry Responses. |
| agent géré par le service Microsoft Foundry | FoundryAgent |
Recommandé pour les agents de ligne de commande et HostedAgents. |
| Vecteurs de modèles Foundry de Microsoft pour points de terminaison | FoundryEmbeddingClient |
Utilise FOUNDRY_MODELS_ENDPOINT plus FOUNDRY_EMBEDDING_MODEL / FOUNDRY_IMAGE_EMBEDDING_MODEL. |
| Environnement d'exécution local de Foundry | Agent(client=FoundryLocalClient(...)) |
Voir Foundry Local. |
Créer un agent avec FoundryChatClient
FoundryChatClient se connecte à un modèle déployé dans un projet Foundry et utilise le point de terminaison Réponses. Associez-le à une norme Agent lorsque votre application doit posséder des instructions, des outils et une gestion de session.
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential
agent = Agent(
client=FoundryChatClient(
project_endpoint="https://your-project.services.ai.azure.com",
model="gpt-4o-mini",
credential=AzureCliCredential(),
),
name="FoundryWeatherAgent",
instructions="You are a helpful assistant.",
)
FoundryChatClient est le chemin de Python Foundry-first pour l’inférence directe et prend en charge les outils, les sorties structurées et la diffusion en continu.
Créer des incorporations avec FoundryEmbeddingClient
Utilisez FoundryEmbeddingClient quand vous souhaitez incorporer du texte ou des images à partir d’un point de terminaison de modèles Foundry.
from agent_framework.foundry import FoundryEmbeddingClient
async with FoundryEmbeddingClient() as client:
result = await client.get_embeddings(["hello from Agent Framework"])
print(result[0].dimensions)
Se connecter à un agent géré par le service avec FoundryAgent
Utilisez FoundryAgent quand la définition de l’agent réside dans Foundry. Il s’agit de l’API Python recommandée pour les Agents d’invite et les Agents hébergés.
from agent_framework.foundry import FoundryAgent
from azure.identity import AzureCliCredential
agent = FoundryAgent(
project_endpoint="https://your-project.services.ai.azure.com",
agent_name="my-prompt-agent",
agent_version="1.0",
credential=AzureCliCredential(),
)
Pour un HostedAgent, omettez agent_version et utilisez plutôt le nom de l’agent hébergé.
Connexion à un agent Foundry déployé (hébergé)
Pour les HostedAgents qui exécutent des sessions côté service (/agents/{name}/sessions), utilisez FoundryAgent avec allow_preview=True pour activer la surface d'aperçu des réponses et passer version="v2" :
from agent_framework.foundry import FoundryAgent
from azure.identity import AzureCliCredential
agent = FoundryAgent(
agent_name="my-hosted-agent",
credential=AzureCliCredential(),
allow_preview=True,
version="v2",
)
Lorsque vous devez gérer vous-même la session de service sous-jacente ( par exemple pour lier une session à un locataire ou un utilisateur spécifique), créez la session via l’API en préversion AIProjectClient et encapsulez-la avec agent.get_session(...):
from azure.ai.projects.aio import AIProjectClient
from azure.ai.projects.models import VersionRefIndicator
service_session = await project_client.beta.agents.create_session(
agent_name="my-hosted-agent",
isolation_key="user-123",
version_indicator=VersionRefIndicator(agent_version="1.0"),
)
session = agent.get_session(service_session.agent_session_id)
response = await agent.run("Hello!", session=session)
Tip
Consultez l’exempleusing_deployed_agent.py pour obtenir un exemple complet, notamment la résolution automatique de la dernière version.
Avertissement
Les anciennes surfaces de compatibilité Python AzureAIClient, AzureAIProjectAgentProvider, AzureAIAgentClient, AzureAIAgentsProvider et d'incorporation Azure AI ont été supprimées de l’espace de noms agent_framework.azure actuel. Pour le code Python actuel, utilisez FoundryChatClient lorsque votre application possède des instructions et des outils, FoundryAgent lorsque la définition de l’agent réside dans Foundry et FoundryEmbeddingClient pour les incorporations de modèles Foundry.
Utilisation de l’agent
Les deux FoundryChatClient et FoundryAgent s’intègrent à l’expérience standard Python Agent, notamment l’appel d’outils, les sessions et les réponses de streaming. Pour les runtimes locaux, utilisez la page distincte du fournisseur local Foundry.
Boîtes à outils
Important
Les API de boîte à outils sont expérimentales. La surface peut changer dans les versions ultérieures.
Une boîte à outils Foundry est un ensemble nommé côté serveur avec version des configurations d’outils hébergés (interpréteur de code, recherche de fichiers, génération d’images, MCP, recherche web) configuré dans un projet Microsoft Foundry. Les boîtes à outils vous permettent de gérer la configuration des outils une fois dans le portail Foundry et de les réutiliser entre les agents.
Agent Framework couvre uniquement la consommation : la création et la mise à jour des versions de boîte à outils sont effectuées via le portail Foundry ou le SDK brut azure-ai-projects (azure-ai-projects>=2.1.0).
FoundryAgent vs FoundryChatClient
| Type d’agent | Comportement de la boîte à outils |
|---|---|
| FoundryAgent (hébergé) | L'attachement de la boîte à outils s'effectue côté serveur. Aucun câblage côté client n’est requis. |
| FoundryChatClient (inférence directe) | Récupérez la boîte à outils avec get_toolbox() et transmettez-la en tant que tools=. |
Deux modèles de consommation
| Pattern | Description |
|---|---|
| Native (outils hébergés) | Les configurations d’outils s’exécutent sur le runtime Foundry. Passez la boîte à outils directement en tant que tools=. |
| MCP | Utilisez MCPStreamableHTTPTool auprès du point de terminaison MCP de la boîte à outils. Fonctionne avec n’importe quel client de conversation, pas seulement FoundryChatClient. |
Extraction d’une boîte à outils
Utilisez FoundryChatClient.get_toolbox() pour récupérer une boîte à outils :
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from azure.identity.aio import AzureCliCredential
async with AzureCliCredential() as credential:
client = FoundryChatClient(credential=credential)
toolbox = await client.get_toolbox("research_toolbox")
async with Agent(client=client, name="ResearchAgent", tools=toolbox) as agent:
result = await agent.run("Summarize recent findings.")
print(result.text)
Lorsqu’il version est omis, get_toolbox résout la version par défaut dans deux requêtes. Épinglez une version spécifique pour éviter l’aller-retour supplémentaire :
toolbox = await client.get_toolbox("research_toolbox", version="v3")
Note
Chaque get_toolbox() appel atteint le réseau : il n’existe aucun cache côté framework, car les versions par défaut peuvent changer côté serveur. La mise en cache est détenue par l’appelant.
Aplatissement implicite
Vous n’avez pas besoin d’écrire toolbox.tools. Le framework normalize_tools reconnaît ToolboxVersionObject et aplatit automatiquement. Tous ces travaux sont les suivants :
# Single toolbox
agent = Agent(client=client, tools=toolbox)
# Toolbox in a list
agent = Agent(client=client, tools=[toolbox])
# Mix local function tools with a toolbox
agent = Agent(client=client, tools=[get_internal_metrics, toolbox])
# Combine multiple toolboxes
agent = Agent(client=client, tools=[toolbox_a, toolbox_b])
Outils de filtrage avec select_toolbox_tools
Si votre boîte à outils regroupe plusieurs outils, mais qu’un agent a uniquement besoin d’un sous-ensemble, utilisez select_toolbox_tools pour affiner l’ensemble après l’extraction. Cela évite d’envoyer des définitions d’outils inutiles au modèle, ce qui réduit l’utilisation des jetons et empêche le modèle d’appeler des outils que vous n’envisagez pas d’exposer :
from agent_framework.foundry import select_toolbox_tools, get_toolbox_tool_name
# Filter by tool name
tools = select_toolbox_tools(toolbox, include_names=["web_search", "code_interpreter"])
# Filter by tool type
tools = select_toolbox_tools(toolbox, include_types=["mcp", "web_search"])
# Filter with a custom predicate
tools = select_toolbox_tools(toolbox, predicate=lambda t: "search" in (get_toolbox_tool_name(t) or ""))
Les fonctions d’assistance get_toolbox_tool_name(tool) et get_toolbox_tool_type(tool) renvoient respectivement le nom de la sélection et le type brut d’une entrée d’outil.
FoundryHostedToolType est un TypeAlias (Literal["code_interpreter", "file_search", "image_generation", "mcp", "web_search"] | str) pour l’achèvement guidé par l’IDE sur include_types / exclude_types.
Chemin de consommation MCP
Vous pouvez également utiliser une boîte à outils en tant que serveur MCP en pointant MCPStreamableHTTPTool sur l’URL du point de terminaison MCP de la boîte à outils.
L’URL du point de terminaison MCP s’affiche sur le portail Foundry ou suit le format suivant :
https://<account>.services.ai.azure.com/api/projects/<project>/toolsets/<name>/mcp?api-version=v1
Étant donné que le client se connecte directement au point de terminaison de la boîte à outils Foundry, vous devez vous authentifier à l'aide d'un jeton de porteur Entra ID via header_provider:
from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import get_bearer_token_provider
from agent_framework import Agent, MCPStreamableHTTPTool
credential = DefaultAzureCredential()
token_provider = get_bearer_token_provider(credential, "https://ai.azure.com/.default")
mcp_tool = MCPStreamableHTTPTool(
name="research_mcp",
url="https://<your-toolbox-mcp-endpoint>",
header_provider=lambda: {"Authorization": f"Bearer {token_provider()}"},
)
async with Agent(client=client, name="MCPAgent", tools=[mcp_tool]) as agent:
result = await agent.run("Search for recent papers on LLM agents.")
print(result.text)
Limitations
- Les outils MCP à l’intérieur d’une boîte à outils utilisent l’authentification côté serveur. L’authentification auprès du serveur MCP en amont est gérée via
project_connection_id(une connexion OAuth configurée dans le projet Foundry). Le client ne détient jamais de jetons porteurs pour le serveur en amont. - L’utilisation d’une boîte à outils en tant que serveur MCP nécessite une authentification côté client. Lorsque vous dirigez
MCPStreamableHTTPToolvers le point de terminaison MCP d’une boîte à outils, vous devez fournir un jeton porteur Entra ID (par exemple, viaget_bearer_token_provider(credential, "https://ai.azure.com/.default")) par l'intermédiaire deheader_provider. - La gestion des flux de consentement est un problème d’exécution. Si un outil MCP de boîte à outils se déclenche
CONSENT_REQUIREDpendantagent.run(), il est géré au moment de l’exécution, et non lors de la récupération de la boîte à outils.
Samples
| Sample | Description |
|---|---|
| foundry_chat_client_with_toolbox.py | Récupération de la boîte à outils de base, verrouillage de version, combinaison de boîtes à outils et filtrage. |
| foundry_chat_client_with_toolbox_mcp.py | Chemin de consommation MCP avec MCPStreamableHTTPTool |
| foundry_toolbox_context_provider.py | Sélection dynamique de l’outil pour chaque itération via un fournisseur de contexte |