Microsoft Foundry

Microsoft Agent Framework ondersteunt zowel directe modeldeductie van Microsoft Foundry-projecteindpunten als door de service beheerde agents in de Foundry Agent Service.

Aan de slag komen

Voeg de vereiste NuGet-pakketten toe aan uw project.

dotnet add package Azure.Identity
dotnet add package Microsoft.Agents.AI.Foundry --prerelease

Twee agenttypen

De integratie van Microsoft Foundry toont twee verschillende gebruikspatronen:

Typ Geproduceerd type Beschrijving Gebruik wanneer
Antwoordagent ChatClientAgent Uw app levert programmatisch een model, instructies en hulpprogramma's tijdens uitvoeringstijd via AIProjectClient.AsAIAgent(...). Er wordt geen agent-resource aan de serverzijde aangemaakt. U bent de eigenaar van de agentdefinitie en wilt een eenvoudige, flexibele installatie. Dit is het patroon dat in de meeste voorbeelden wordt gebruikt.
Foundry Agent (geversioneerd) FoundryAgent Door de server beheerde agentdefinities worden gemaakt en geversied via de Foundry-portal of via een programma AIProjectClient.AgentAdministrationClient. Geef een ProjectsAgentVersion of ProjectsAgentRecord of AgentReference aan AIProjectClient.AsAIAgent(...). U hebt strikte, versiebeheerde agentdefinities nodig die worden beheerd in de Foundry-portal, via service-API's

Antwoordagent (directe deductie)

Gebruik AsAIAgent op AIProjectClient rechtstreeks met een model en instructies. Dit is het aanbevolen uitgangspunt voor de meeste scenario's.

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."));

Waarschuwing

DefaultAzureCredential is handig voor ontwikkeling, maar vereist zorgvuldige overwegingen in de productieomgeving. Overweeg in productie een specifieke referentie te gebruiken (bijvoorbeeld ManagedIdentityCredential) om latentieproblemen, onbedoelde referentieprobing en potentiële beveiligingsrisico's van terugvalmechanismen te voorkomen.

Dit pad is 'code-first' en creëert geen server-beheerde agentresource.

Foundry Agent (versie)

Gebruik de systeemeigen AIProjectClient.AgentAdministrationClient API's van de AI Projects SDK om resources van de versie van de agent op te halen en verpakken ze vervolgens met AsAIAgent. Agents kunnen rechtstreeks in de Foundry-portal of via een programma AIProjectClient.AgentAdministrationClientworden gemaakt en geconfigureerd.

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."));

Belangrijk

Foundry Agents-hulpprogramma's en -instructies zijn strikt afgestemd op de hulpprogramma's en instructies waarmee deze zijn gemaakt. Het wijzigen van hulpprogramma's of instructies tijdens runtime wordt niet ondersteund.

De agent gebruiken

Zowel ChatClientAgent (Antwoorden) als FoundryAgent (versiebeheer) zijn standaardexemplaren AIAgent en ondersteunen alle standaardbewerkingen, waaronder sessies, hulpprogramma's, middleware en streaming.

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));

Voor meer informatie over hoe je agents uitvoert en ermee werkt, raadpleeg de Aan de slag met agent-tutorials.

Gereedschapskisten

Note

Foundry Toolbox .NET-documenten zijn binnenkort beschikbaar.

Foundry in Python

In Python wonen alle Foundry-specifieke clients nu onder agent_framework.foundry.

  • agent-framework-foundry biedt de Cloud Foundry-connectors: FoundryChatClient, FoundryAgent, FoundryEmbeddingClient, en FoundryMemoryProvider.
  • agent-framework-foundry-local biedt FoundryLocalClient voor de uitvoering van een lokaal model.

Belangrijk

