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.
FoundryAgentansluter Agent Framework till en agentdefinition som hanteras av Microsoft Foundry Agent Service. Agentens modell, instruktioner, värdbaserade verktyg och version konfigureras i Foundry. ditt program ansluter till den definitionen och använder standard-API:er för Agent Framework-körning, strömning och session.
Använd den här integreringen för:
- Fråga agenter, som heter och versionshanterade agentdefinitioner på serversidan.
- Värdbaserade agenter, som distribueras agentprogram som nås via en agentspecifik slutpunkt.
Information om direkt modellinferens där ditt program äger agentdefinitionen finns i Microsoft Foundry-modellprovider. Information om hur du distribuerar ett Agent Framework-program som värdbaserad agent finns i Foundry Hosted Agents (Foundry Hosted Agents).
Installera programvarupaketen
dotnet add package Azure.AI.Projects --prerelease
dotnet add package Azure.Identity
dotnet add package Microsoft.Agents.AI.Foundry --prerelease
Ansluta till en promptagent
Skapa ett AIProjectClient för Foundry-projektet och omslut som AgentReference en FoundryAgent. Fäst versionen när programmet måste använda en specifik promptagentdefinition.
using Azure.AI.Projects;
using Azure.AI.Projects.Agents;
using Azure.Identity;
using Microsoft.Agents.AI.Foundry;
var projectClient = new AIProjectClient(
new Uri(Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT")!),
new DefaultAzureCredential());
FoundryAgent agent = projectClient.AsAIAgent(
new AgentReference(
Environment.GetEnvironmentVariable("FOUNDRY_AGENT_NAME")!,
Environment.GetEnvironmentVariable("FOUNDRY_AGENT_VERSION")!));
Console.WriteLine(await agent.RunAsync("What can you help me with?"));
Du kan också hämta en ProjectsAgentRecord för att använda den senaste versionen eller en ProjectsAgentVersion för att använda en explicit hämtad version och sedan skicka objektet till projectClient.AsAIAgent(...).
Hämta den senaste promptagentversionen
Använd AgentAdministrationClient när programmet ska matcha den senaste registrerade versionen med namn.
ProjectsAgentRecord agentRecord =
await projectClient.AgentAdministrationClient.GetAgentAsync(
Environment.GetEnvironmentVariable("FOUNDRY_AGENT_NAME")!);
FoundryAgent latestAgent = projectClient.AsAIAgent(agentRecord);
Console.WriteLine(await latestAgent.RunAsync("What can you help me with?"));
Important
A FoundryAgent använder modellen, instruktionerna och värdbaserade verktyg som lagras i dess Foundry-definition. Konfigurera dessa funktioner i Foundry; klienten kan inte ersätta dem vid körning.
Varning
DefaultAzureCredential är praktiskt för utveckling. I produktion föredrar du en specifik autentiseringsuppgift, till exempel ManagedIdentityCredential för att undvika oavsiktlig avsökning av autentiseringsuppgifter.
Ansluta till en värdbaserad agent
Värdbaserade agenter exponerar en agentspecifik OpenAI-slutpunkt. Skapa slutpunkten från projektslutpunkten och det registrerade agentnamnet och skicka den sedan till AIProjectClient.AsAIAgent(...).
Env.TraversePath().Load();
// Port the Hosted-* samples listen on when run locally with `dotnet run`.
const int LocalAgentPort = 8088;
// AZURE_AI_AGENT_NAME is the registered server-side agent name.
string agentName = Environment.GetEnvironmentVariable("AZURE_AI_AGENT_NAME")
?? throw new InvalidOperationException("AZURE_AI_AGENT_NAME is not set.");
// Pick the server to talk to. `--local` and `--remote` mirror the flag `azd ai agent invoke`
// exposes; with neither, ask at startup.
══════════════════════════════════════════════════════════
""");
Console.ResetColor();
Console.WriteLine();
Slutpunktens administratörsstyrda versionsväljare avgör den aktiva värdbaserade agentversionen.
Installera programvarupaketen
pip install agent-framework-foundry
Configuration
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.
Ansluta till en promptagent
Ange projektslutpunkt, agentnamn och agentversion. Tjänsten tillhandahåller den lagrade modellen, instruktionerna och konfigurationen av värdbaserade verktyg.
async def main() -> None:
agent = FoundryAgent(
project_endpoint="https://your-project.services.ai.azure.com",
agent_name="my-prompt-agent",
agent_version="1.0",
credential=AzureCliCredential(),
)
result = await agent.run("What is the capital of France?")
print(f"Agent: {result}")
# Streaming
print("Agent (streaming): ", end="", flush=True)
async for chunk in agent.run("Tell me a fun fact.", stream=True):
if chunk.text:
print(chunk.text, end="", flush=True)
print()
Om en promptagent deklarerar ett lokalt funktionsverktyg skickar du det matchande anropsbara objektet när tools= du skapar så att FoundryAgent klienten kan köra det när det begärs. Se exemplet för att publicera och ansluta till promptagenten.
Ansluta till en värdbaserad agent
Värdbaserade agenter kräver agent_versioninte . Anslut med projektslutpunkten och det registrerade agentnamnet.
async def main() -> None:
# HostedAgents don't need agent_version
agent = FoundryAgent(
project_endpoint=os.getenv("FOUNDRY_PROJECT_ENDPOINT"),
agent_name=os.getenv("FOUNDRY_AGENT_NAME"),
credential=AzureCliCredential(),
)
result = await agent.run("Summarize the latest news about AI.")
print(f"Agent: {result}")
Vad fungerar och vad som inte fungerar med FoundryAgent
FoundryAgent ansluter till en agentdefinition som redan finns i Foundry. De lagrade instruktionerna och verktygskonfigurationen är auktoritativa, så beteendet på klientsidan skiljer sig från ett programägt Agent(client=FoundryChatClient(...)).
Tools
Verktygstyp skickad till FoundryAgent(...) |
Behavior |
|---|---|
FunctionToolmed en lokal Python anropsbar |
Stöds endast när matchande funktionsdefinition redan finns på Foundry-agenten. Anropsbara körs i programprocessen när Foundry begär det. |
| Värdbaserade verktyg, inklusive webbsökning, kodtolkare, filsökning, MCP, bildgenerering och Microsoft Foundry Toolbox | Konfigurera dessa i foundry-agentdefinitionen. Att skicka dem på klientsidan lägger inte till dem i den tjänsthanterade agenten. |
Vägledning för verktygslådans bifogade filer och direkt MCP-förbrukning finns i Microsoft Foundry Toolbox.
Du kan inte registrera ett nytt modell synligt verktyg vid byggtiden. Att skicka en funktion som kan anropas tillhandahåller endast den lokala implementeringen för en funktion som Foundry-agenten redan deklarerar.
Kontextleverantörer
| Beteende för kontextprovider | Fungerar med FoundryAgent? |
|---|---|
| Lägger till meddelanden, till exempel hämtat minne, RAG-kodfragment eller användarprofilinformation | Yes. Den inmatade kontexten vidarebefordras med begäran. |
| Bevarar eller observerar konversationen | Yes. Providern körs lokalt runt begäran och svaret. |
| Lägger till verktyg dynamiskt | Nej, såvida inte dessa verktyg redan har deklarerats i foundry-agentdefinitionen. |
Använd Agent(client=FoundryChatClient(...)) när programmet behöver dynamiskt verktygsval, kompetensinläsning eller något beteende som ändrar modell synliga verktyg vid körning.
Körningsalternativ
Eftersom Foundry-agentdefinitionen är källan till sanningen, är inte alla alternativ som skickas igenom default_options eller agent.run(...) respekteras.
| Option | Fråga agentens beteende |
|---|---|
model |
Ignoreras. Modellen kommer från foundry-agentdefinitionen. |
tools, , tool_choiceparallel_tool_calls |
Har tagits bort från begäran. Verktyg måste deklareras i foundry-agentdefinitionen. |
instructions och system- eller utvecklarmeddelanden |
Ignoreras. De lagrade Foundry-instruktionerna är auktoritativa. |
conversation_id |
Används och mappas till Foundry-agentsessionen när det är tillämpligt. |
extra_body |
Vidarebefordras och sammanfogas med referensen för den ramverksbaserade agenten. |
Samplingsparametrar, metadata, user, storeoch response_format |
Vidarebefordras, men Foundry-agenten eller modellkonfigurationen kan åsidosätta eller begränsa dem. |
Värdbaserade agenter får samma filtrering på klientsidan, men den distribuerade agenten kan acceptera, ignorera eller omtolka alla vidarebefordrade alternativ. Kontrollera beteendet mot den specifika värdbaserade agenten.
Tips/Råd
Använd Agent(client=FoundryChatClient(...)) när du behöver kontroll per körning över instruktioner, generationsalternativ eller verktyg.
Hantera en värdbaserad agenttjänstsession
Värdbaserade agenter som använder sessioner på tjänstsidan kräver förhandsversionen av svarsytan:
Skapa tjänstsessionen explicit när programmet måste binda den till en klientorganisation eller användare och omslut sedan dess identifierare som en Agent Framework-session.
queries = [
"Hi!",
"Your name is Javis. What can you do?",
"What is your name?",
]
for query in queries:
print(f"\nUser: {query}")
print("Agent: ", end="", flush=True)
async for chunk in agent.run(query, session=session, stream=True):
if chunk.text:
print(chunk.text, end="", flush=True)
print()
async def run_service_managed_session(
*,
agent: FoundryAgent,
project_client: AIProjectClient,
agent_name: str,
) -> None:
"""Let Foundry create the hosted-agent session, then delete it when finished."""
session = AgentSession()
print("\nService-managed hosted-agent session")
print(f"Before first request: {session.state.get(FOUNDRY_HOSTED_AGENT_SESSION_ID_KEY)}")
try:
await run_conversation(agent, session)
print(f"After conversation: {session.state.get(FOUNDRY_HOSTED_AGENT_SESSION_ID_KEY)}")
finally:
hosted_session_id = session.state.get(FOUNDRY_HOSTED_AGENT_SESSION_ID_KEY)
if isinstance(hosted_session_id, str) and hosted_session_id:
await project_client.agents.delete_session(agent_name, hosted_session_id)
print(f"Deleted session: {hosted_session_id}")
async def run_user_managed_session(
*,
agent: FoundryAgent,
project_client: AIProjectClient,
agent_name: str,
agent_version: str | None,
) -> None:
"""Create, attach, and delete a hosted-agent session explicitly."""
resolved_agent_version = agent_version
if resolved_agent_version is None:
agent_details = await project_client.agents.get(agent_name)
resolved_agent_version = agent_details.versions.latest.version
hosted_session = await project_client.agents.create_session(
agent_name,
version_indicator=VersionRefIndicator(agent_version=resolved_agent_version),
)
session = AgentSession()
session.state[FOUNDRY_HOSTED_AGENT_SESSION_ID_KEY] = hosted_session.agent_session_id
print("\nUser-managed hosted-agent session")
print(f"Created session: {hosted_session.agent_session_id}")
try:
await run_conversation(agent, session)
finally:
await project_client.agents.delete_session(agent_name, hosted_session.agent_session_id)
print(f"Deleted session: {hosted_session.agent_session_id}")
async def main() -> None:
credential = AzureCliCredential()
project_endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ["FOUNDRY_AGENT_NAME"]
agent_version = os.getenv("FOUNDRY_AGENT_VERSION")
project_client = AIProjectClient(
Tips/Råd
Se exempletusing_deployed_agent.py för ett fullständigt exempel.
Ange en anpassad HTTP-timeout
FoundryAgent ärver OpenAI SDK-tidsgränsen som standard. Skicka timeout= in sekunder när konversationer eller nätverksförhållanden i flera svängar kräver en annan gräns.
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",
credential=AzureCliCredential(),
timeout=120.0,
)
Tidsgränsen tillämpas på en kopia per agent av HTTP-klienten och påverkar inte andra agenter som delar samma AIProjectClient.
Anmärkning
FoundryAgent integrering för prompt- och värdbaserade agenter är för närvarande inte tillgänglig för Agent Framework Go. Se Agent Framework Go-lagringsplatsen för den senaste statusen.
Köra, strömma och fortsätt konversationer
När du har anslutit använder du samma API:er som andra Agent Framework-agenter:
- Kör en begäran med
RunAsyncellerrun. - Stream-uppdateringar med
RunStreamingAsyncellerrun(..., stream=True). - Återanvänd en
AgentSessionför att fortsätta en konversation. - Använd Konversations-API:er på Foundry-serversidan när konversationen måste vara synlig och bevarad i Foundry-projektet.
Behåll Foundry-agentnamn, versioner, slutpunkter och konversationsidentifierare i betrott tillstånd på serversidan. Auktorisera anroparen innan du återupptar en befintlig konversation.