Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
FoundryAgent verbindet Agent Framework mit einer Agentdefinition, die vom Microsoft Foundry Agent Service verwaltet wird. Das Modell, die Anweisungen, die gehosteten Tools und die Version des Agents werden in Foundry konfiguriert; Ihre Anwendung verbindet sich mit dieser Definition und verwendet die APIs für Ausführung, Streaming und Sitzungen des Agent Frameworks.
Verwenden Sie diese Integration für:
- Prompt-Agents, bei denen es sich um benannte und versionierte serverseitige Agentdefinitionen handelt.
- Gehostete Agenten, also bereitgestellte Agent-Anwendungen, die über einen agentspezifischen Endpunkt erreicht werden.
Informationen zur direkten Modellinferenz, bei der Ihre Anwendung die Agentdefinition verwaltet, finden Sie unter Microsoft Foundry-Modellanbieter. Informationen zum Bereitstellen einer Agent Framework-Anwendung als gehosteter Agent finden Sie unter Foundry Hosted Agents.
Installieren der Pakete
dotnet add package Azure.AI.Projects --prerelease
dotnet add package Azure.Identity
dotnet add package Microsoft.Agents.AI.Foundry --prerelease
Mit einem Prompt-Agenten verbinden
Erstellen Sie ein AIProjectClient für das Foundry-Projekt und umschließen Sie ein AgentReference als ein FoundryAgent. Legen Sie die Version fest, wenn die Anwendung eine bestimmte Prompt-Agent-Definition verwenden muss.
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?"));
Sie können auch eine ProjectsAgentRecord abrufen, um deren neueste Version zu verwenden, oder ein ProjectsAgentVersion, um eine explizit abgerufene Version zu verwenden, und das Objekt dann an projectClient.AsAIAgent(...) übergeben.
Abrufen der neuesten Prompt Agent-Version
Verwenden Sie AgentAdministrationClient, wenn die Anwendung die neueste registrierte Version anhand des Namens auflösen soll.
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 verwendet das Modell, die Anweisungen und gehosteten Tools, die in ihrer Foundry-Definition gespeichert sind. Konfigurieren Sie diese Funktionen in Foundry; der Client kann sie zur Laufzeit nicht ersetzen.
Warnung
DefaultAzureCredential ist praktisch für die Entwicklung. Bevorzugen Sie in der Produktion eine bestimmte Anmeldeinformation wie ManagedIdentityCredential, um ein unbeabsichtigtes Prüfen von Anmeldeinformationen zu vermeiden.
Herstellen einer Verbindung mit einem gehosteten Agent
Gehostete Agents machen einen agentspezifischen OpenAI-Endpunkt verfügbar. Erstellen Sie den Endpunkt aus dem Projektendpunkt und dem Namen des registrierten Agenten, und übergeben Sie ihn anschließend an 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();
Die vom Administrator kontrollierte Versionsauswahl des Endpunkts bestimmt die aktive Version des gehosteten Agents.
Installieren der Pakete
pip install agent-framework-foundry
Konfiguration
FOUNDRY_PROJECT_ENDPOINT="https://<your-project>.services.ai.azure.com"
FOUNDRY_AGENT_NAME="my-agent"
FOUNDRY_AGENT_VERSION="1.0"
Verwenden Sie FOUNDRY_AGENT_VERSION für Prompt-Agents. Gehostete Agents können sie weglassen.
Mit einem Prompt-Agenten verbinden
Geben Sie den Projektendpunkt, den Agentnamen und die Agentversion an. Der Dienst stellt das gespeicherte Modell, die Anweisungen und die Konfiguration des gehosteten Tools bereit.
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()
Wenn ein Prompt-Agent eine lokale Funktionshilfe deklariert, übergeben Sie die passende aufrufbare Funktion über tools= beim Erstellen von FoundryAgent, damit der Client sie bei Bedarf ausführen kann. Sehen Sie sich das Beispiel für das Veröffentlichen und Verbinden von Prompt-Agents an.
Herstellen einer Verbindung mit einem gehosteten Agent
Gehostete Agents benötigen agent_versionnicht. Stellen Sie eine Verbindung mit dem Projektendpunkt und dem Namen des registrierten Agents her.
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}")
Was funktioniert und was nicht? FoundryAgent
FoundryAgent stellt eine Verbindung mit einer Agentdefinition her, die bereits in Foundry vorhanden ist. Die gespeicherten Anweisungen und die Konfiguration des Tools sind maßgeblich, sodass sich das clientseitige Verhalten von einer anwendungseigenen Agent(client=FoundryChatClient(...)) unterscheidet.
Tools
An den Tooltyp übergeben FoundryAgent(...) |
Behavior |
|---|---|
FunctionTool mit einem lokalen Python-Callable |
Wird nur unterstützt, wenn die übereinstimmende Funktionsdefinition bereits im Foundry-Agent vorhanden ist. Die aufrufbare Funktion wird im Anwendungsprozess ausgeführt, wenn Foundry sie anfordert. |
| Gehostete Tools, einschließlich Websuche, Codedolmetscher, Dateisuche, MCP, Bildgenerierung und Microsoft Foundry Toolbox | Konfigurieren Sie dies in der Agentdefinition von Foundry. Wenn sie clientseitig übergeben werden, werden sie nicht dem dienstverwalteten Agenten hinzugefügt. |
Hinweise zur Einbindung der Toolbox und zur direkten MCP-Nutzung finden Sie unter Microsoft Foundry Toolbox.
Sie können zur Konstruktionszeit kein neues modellsichtbares Tool registrieren. Die Übergabe eines Funktions-Callbacks stellt nur die lokale Implementierung für eine Funktion bereit, die der Foundry-Agent bereits deklariert hat.
Kontextanbieter
| Verhalten des Kontextanbieters | Funktioniert mit FoundryAgent? |
|---|---|
| Fügt Nachrichten hinzu, z. B. abgerufenen Speicher, RAG-Codeausschnitte oder Benutzerprofilinformationen | Yes. Der eingefügte Kontext wird mit der Anforderung weitergeleitet. |
| Behält die Unterhaltung bei oder beobachtet sie. | Yes. Der Provider wird lokal im Rahmen von Anfrage und Antwort ausgeführt. |
| Dynamisches Hinzufügen von Tools | Nein, es sei denn, diese Tools sind bereits in der Agentendefinition von Foundry angegeben. |
Verwenden Sie Agent(client=FoundryChatClient(...)), wenn die Anwendung eine dynamische Toolauswahl, das Laden von Skills oder ein Verhalten benötigt, bei dem sich die für das Modell sichtbaren Tools zur Laufzeit verändern.
Ausführungsoptionen
Da die Definition des Foundry-Agenten maßgeblich ist, wird nicht jede über default_options oder agent.run(...) übergebene Option berücksichtigt.
| Auswahl | Verhalten des Prompt-Agents |
|---|---|
model |
Ignoriert. Das Modell stammt aus der Foundry-Agentdefinition. |
tools, tool_choiceparallel_tool_calls |
Aus der Anfrage entfernt. Tools müssen in der Definition des Foundry-Agents deklariert werden. |
instructions und System- oder Entwicklernachrichten |
Ignoriert. Die gespeicherten Foundry-Anweisungen sind maßgeblich. |
conversation_id |
Wird gegebenenfalls verwendet und einer Foundry-Agent-Sitzung zugeordnet. |
extra_body |
Weitergeleitet und mit der vom Framework bereitgestellten Agentreferenz zusammengeführt. |
Samplingparameter, Metadaten, user, storeund response_format |
Weitergeleitet, aber die Foundry-Agent- oder Modellkonfiguration kann diese außer Kraft setzen oder einschränken. |
Gehostete Agents erhalten dieselbe clientseitige Filterung, aber der bereitgestellte Agent kann jede weitergeleitete Option akzeptieren, ignorieren oder erneut interpretieren. Überprüfen Sie das Verhalten für den bestimmten gehosteten Agent.
Tip
Verwenden Sie Agent(client=FoundryChatClient(...)), wenn Sie pro Lauf Kontrolle über Anweisungen, Generierungsoptionen oder Werkzeuge benötigen.
Verwalten einer Gehosteten Agent-Dienstsitzung
Gehostete Agenten, die serverseitige Sitzungen verwenden, erfordern die Vorschauoberfläche für Responses:
Erstellen Sie die Service-Sitzung explizit, wenn die Anwendung sie an einen Mandanten oder Benutzer binden muss, und kapseln Sie deren Kennung anschließend in eine Agent-Framework-Sitzung.
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(
Tip
Ein vollständiges Beispiel finden Sie im using_deployed_agent.py Beispiel .
Festlegen eines benutzerdefinierten HTTP-Timeouts
FoundryAgent übernimmt standardmäßig das Timeout des OpenAI SDK. Übergeben Sie timeout= in Sekunden, wenn mehrturnige Konversationen oder Netzwerkbedingungen ein anderes Limit erfordern.
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,
)
Das Timeout wird auf eine Kopie pro Agent des HTTP-Clients angewendet und wirkt sich nicht auf andere Agents aus, die dasselbe AIProjectClientverwenden.
Note
FoundryAgent Die Integration für Prompt- und gehostete Agenten ist derzeit für Agent Framework Go nicht verfügbar. Den neuesten Status finden Sie im Agent Framework Go-Repository .
Ausführen, Streamen und Fortsetzen von Unterhaltungen
Verwenden Sie nach dem Herstellen der Verbindung dieselben APIs wie andere Agent Framework-Agents:
- Führen Sie eine Anfrage mit
RunAsyncoderrunaus. - Streaming-Updates mit
RunStreamingAsyncoderrun(..., stream=True). - Verwenden Sie
AgentSessionerneut, um eine Konversation fortzusetzen. - Verwenden Sie die serverseitigen Konversations-APIs von Foundry, wenn die Konversation im Foundry-Projekt sichtbar sein und gespeichert werden muss.
Speichern Sie die Namen, Versionen, Endpunkte und Konversations-IDs von Foundry-Agenten auf der vertrauenswürdigen Serverseite. Autorisieren Sie den Anrufer, bevor Sie eine vorhandene Unterhaltung fortsetzen.