Op deze pagina worden de huidige Python-clients voor Microsoft Foundry-projecteindpunten, modeleindpunten en de Foundry Agent Service behandeld. Als u een zelfstandig Azure OpenAI-resource-eindpunt (https://<your-resource>.openai.azure.com) hebt, gebruikt u de Python richtlijnen op de pagina OpenAI-provider. Als u ondersteunde modellen lokaal wilt uitvoeren, raadpleegt u de pagina Foundry Local Provider.

Foundry-chat- en agentpatronen in Python

Scenario Pythonvorm Gebruik wanneer
Eenvoudige inferentie met het eindpunt van Foundry-antwoorden Agent(client=FoundryChatClient(...)) Uw app is eigenaar van de agentdefinitie, hulpprogramma's en gesprekslus en u wilt een model dat is geïmplementeerd in een Foundry-project.
Agents beheerd door de service in de Foundry Agent-service FoundryAgent(...) U wilt verbinding maken met een PromptAgent of HostedAgent die is gemaakt en geconfigureerd in de Foundry-portal of via de service-API's.

Installation

pip install agent-framework-foundry
pip install azure-identity

Hetzelfde agent-framework-foundry pakket omvat FoundryEmbeddingClient ook voor Foundry-modellen-eindpunten insluiten.

Configuratie

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"

Gebruik FOUNDRY_AGENT_VERSION voor promptagents. Gehoste agents kunnen deze weglaten.

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 en FoundryAgent gebruiken het projecteindpunt. FoundryEmbeddingClient maakt gebruik van het eindpunt voor afzonderlijke modellen.

De juiste Python-client kiezen

Scenario Voorkeursklant Aantekeningen
Azure OpenAI-resource OpenAIChatCompletionClient / OpenAIChatClient Gebruik de openAI-providerpagina.
Microsoft Foundry-projectdeductie Agent(client=FoundryChatClient(...)) Maakt gebruik van het API-eindpunt voor Foundry-antwoorden.
Microsoft Foundry-servicebeheerde agent FoundryAgent Aanbevolen voor Prompt Agents en HostedAgents.
Microsoft Foundry-modellen-eindpuntembeddings FoundryEmbeddingClient Gebruikt FOUNDRY_MODELS_ENDPOINT plus FOUNDRY_EMBEDDING_MODEL / FOUNDRY_IMAGE_EMBEDDING_MODEL.
Foundry Local Runtime Agent(client=FoundryLocalClient(...)) Zie Foundry Local.

Een agent maken met FoundryChatClient

FoundryChatClient maakt verbinding met een geïmplementeerd model in een Foundry-project en maakt gebruik van het eindpunt Antwoorden. Koppel deze aan een standaard Agent wanneer uw app eigenaar moet zijn van instructies, hulpprogramma's en sessieafhandeling.

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 is het Foundry-first-Python-pad voor directe deductie en ondersteunt hulpprogramma's, gestructureerde uitvoer en streaming.

Insluitingen maken met FoundryEmbeddingClient

Gebruik FoundryEmbeddingClient wanneer u tekst- of afbeeldingsinbeddingen wilt insluiten vanuit een Foundry-modelendpoint.

from agent_framework.foundry import FoundryEmbeddingClient

async with FoundryEmbeddingClient() as client:
    result = await client.get_embeddings(["hello from Agent Framework"])
    print(result[0].dimensions)

Verbinding maken met een door de service beheerde agent met FoundryAgent

Gebruik FoundryAgent deze optie wanneer de agentdefinitie zich in Foundry bevindt. Dit is de aanbevolen Python-API voor promptagents en HostedAgents.

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(),
)

Voor een HostedAgent laat u agent_version weg en gebruikt u in plaats daarvan de naam van de gehoste agent.

Verbinding maken met een geïmplementeerde (gehoste) Foundry-agent

Voor HostedAgents waarop sessies aan de servicezijde worden uitgevoerd (/agents/{name}/sessions), gebruik FoundryAgent met allow_preview=True om u aan te melden voor het preview-antwoordoppervlak en geef version="v2" het volgende door:

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",
)

Wanneer u de onderliggende servicesessie zelf moet beheren, bijvoorbeeld om een sessie te binden aan een specifieke tenant of gebruiker, maakt u de sessie via de preview-API AIProjectClient en verpakt u deze met 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

Zie het using_deployed_agent.py voorbeeld voor een volledig voorbeeld, inclusief het automatisch oplossen van de nieuwste versie.

Waarschuwing

De oudere Python AzureAIClient, AzureAIProjectAgentProvider, AzureAIAgentClient, AzureAIAgentsProvider en Azure compatibiliteitsoppervlakken voor het insluiten van AI zijn verwijderd uit de huidige agent_framework.azure-naamruimte. Gebruik voor de huidige Python code FoundryChatClient wanneer uw app eigenaar is van instructies en hulpprogramma's, FoundryAgent wanneer de definitie van de agent zich in Foundry bevindt en FoundryEmbeddingClient voor Foundry-modellen-eindpunten insluiten.

De agent gebruiken

Zowel FoundryChatClient als FoundryAgent integreren met de standaardervaring Python Agent, waaronder het aanroepen van hulpprogramma's, sessies en streaming-antwoorden. Voor lokale runtimes gebruikt u de afzonderlijke Foundry Local Provider pagina.

Gereedschapskisten

Belangrijk

Werkset-API's zijn experimenteel. Het oppervlak kan in toekomstige releases veranderen.

Een Foundry-werkset is een benoemde, versienummerde server-side bundel met gehoste configuraties van hulpprogramma's (code-interpreter, bestandszoekopdracht, beeldgeneratie, MCP, webzoekopdracht) die is geconfigureerd in een Microsoft Foundry-project. Met werksets kunt u de configuratie van hulpprogramma's eenmaal beheren in de Foundry-portal en deze opnieuw gebruiken tussen agents.

