Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
FoundryAgentconnette Agent Framework a una definizione dell'agente gestita da Microsoft servizio agente Foundry. Il modello, le istruzioni, gli strumenti ospitati e la versione dell'agente sono configurati in Foundry; l'applicazione si connette a tale definizione e usa le API di esecuzione, streaming e sessione standard di Agent Framework.
Usare questa integrazione per:
- Agenti prompt, denominati e con controllo delle versioni delle definizioni degli agenti lato server.
- Agenti ospitati, che vengono distribuite applicazioni agente raggiunte tramite un endpoint specifico dell'agente.
Per l'inferenza del modello diretto in cui l'applicazione è proprietaria della definizione dell'agente, vedere Microsoft provider di modelli Foundry. Per distribuire un'applicazione Agent Framework come agente ospitato, vedere Foundry Hosted Agents.To deploy an Agent Framework application as a Hosted Agent, see Foundry Hosted Agents.
Installare i pacchetti
dotnet add package Azure.AI.Projects --prerelease
dotnet add package Azure.Identity
dotnet add package Microsoft.Agents.AI.Foundry --prerelease
Connettersi a un agente di richiesta
Creare un AIProjectClient oggetto per il progetto Foundry ed eseguire il wrapping di come AgentReference .FoundryAgent Aggiungere la versione quando l'applicazione deve usare una definizione specifica dell'agente di richiesta.
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?"));
È anche possibile recuperare un ProjectsAgentRecord oggetto per usare la versione più recente o per ProjectsAgentVersion usare una versione recuperata in modo esplicito, quindi passare tale oggetto a projectClient.AsAIAgent(...).
Recuperare la versione più recente dell'agente di richiesta
Usare AgentAdministrationClient quando l'applicazione deve risolvere la versione registrata più recente in base al nome.
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?"));
Importante
Un FoundryAgent usa il modello, le istruzioni e gli strumenti ospitati archiviati nella relativa definizione foundry. Configurare tali funzionalità in Foundry; il client non può sostituirli in fase di esecuzione.
Avvertimento
DefaultAzureCredential è utile per lo sviluppo. Nell'ambiente di produzione preferisce credenziali specifiche, ManagedIdentityCredential ad esempio per evitare il probe delle credenziali indesiderate.
Connettersi a un agente ospitato
Gli agenti ospitati espongono un endpoint OpenAI specifico dell'agente. Compilare l'endpoint dall'endpoint del progetto e dal nome dell'agente registrato, quindi passarlo a 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();
Il selettore della versione controllata dall'amministratore dell'endpoint determina la versione attiva dell'agente ospitato.
Installare i pacchetti
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"
Usare FOUNDRY_AGENT_VERSION per gli agenti di prompt. Gli agenti ospitati possono ometterlo.
Connettersi a un agente di richiesta
Specificare l'endpoint del progetto, il nome dell'agente e la versione dell'agente. Il servizio fornisce il modello archiviato, le istruzioni e la configurazione dello strumento ospitato.
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()
Se un agente prompt dichiara uno strumento di funzione locale, passare il chiamabile corrispondente tramite tools= durante la costruzione FoundryAgent in modo che il client possa eseguirlo quando richiesto. Vedere l'esempio di pubblicazione e connessione dell'agente di richiesta.
Connettersi a un agente ospitato
Gli agenti ospitati non richiedono agent_version. Connettersi con l'endpoint del progetto e il nome dell'agente registrato.
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}")
Cosa funziona e cosa non accade con FoundryAgent
FoundryAgent si connette a una definizione di agente già esistente in Foundry. Le istruzioni archiviate e la configurazione degli strumenti sono autorevoli, pertanto il comportamento lato client è diverso da quello di proprietà dell'applicazione Agent(client=FoundryChatClient(...)).
Tools
Tipo di strumento passato a FoundryAgent(...) |
Behavior |
|---|---|
FunctionToolcon un Python locale chiamabile |
Supportato solo quando la definizione di funzione corrispondente esiste già nell'agente Foundry. Il chiamabile viene eseguito nel processo dell'applicazione quando Foundry lo richiede. |
| Strumenti ospitati, tra cui ricerca Web, interprete del codice, ricerca di file, MCP, generazione di immagini e Microsoft Casella degli strumenti Foundry | Configurare questi elementi nella definizione dell'agente Foundry. Passandoli sul lato client non li aggiunge all'agente gestito dal servizio. |
Per informazioni sugli allegati della casella degli strumenti e indicazioni dirette sul consumo mcp, vedere Microsoft Casella degli strumenti Foundry.
Non è possibile registrare un nuovo strumento visibile al modello in fase di costruzione. Il passaggio di una funzione chiamabile fornisce solo l'implementazione locale per una funzione già dichiarata dall'agente Foundry.
Provider di contesto
| Comportamento del fornitore di contesto | Funziona con FoundryAgent? |
|---|---|
| Aggiunge messaggi, ad esempio memoria recuperata, frammenti di rag o informazioni sul profilo utente | Yes. Il contesto inserito viene inoltrato con la richiesta. |
| Mantiene o osserva la conversazione | Yes. Il provider viene eseguito localmente intorno alla richiesta e alla risposta. |
| Aggiunge strumenti in modo dinamico | No, a meno che tali strumenti non siano già dichiarati nella definizione dell'agente Foundry. |
Usare Agent(client=FoundryChatClient(...)) quando l'applicazione richiede la selezione dinamica degli strumenti, il caricamento delle competenze o qualsiasi comportamento che modifica gli strumenti visibili al modello in fase di esecuzione.
Opzioni di esecuzione
Poiché la definizione dell'agente Foundry è l'origine della verità, non tutte le opzioni passate o default_optionsagent.run(...) vengono rispettate.
| Option | Comportamento dell'agente prompt |
|---|---|
model |
Ignorato. Il modello deriva dalla definizione dell'agente Foundry. |
tools, tool_choice, parallel_tool_calls |
Rimosso dalla richiesta. Gli strumenti devono essere dichiarati nella definizione dell'agente Foundry. |
instructions messaggi di sistema o di sviluppo |
Ignorato. Le istruzioni archiviate di Foundry sono autorevoli. |
conversation_id |
Usato e mappato alla sessione dell'agente Foundry, se applicabile. |
extra_body |
Inoltrato e unito al riferimento dell'agente fornito dal framework. |
Parametri di campionamento, metadati, user, storee response_format |
Inoltrato, ma la configurazione dell'agente Foundry o del modello può eseguire l'override o vincolare le configurazioni. |
Gli agenti ospitati ricevono lo stesso filtro lato client, ma l'agente distribuito può accettare, ignorare o reinterpretare qualsiasi opzione inoltrata. Verificare il comportamento rispetto all'agente ospitato specifico.
Suggerimento
Usare Agent(client=FoundryChatClient(...)) quando è necessario il controllo per esecuzione sulle istruzioni, sulle opzioni di generazione o sugli strumenti.
Gestire una sessione del servizio Agente ospitato
Gli agenti ospitati che usano sessioni sul lato servizio richiedono la superficie delle risposte di anteprima:
Creare la sessione del servizio in modo esplicito quando l'applicazione deve associarla a un tenant o a un utente, quindi eseguirne il wrapping dell'identificatore come sessione di Agent Framework.
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(
Suggerimento
Per un esempio completo, vedere l'esempiousing_deployed_agent.py.
Impostare un timeout HTTP personalizzato
FoundryAgent eredita il timeout di OpenAI SDK per impostazione predefinita. Passare timeout= in secondi quando le conversazioni a più turni o le condizioni di rete richiedono un limite diverso.
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,
)
Il timeout viene applicato a una copia per agente del client HTTP e non influisce sugli altri agenti che condividono lo stesso AIProjectClient.
Annotazioni
FoundryAgent l'integrazione per Prompt e Agenti ospitati non è attualmente disponibile per Agent Framework Go. Vedere il repository di Agent Framework Go per lo stato più aggiornato.
Eseguire, trasmettere e continuare le conversazioni
Dopo la connessione, usare le stesse API degli altri agenti di Agent Framework:
- Eseguire una richiesta con
RunAsyncorun. - Trasmettere gli aggiornamenti con
RunStreamingAsyncorun(..., stream=True). - Riutilizzare un oggetto
AgentSessionper continuare una conversazione. - Usare le API di conversazione lato server Foundry quando la conversazione deve essere visibile e persistente nel progetto Foundry.
Mantenere i nomi degli agenti Foundry, le versioni, gli endpoint e gli identificatori di conversazione nello stato lato server attendibile. Autorizzare il chiamante prima di riprendere qualsiasi conversazione esistente.