Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Microsoft Agent Framework hosztolási csomagjaival elérhetővé tehet egy Agent Framework-ügynököt a Foundry hosztolt ügynökeihez készült protokollokon keresztül. Az üzemeltetési csomagok lehetővé teszik az ügynöklogika kódban tartását, míg a Foundry kezeli az üzemeltetett futtatókörnyezetet, a munkameneteket, a méretezést, az identitást és a protokollvégpontokat.
Ebben a cikkben létrehoz egy minimális Agent Framework-ügynököt, elérhetővé teszi a Válaszok vagy az Invocations protokollon keresztül, teszteli a HTTP-vel, és üzembe helyezi azt a Foundryben a Azure fejlesztői parancssori felülettel.
A Microsoft Foundry Skill segíthet az adapter implementálásában, a protokollok tesztelésében és a telepítésbenazd.
Prerequisites
- Azure-előfizetés. Készíts egyet ingyen.
- Egy Foundry-projekt.
- Üzembe helyezett csevegőmodell, például
gpt-4.1vagygpt-4o. - A Foundry Project Manager szerepkör az üzemeltetett ügynök üzembe helyezését célzó projektben. További információ: Üzemeltetett ügynök üzembe helyezése.
- Azure CLI bejelentkezett (
az login), hogyDefaultAzureCredentialhitelesíthesse magát.
- Python 3.10 vagy újabb verzió.
- .NET 10 SDK vagy újabb.
A csomagok telepítése
Telepítse az Agent Frameworkt és az Foundry üzemeltetési csomagját:
pip install -U agent-framework agent-framework-foundry-hosting azure-identity python-dotenv
A agent_framework_foundry_hosting csomag tartalmazza a Foundry protokollok kiszolgálóit:
-
ResponsesHostServeraz OpenAI-kompatibilis/responsesvégponthoz. -
InvocationsHostServeraz általános/invocationsvégpont számára.
Adja hozzá az Agent Framework és a Foundry üzemeltetési csomagokat a projekthez:
dotnet add package Microsoft.Agents.AI
dotnet add package Microsoft.Agents.AI.Foundry.Hosting
dotnet add package Azure.AI.Projects
dotnet add package Azure.Identity
Az Invocations protokollhoz adja hozzá az Invocations kiszolgálócsomagot is:
dotnet add package Azure.AI.AgentServer.Invocations
Ezek a csomagok a Foundry protokollokhoz készült gazdagép-bővítményeket biztosítják:
-
AddFoundryResponsesésMapFoundryResponsesaz OpenAI-kompatibilis/responsesvégponthoz. -
AddInvocationsServerésMapInvocationsServeraz általános/invocationsvégpont esetében.
Üzemeltetési protokoll kiválasztása
A üzemeltetett ügynökök egy vagy több protokollt tehetnek közzé. Kezdje a legtöbb beszélgetési ügynök válaszaival.
| Protocol | Endpoint | Használja amikor |
|---|---|---|
| Responses | /responses |
OpenAI-kompatibilis csevegést, streamelést, válaszelőzményeket és beszélgetési szálkezelést szeretne. |
| Meghívások | /invocations |
Egyéni JSON-alakzatot, webhookstílusú végpontot vagy nem beszélgetési feldolgozást szeretne. |
A protokoll működésével és munkamenetekkel kapcsolatos háttérrel kapcsolatban lásd: Üzemeltetett ügynökök és Üzemeltetett ügynök munkamenetek kezelése.
Környezeti változók konfigurálása
Adja meg a projektvégpont és a modell üzembe helyezésének nevét a helyi fejlesztéshez:
export FOUNDRY_PROJECT_ENDPOINT="https://<resource>.services.ai.azure.com/api/projects/<project>"
export AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-4.1"
A PowerShellben:
$env:FOUNDRY_PROJECT_ENDPOINT="https://<resource>.services.ai.azure.com/api/projects/<project>"
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-4.1"
Amikor ugyanaz a kód üzemeltetett ügynökként fut a Foundryben, a platform futásidőben beszúrja a FOUNDRY_PROJECT_ENDPOINT és AZURE_AI_MODEL_DEPLOYMENT_NAME elemeket.
Válaszprotokoll
A Válasz protokollt akkor használja, ha egy OpenAI-kompatibilis csevegési végpontot szeretne streameléssel, válaszelőzményekkel és beszélgetési szálkezeléssel.
Responses-kiszolgáló létrehozása
Hozzon létre egy main.py nevű fájlt, amely egy Foundry-modellt használó minimális Agent Framework-ügynököt tartalmaz.
import os
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from agent_framework_foundry_hosting import ResponsesHostServer
from azure.identity import DefaultAzureCredential
from dotenv import load_dotenv
# Load environment variables from a .env file when present.
load_dotenv()
def main() -> None:
client = FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
credential=DefaultAzureCredential(),
)
agent = Agent(
client=client,
instructions="You are a friendly assistant. Keep your answers brief.",
# The hosting infrastructure manages conversation history, so the
# service doesn't need to store it.
default_options={"store": False},
)
server = ResponsesHostServer(agent)
server.run()
if __name__ == "__main__":
main()
Mit csinál ez a kódrészlet: Létrehoz egy Foundry-modellre épülő Agent Framework-ügynököt a FoundryChatClient használatával, majd átadja az ügynököt a ResponsesHostServer számára. A gazdagép elindít egy HTTP-kiszolgálót, és a POST /responses használatával elérhetővé teszi az ügynököt. Alapértelmezés szerint a kiszolgáló a porthoz 8088kapcsolódik.
Referencia: Microsoft Agent Framework dokumentációja
Futtassa az alkalmazást helyileg:
python main.py
Hozzon létre egy Program.cs fájlt, amely egy minimális Agent Framework-ügynököt tartalmaz, és a Responses protokollon keresztül egy Foundry-modellt használ.
using Azure.AI.Projects;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry.Hosting;
var projectEndpoint = new Uri(
Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT")
?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set."));
var deployment =
Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME")
?? "gpt-4o";
// Create the agent via the AI project client using the Responses API.
AIAgent agent = new AIProjectClient(projectEndpoint, new DefaultAzureCredential())
.AsAIAgent(
model: deployment,
instructions: "You are a friendly assistant. Keep your answers brief.",
name: "assistant",
description: "A simple general-purpose AI assistant");
// Host the agent as a Foundry hosted agent using the Responses API.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddFoundryResponses(agent);
var app = builder.Build();
app.MapFoundryResponses();
app.Run();
Mit tesz ez a kódrészlet: Létrehoz egy AIAgent elemet a Foundry-projekt ügyfeléből, regisztrálja Foundry Responses-gazdagépként a(z) AddFoundryResponses használatával, és leképezi a POST /responses végpontot a(z) MapFoundryResponses használatával. Alapértelmezés szerint a gazda a(z) 8088 porton figyel.
Referencia: AIProjectClient | DefaultAzureCredential
Futtassa az alkalmazást helyileg:
dotnet run
A Válaszok végpont tesztelése
Küldjön egy nem streamelő Responses-kérést a helyi kiszolgálóra.
Bash:
curl -sS -H "Content-Type: application/json" \
-X POST http://localhost:8088/responses \
-d '{"input":"Give me one practical tip for testing hosted agents.","stream":false}'
PowerShell:
$body = @{
input = "Give me one practical tip for testing hosted agents."
stream = $false
} | ConvertTo-Json
Invoke-RestMethod `
-Uri http://localhost:8088/responses `
-Method Post `
-Body $body `
-ContentType "application/json"
A kiszolgáló válaszszöveget és válaszazonosítót tartalmazó JSON-objektummal válaszol. Streamelési válaszok esetén állítsa a következőre streamtrue: . A gazdagép a Responses API által küldött szerveroldali eseményeket küld, például response.created, response.output_text.delta és response.completed.
Többfordulós beszélgetések
A beszélgetés folytatásához adja meg az előző válaszazonosítót a previous_response_id következő kérés mezőjében:
curl -sS -H "Content-Type: application/json" \
-X POST http://localhost:8088/responses \
-d '{"input":"Can you make that more concise?","previous_response_id":"<previous-response-id>","stream":false}'
Amikor az ügynök a Foundry-ben fut, ugyanez a minta a hosztolt ügynök Responses végpontján keresztül működik. Ha a későbbi körökben is ugyanarra a hosztolt sandbox fájlrendszerre van szükség, foglalja bele a(z) agent_session_id elemet, vagy használjon conversation azonosítót. További részletekért lásd: Üzemeltetett ügynök munkameneteinek kezelése.
Meghívások protokollja
Használja az Invocations protokollt, ha a hívó felek nem tudják használni a Responses API kérésformátumát, vagy ha a használati eset nem csevegési jellegű. Az Invocations-gazda a munkamenet-állapotát egy agent_session_id lekérdezési paraméteren és egy válaszfejlécken keresztül kezeli.
Invocations-gazdagép létrehozása
Használja ugyanazt az ügynökbeállítást, mint a Responses-példában, de InvocationsHostServer helyett ResponsesHostServer-val kezdje.
import os
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from agent_framework_foundry_hosting import InvocationsHostServer
from azure.identity import DefaultAzureCredential
from dotenv import load_dotenv
# Load environment variables from a .env file when present.
load_dotenv()
def main() -> None:
client = FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
credential=DefaultAzureCredential(),
)
agent = Agent(
client=client,
instructions="You are a friendly assistant. Keep your answers brief.",
default_options={"store": False},
)
server = InvocationsHostServer(agent)
server.run()
if __name__ == "__main__":
main()
A kódrészlet leírása: Az Agent Framework-ügynököt a segítségével üzemelteti POST /invocations. A gazda a munkamenetenkénti állapotot a agent_session_id lekérdezési paraméteren és a válaszfejlécen keresztül kezeli.
Referencia: Microsoft Agent Framework dokumentációja
Az Invocations protokoll egy InvocationHandler használ, amelyet Ön valósít meg az egyes kérések feldolgozásához. Regisztrálja az Invocations-kiszolgálót és a kezelőjét, majd képezze le a végpontokat.
using Azure.AI.AgentServer.Invocations;
using Microsoft.Agents.AI;
var builder = WebApplication.CreateBuilder(args);
// Register your agent and the Invocations server services.
builder.Services.AddInvocationsServer();
builder.Services.AddScoped<InvocationHandler, MyInvocationHandler>();
var app = builder.Build();
// Map the Invocations protocol endpoints:
// POST /invocations - invoke the agent
// GET /invocations/{id} - get result
// POST /invocations/{id}/cancel - cancel
app.MapInvocationsServer();
app.Run();
A kódrészlet leírása: Regisztrálja az Invocations kiszolgálói szolgáltatásokat és az implementációt InvocationHandler , majd leképezi a /invocations végpontokat. Az egyes kérések feldolgozási módjának meghatározásához a(z) MyInvocationHandler elemet valósítja meg. A teljes kezelőpéldáért lásd a .NET Meghívások mintapéldáját.
Hivatkozás: AddInvocationsServer
Az Invocations végpont tesztelése
Kérés küldése a helyi kiszolgálónak:
curl -sS -X POST http://localhost:8088/invocations \
-H "Content-Type: application/json" \
-d '{"message":"My name is Alice.","stream":false}'
Többfordulós beszélgetések esetén használja újra a agent_session_id válaszfejléc értékét lekérdezési agent_session_id paraméterként a következő kérelemben:
curl -sS -X POST "http://localhost:8088/invocations?agent_session_id=<session-id>" \
-H "Content-Type: application/json" \
-d '{"message":"What is my name?"}'
A platform nem tárolja az Invocations protokoll beszélgetési előzményeit.
agent_session_id A lekérdezési paraméterrel a későbbi hívásokat ugyanahhoz a üzemeltetett tesztkörnyezethez irányíthatja.
Deploy
Telepítés az Azure Developer CLI (azd) használatával. A folyamat mintafájlokat azure.yaml és Dockert használ az ügynökkonténerképének létrehozásához és a Foundry által üzemeltetett ügynök-futtatókörnyezetbe való telepítéséhez.
A hosztolt ügynök telepítéséhez a projektben a Foundry Project Manager szerepkör szükséges. További információ: Üzemeltetett ügynök üzembe helyezése.
Az Azure Developer CLI bővítmény telepítése
Telepítse az AI-ügynök bővítményét, és jelentkezzen be a minta inicializálása előtt:
azd ext install azure.ai.agents
azd auth login
A Dockernek helyileg kell futnia, mert azd ai agent run a minta Docker-fájljában deklarált tárolórendszerképet hozza létre. A parancs részleteiért lásd a Azure fejlesztői parancssori felületre vonatkozó referenciát.
Inicializálás mintajegyzékből
Hozzon létre egy új mappát, és inicializálja azt egy minta azure.yaml alapján. Ezek a parancsok inicializálják az aktuális könyvtárat, és az útmutatónak megfelelő konténeres telepítést választják ki.
mkdir my-agent-framework-agent
cd my-agent-framework-agent
azd ai agent init -t https://github.com/microsoft-foundry/foundry-samples/blob/main/samples/python/hosted-agents/agent-framework/responses/01-basic/azure.yaml --src . --deploy-mode container
mkdir my-agent-framework-agent
cd my-agent-framework-agent
azd ai agent init -t https://github.com/microsoft/agent-framework/blob/main/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-ChatClientAgent-Dockerfile/azure.yaml --src . --deploy-mode container
Kövesse a(z) azd ai agent init utasításait. A Python minta létrehozhat egy Foundry-projektet és üzembe helyezhet egy modellt. A C#-minta egy meglévő Foundry-projektet és modelltelepítést igényel.
Azure-erőforrások kiépítése
Ha az inicializált projekt egy új Foundry-projektet és modelltelepítést használ, először a Azure erőforrásokat építse ki:
azd provision
Ez a parancs létrehoz egy erőforráscsoportot, amely többek között egy Foundry-példányt, egy Modelltelepítéssel rendelkező Foundry-projektet, egy Application Insights-példányt és egy tárolóregisztrációs adatbázist tartalmaz az üzemeltetett ügynök lemezképeihez.
Helyileg futtassa a konténert
Futtassa helyileg az ügynökgazdát a azd használatával:
azd ai agent run
A gazdagép a következőre http://localhost:8088szolgál: . Egy másik terminálban hívja meg a helyi protokollvégpontot:
azd ai agent invoke --local "Hello!"
A végpontot közvetlenül is meghívhatja a következővel curl:
curl -X POST http://localhost:8088/responses \
-H "Content-Type: application/json" \
-d '{"input": "Hello!"}'
Telepítés a Foundryba
Az ügynök telepítése
azd deploy
Az üzembe helyezés egy tárolórendszerképbe csomagolja az ügynököt, leküldi a kiépített tárolóregisztrációs adatbázisba, és a Foundry által üzemeltetett ügynök futtatókörnyezetébe helyezi.
A Foundry üzemeltetési infrastruktúrája futtatókörnyezeti környezeti változókat injektál az ügynökbe, beleértve a következőket:
-
FOUNDRY_PROJECT_ENDPOINT: Annak az Foundry-projektnek a végponti URL-címe, amelyben az ügynök telepítve van. -
AZURE_AI_MODEL_DEPLOYMENT_NAME: A(z)azd ai agent initsorán kiválasztott modelltelepítés neve. -
APPLICATIONINSIGHTS_CONNECTION_STRING: A projekt Application Insights-példányának kapcsolati karakterlánc.
Az üzembe helyezéssel kapcsolatos fogalmak, engedélyek és felügyeleti részletekért tekintse meg a üzemeltetett ügynök üzembe helyezését és az üzemeltetett ügynök életciklusának kezelését ismertető cikket.
Troubleshooting
Ezzel az ellenőrzőlistával diagnosztizálhatja a gyakori problémákat, miközben üzemeltetett ügynököket fejleszt az Agent Framework használatával.
A modell nem érhető el a üzemeltetett tárolóban
Győződjön meg arról, hogy a hosztolt ügynök verziója tartalmazza a(z) AZURE_AI_MODEL_DEPLOYMENT_NAME elemet, és hogy az ügynök identitása rendelkezik jogosultsággal a Foundry-projekt eléréséhez. A platform beállítja a FOUNDRY_PROJECT_ENDPOINT változót; a kódodnak ki kell olvasnia ezt a változót, amikor a Foundryben fut.
A beszélgetés állapota nem marad fenn
A Responses protokoll esetében a későbbi fordulókban adja át a previous_response_id vagy egy conversation azonosítót.
Az Invocations protokoll esetében a platform nem tárolja a beszélgetési előzményeket.
Lekérdezési paraméterrel agent_session_id átirányíthatja a későbbi hívásokat ugyanahhoz a üzemeltetett tesztkörnyezethez.
A protokollverzió nem egyezik
Ha a kérések a frissítés után meghiúsulnak, győződjön meg arról, hogy a jegyzékfájl és az üzemeltetési csomag egyaránt a 2.0.0-s protokollverziót használja. A protokoll 1.0.0-s verziója már nem támogatott.