Agent Framework omvat alleen verbruik : het maken en bijwerken van werksetversies wordt uitgevoerd via de Foundry-portal of de onbewerkte azure-ai-projects SDK (azure-ai-projects>=2.1.0).

FoundryAgent vs FoundryChatClient

Agenttype Werksetgedrag
FoundryAgent (gehost) Toolbox-bijlage vindt plaats aan de serverzijde. Er is geen bedrading aan de clientzijde vereist.
FoundryChatClient (directe inferentie) Pak de gereedschapskist met get_toolbox() en geef deze door als tools=.

Twee verbruikspatronen

Pattern Beschrijving
Systeemeigen (gehoste hulpprogramma's) Hulpprogrammaconfiguraties worden uitgevoerd op de Foundry-runtime. Geef de werkset rechtstreeks door als tools=.
MCP Gebruik MCPStreamableHTTPTool tegenover het MCP-eindpunt van de gereedschapskist. Werkt met elke chat-client, niet alleen FoundryChatClient.

Een gereedschapskist ophalen

Gebruik FoundryChatClient.get_toolbox() om een gereedschapskist op te halen.

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)

Wanneer version wordt weggelaten, bepaalt get_toolbox de standaardversie in twee aanvragen. Maak een specifieke versie vast om de extra retour te voorkomen:

toolbox = await client.get_toolbox("research_toolbox", version="v3")

Note

Elke get_toolbox() aanroep doet een beroep op het netwerk; er is geen cache aan de kant van het framework, omdat standaardversies aan de serverkant kunnen veranderen. Caching is eigendom van de aanroeper.

Impliciete vervlakking

U hoeft niet te schrijven toolbox.tools. Het framework normalize_tools herkent ToolboxVersionObject en vereffent automatisch. Al deze werkzaamheden:

# 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])

Filterhulpmiddelen met select_toolbox_tools

Als uw gereedschapskist verschillende hulpmiddelen bundelt, maar een agent alleen een subset nodig heeft, gebruik select_toolbox_tools om de set te verfijnen na het ophalen. Dit voorkomt dat onnodige hulpprogrammadefinities naar het model worden verzonden, waardoor het tokengebruik wordt verminderd en wordt voorkomen dat het model hulpprogramma's aanroept die u niet wilt beschikbaar maken:

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 ""))

Helperfuncties get_toolbox_tool_name(tool) en get_toolbox_tool_type(tool) retourneren respectievelijk de selectienaam en het ruwe type van een invoer van een tool. FoundryHostedToolType is een TypeAlias (Literal["code_interpreter", "file_search", "image_generation", "mcp", "web_search"] | str) voor IDE-ondersteunde voltooiing op include_types / exclude_types.

MCP-verbruikspad

U kunt een werkset ook gebruiken als een MCP-server door te MCPStreamableHTTPTool verwijzen naar de MCP-eindpunt-URL van de werkset.

De MCP-eindpunt-URL wordt weergegeven in de Foundry-portal of volgt de indeling:

https://<account>.services.ai.azure.com/api/projects/<project>/toolsets/<name>/mcp?api-version=v1

Omdat de client rechtstreeks verbinding maakt met het Foundry-werkseteindpunt, moet u zich verifiëren met een Entra ID-bearertoken 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

  • MCP-hulpprogramma's in een werkset maken gebruik van verificatie aan de serverzijde. Verificatie voor de upstream MCP-server wordt verwerkt via project_connection_id (een OAuth-verbinding die is geconfigureerd in het Foundry-project). De client bevat nooit bearer-tokens voor de upstream-server.
  • Voor het gebruik van een toolkit als een MCP-server is authenticatie aan de clientzijde vereist. Wanneer u MCPStreamableHTTPTool op het MCP-eindpunt van een gereedschapskist richt, moet u een Entra ID-bearer token opgeven (bijvoorbeeld via get_bearer_token_provider(credential, "https://ai.azure.com/.default")) via header_provider.
  • Verwerking van toestemmingsstromen is een runtimeprobleem. Als een MCP-hulpprogramma in de gereedschapskist wordt geactiveerd CONSENT_REQUIRED tijdens agent.run() runtime, wordt het tijdens runtime verwerkt, niet bij het ophalen van de gereedschapskist.

Samples

Sample Beschrijving
foundry_chat_client_with_toolbox.py Eenvoudige gereedschapskist ophalen, versie vastzetten, gereedschapskisten combineren en filteren
foundry_chat_client_with_toolbox_mcp.py MCP-verbruikspad met MCPStreamableHTTPTool
foundry_toolbox_context_provider.py Dynamische selectie van per-beurt hulpmiddel via een contextprovider

Volgende stappen