Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Microsoft Agent Framework stöder både direkt modellinferens från Microsoft Foundry-projektslutpunkter och tjänsthanterade agenter i Foundry Agent Service.
Komma igång
Lägg till nödvändiga NuGet-paket i projektet.
dotnet add package Azure.Identity
dotnet add package Microsoft.Agents.AI.Foundry --prerelease
Två agenttyper
Integreringen Microsoft Foundry visar två distinkta användningsmönster:
| Type | Producerad typ | Beskrivning | Använd när |
|---|---|---|---|
| Svarsagent | ChatClientAgent |
Appen tillhandahåller automatiskt en modell, instruktioner och verktyg under körning via AIProjectClient.AsAIAgent(...). Ingen agentresurs på serversidan skapas. |
Du äger agentdefinitionen och vill ha en enkel, flexibel konfiguration. Det här är det mönster som används i de flesta exempel. |
| Foundry Agent (versionerad) | FoundryAgent |
Serverhanterad – agentdefinitioner skapas och versionshanteras antingen via Foundry-portalen eller programmatiskt via AIProjectClient.AgentAdministrationClient. Skicka en ProjectsAgentVersion eller ProjectsAgentRecord eller AgentReference till AIProjectClient.AsAIAgent(...). |
Du behöver strikta, versionshanterade agentdefinitioner som hanteras i Foundry-portalen, via tjänst-API:er |
Svarsagent (direkt slutsatsdragning)
Använd AsAIAgent på AIProjectClient direkt tillsammans med en modell och instruktioner. Detta är den rekommenderade startpunkten för de flesta scenarier.
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."));
Varning
DefaultAzureCredential är praktiskt för utveckling men kräver noggrant övervägande i produktion. I produktion bör du överväga att använda en specifik autentiseringsuppgift (t.ex. ManagedIdentityCredential) för att undvika problem med svarstid, oavsiktlig avsökning av autentiseringsuppgifter och potentiella säkerhetsrisker från reservmekanismer.
Den här vägen är code-first och skapar inte en agentresurs hanterad av servern.
Foundry Agent (versionerad)
Använd de interna AIProjectClient.AgentAdministrationClient API:erna från AI Projects SDK för att hämta versionshanterade agentresurser och sedan omsluta dem med AsAIAgent. Agenter kan skapas och konfigureras direkt i Foundry-portalen eller programmatiskt 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."));
Viktigt!
Foundry Agents-verktyg och instruktioner är strikt begränsade till de som de skapades med, och att försöka ändra verktyg eller instruktioner vid körning stöds inte.
Använda agenten
Både ChatClientAgent (svar) och FoundryAgent (versionerade) är standardinstanser AIAgent och stöder alla standardåtgärder, inklusive sessioner, verktyg, mellanprogram och direktuppspelning.
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));
Mer information om hur du kör och interagerar med agenter finns i självstudierna om att komma igång med agenten.
Verktygskassar
Note
Foundry Toolbox .NET-dokument kommer snart.
Foundry i Python
I Python finns nu alla Foundry-specifika klienter under agent_framework.foundry.
-
agent-framework-foundrytillhandahåller Cloud Foundry-kontakter:FoundryChatClient,FoundryAgent,FoundryEmbeddingClientochFoundryMemoryProvider. -
agent-framework-foundry-localtillhandahållerFoundryLocalClientför lokal modellkörning.
Viktigt!
Den här sidan beskriver de aktuella Python klienterna för Microsoft Foundry-projektslutpunkter, modellslutpunkter och Foundry Agent Service. Om du har en fristående Azure OpenAI-resursslutpunkt (https://<your-resource>.openai.azure.com) använder du Python vägledning på sidan OpenAI-provider. Om du vill köra modeller som stöds lokalt kan du se sidan Foundry Lokal leverantör.
Mönster för chatt och agent i foundry i Python
| Scenario | Python-struktur | Använd när |
|---|---|---|
| Enkel slutsatsdragning med API-slutpunkten Foundry Responses | Agent(client=FoundryChatClient(...)) |
Din app äger agentdefinitionen, verktygen och konversationsloopen och du vill att en modell ska distribueras i ett Foundry-projekt. |
| Tjänsthanterade agenter i Foundry Agent-tjänsten | FoundryAgent(...) |
Du vill ansluta till en PromptAgent eller HostedAgent som skapas och konfigureras i Foundry-portalen eller via tjänst-API:erna. |
Installation
pip install agent-framework-foundry
pip install azure-identity
Samma agent-framework-foundry paket innehåller även FoundryEmbeddingClient för Foundry models-endpoint embeddings.
Konfiguration
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"
Använd FOUNDRY_AGENT_VERSION för promptagenter. Värdbaserade agenter kan utelämna det.
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 och FoundryAgent använd projektslutpunkten.
FoundryEmbeddingClient använder slutpunkten för separata modeller.
Välj rätt Python klient
| Scenario | Önskad klient | Notes |
|---|---|---|
| Azure OpenAI-resurs | OpenAIChatCompletionClient / OpenAIChatClient |
Använd sidan OpenAI-leverantör. |
| Microsoft Foundry-projektets inferens | Agent(client=FoundryChatClient(...)) |
Använder Foundry Responses-slutpunkten. |
| Microsoft Foundry-tjänsthanterad agent | FoundryAgent |
Rekommenderas för Prompt Agents och HostedAgents. |
| Microsoft Foundry-modeller - endpoint-embeddingar | FoundryEmbeddingClient |
Använder FOUNDRY_MODELS_ENDPOINT plus FOUNDRY_EMBEDDING_MODEL / FOUNDRY_IMAGE_EMBEDDING_MODEL. |
| Foundry Lokal körning | Agent(client=FoundryLocalClient(...)) |
Se Foundry Local. |
Skapa en agent med FoundryChatClient
FoundryChatClient ansluter till en distribuerad modell i ett Foundry-projekt och använder svarsslutpunkten. Kombinera den med en standard Agent när din app ska äga instruktioner, verktyg och sessionshantering.
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 är en Python-miljö avsedd för Foundry för direkt inferens, och den stöder verktyg, strukturerade utdata och strömning.
Skapa inbäddningar med FoundryEmbeddingClient
Använd FoundryEmbeddingClient när du vill ha text- eller bildinbäddningar från en slutpunkt för Foundry-modeller.
from agent_framework.foundry import FoundryEmbeddingClient
async with FoundryEmbeddingClient() as client:
result = await client.get_embeddings(["hello from Agent Framework"])
print(result[0].dimensions)
Anslut till en tjänsthanterad agent med FoundryAgent
Använd FoundryAgent när agentdefinitionen finns i Foundry. Detta är den rekommenderade Python-API:n för PromptAgents och 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(),
)
För en HostedAgent utelämnar du agent_version och använder namnet på den värdbaserade agenten i stället.
Ansluta till en distribuerad (värdbaserad) Foundry-agent
För HostedAgents som kör sessioner på tjänstsidan (/agents/{name}/sessions), använd FoundryAgent tillsammans med allow_preview=True för att aktivera förhandsgranskningsfunktionen för svarshantering och vidarebefordra 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",
)
När du behöver hantera den underliggande tjänstsessionen själv – till exempel för att binda en session till en specifik klientorganisation eller användare – skapar du sessionen via förhandsversions-API AIProjectClient :et och omsluter den med 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
Se hela exempletusing_deployed_agent.py för ett fullständigt exempel, inklusive automatisk lösning av den senaste versionen.
Varning
De äldre kompatibilitetsytorna för Python AzureAIClient, AzureAIProjectAgentProvider, AzureAIAgentClient, AzureAIAgentsProvider och Azure AI-inbäddningar har tagits bort från den nuvarande namnrymden agent_framework.azure. För aktuell Python-kod använder du FoundryChatClient när din app äger instruktioner och verktyg, FoundryAgent när agentdefinitionen finns i Foundry och FoundryEmbeddingClient för Foundry-modeller-slutpunktsinbäddningar.
Använda agenten
Både FoundryChatClient och FoundryAgent integreras med standard-Pythonmiljö Agent, inklusive verktygsanrop, sessioner och strömningssvar. För lokala körmiljöer använder du den separata Foundry Local-provider-sidan.
Verktygskassar
Viktigt!
API:er för verktygslådan är experimentella. Ytan kan ändras i framtida versioner.
En Foundry-verktygslåda är en namngiven version av serversidans paket med värdbaserade verktygskonfigurationer (kodtolk, filsökning, bildgenerering, MCP, webbsökning) som konfigurerats i ett Microsoft Foundry-projekt. Med verktygslådor kan du hantera verktygskonfigurationen en gång i Foundry-portalen och återanvända den mellan agenter.
Agent Framework omfattar endast förbrukning – att skapa och uppdatera verktygslådeversioner görs via Foundry-portalen eller rå-SDK azure-ai-projects (azure-ai-projects>=2.1.0).
FoundryAgent vs FoundryChatClient
| Agenttyp | Verktygslådans beteende |
|---|---|
| FoundryAgent (värd) | Den bifogade verktygslådan sker på serversidan. Ingen kabeldragning på klientsidan krävs. |
| FoundryChatClient (direkt slutsatsdragning) | Hämta verktygslådan med get_toolbox() och skicka den som tools=. |
Två förbrukningsmönster
| Pattern | Beskrivning |
|---|---|
| Infödd (värdverktyg) | Verktygskonfigurationer körs på Foundry runtime-miljön. Skicka verktygslådan direkt som tools=. |
| MCP | Använd MCPStreamableHTTPTool mot verktygslådans MCP-slutpunkt. Fungerar med alla chattklienter, inte bara FoundryChatClient. |
Hämta en verktygslåda
Använd FoundryChatClient.get_toolbox() för att hämta en verktygslåda:
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)
När version utelämnas löser get_toolbox standardversionen i två begäranden. Fäst en specifik version för att undvika extra tur och retur:
toolbox = await client.get_toolbox("research_toolbox", version="v3")
Note
Varje get_toolbox() anrop träffar nätverket – det finns ingen cache på ramverkssidan eftersom standardversioner kan ändra serversidan. Cache är ägda av anroparen.
Implicit utjämning
Du behöver inte skriva toolbox.tools. Ramverkets normalize_tools identifierar ToolboxVersionObject och plattas ut automatiskt. Alla dessa arbeten:
# 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])
Filtreringsverktyg med select_toolbox_tools
Om verktygslådan paketerar flera verktyg men en agent bara behöver en delmängd använder du select_toolbox_tools för att begränsa uppsättningen efter hämtningen. Detta förhindrar att onödiga verktygsdefinitioner skickas till modellen, vilket minskar tokenanvändningen och förhindrar att modellen anropar verktyg som du inte tänker exponera:
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 ""))
Hjälpfunktioner get_toolbox_tool_name(tool) och get_toolbox_tool_type(tool) returnerar urvalsnamnet respektive råtypen för en verktygspost.
FoundryHostedToolType är en TypeAlias (Literal["code_interpreter", "file_search", "image_generation", "mcp", "web_search"] | str) för IDE-guidat slutförande på include_types / exclude_types.
MCP-förbrukningssökväg
Du kan också använda en verktygslåda som en MCP-server genom att peka MCPStreamableHTTPTool på verktygslådans MCP-slutpunkts-URL.
URL:en för MCP-slutpunkten visas på Foundry Portal eller följer formatet:
https://<account>.services.ai.azure.com/api/projects/<project>/toolsets/<name>/mcp?api-version=v1
Eftersom klienten ansluter direkt till slutpunkten för Foundry-verktygslådan måste du autentisera med en Entra ID-ägartoken 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-verktyg i en verktygslåda använder autentisering på serversidan. Autentisering till den överordnade MCP-servern hanteras via
project_connection_id(en OAuth-anslutning som konfigurerats i Foundry-projektet). Klienten innehåller aldrig ägartoken för den överordnade servern. - Användning av en verktygslåda som en MCP-server kräver klientautentisering. När du pekar
MCPStreamableHTTPToolpå en verktygslådas MCP-slutpunkt måste du ange en Entra ID-bärartoken (till exempel viaget_bearer_token_provider(credential, "https://ai.azure.com/.default")) genomheader_provider. - Hantering av samtyckesflöde är en körningsfråga. Om ett MCP-verktyg i verktygslådan
CONSENT_REQUIREDutlöses underagent.run()hanteras det vid körtid, inte under hämtning av verktygslådan.
Samples
| Sample | Beskrivning |
|---|---|
| foundry_chat_client_with_toolbox.py | Grundläggande hämtning av verktygslåda, versionstappning, kombination av verktygslådor och filtrering |
| foundry_chat_client_with_toolbox_mcp.py | MCP-förbrukningssökväg med MCPStreamableHTTPTool |
| foundry_toolbox_context_provider.py | Dynamiskt verktygsval för varje tur via en kontextleverantör |