Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Gebruik het pakket langchain_azure_ai.agents.hosting om een gecompileerde LangGraph-grafiek beschikbaar te maken via de protocollen voor Microsoft Foundry hosted agents. Met het hostingpakket kunt u de logica van uw LangChain- en LangGraph-agent in code houden terwijl Foundry de gehoste runtime, sessies, schaal, identiteit en protocoleindpunten beheert.
In dit artikel maakt u een minimale LangGraph-agent, maakt u deze beschikbaar via het protocol Antwoorden of Aanroepen, test u deze via HTTP en implementeert u deze in Foundry met de Azure Developer CLI of de Foundry Toolkit Visual Studio Code-extensie.
U leert ook hoe u een bestaand LangGraph-project migreert zonder de bijbehorende code of configuratie te wijzigen.
Prerequisites
- Een Azure-abonnement. Maak er gratis een.
- Een Gieterij-project.
- Een geïmplementeerd chatmodel, zoals
gpt-4.1ofgpt-5-mini. - Python 3.10 of hoger.
- Azure CLI aangemeld (
az login), zodatDefaultAzureCredentialkan authenticeren.
Installeer het pakket
Installeer langchain-azure-ai versie 1.2.9 of hoger met de hosting extra:
pip install -U "langchain-azure-ai[hosting]>=1.2.9" azure-identity
De hosting extra installeert de Foundry-protocolbibliotheken die worden gebruikt door de hostservers:
-
azure-ai-agentserver-responsesvoor het openAI-compatibele/responseseindpunt. -
azure-ai-agentserver-invocationsvoor het algemene/invocationseindpunt.
Een hostingprotocol kiezen
Gehoste agents kunnen een of meer protocollen beschikbaar maken. Begin met antwoorden voor de meeste gespreksagenten.
| Protocol | Hostklasse | Eindpunt | Wanneer gebruiken |
|---|---|---|---|
| Responses | ResponsesHostServer |
/responses |
U wilt een OpenAI-compatibele chat, streaming, antwoordgeschiedenis en conversatiethreads. |
| Aanroepen | InvocationsHostServer |
/invocations |
U wilt een aangepaste JSON-shape, een eindpunt in webhookstijl of niet-gespreksverwerking. |
Zie Gehoste agents en sessies voor achtergrondinformatie over protocolgedrag en gehoste agentsessies beheren.
Omgevingsvariabelen configureren
Stel de naam van het projecteindpunt en de modelimplementatie in voor lokale ontwikkeling:
export FOUNDRY_PROJECT_ENDPOINT="https://<resource>.services.ai.azure.com/api/projects/<project>"
export FOUNDRY_MODEL_NAME="gpt-4.1"
Wanneer dezelfde code in Foundry wordt uitgevoerd als een Hosted agent, injecteert het platform FOUNDRY_PROJECT_ENDPOINT. Als u azd ai agent init met een voorbeeld azure.yaml gebruikt, gebruikt het gegenereerde project ook FOUNDRY_MODEL_NAME voor de geselecteerde modelimplementatie.
Protocol voor antwoorden
Gebruik het protocol Antwoorden als u een openAI-compatibel chat-eindpunt wilt met streaming, antwoordgeschiedenis en gespreksthreading.
Een antwoordhost maken
Maak een bestand met de naam main.py met een minimale LangGraph-agent die gebruikmaakt van een Foundry-model. Dit patroon komt overeen met het basisantwoordenvoorbeeld in de langchain-azure-ai bronopslagplaats.
import os
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI
from langchain_azure_ai.agents.hosting import ResponsesHostServer
_AZURE_AI_SCOPE = "https://ai.azure.com/.default"
def build_chat_model() -> ChatOpenAI:
project_endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"].rstrip("/")
deployment = os.environ.get("FOUNDRY_MODEL_NAME", "gpt-4.1")
credential = DefaultAzureCredential()
project = AIProjectClient(endpoint=project_endpoint, credential=credential)
openai_client = project.get_openai_client()
token_provider = get_bearer_token_provider(credential, _AZURE_AI_SCOPE)
return ChatOpenAI(
model=deployment,
base_url=str(openai_client.base_url),
api_key=token_provider,
)
def main() -> None:
graph = create_agent(build_chat_model(), tools=[])
port = int(os.environ.get("PORT", "8088"))
ResponsesHostServer(graph).run(port=port)
if __name__ == "__main__":
main()
Wat dit codefragment doet: Maakt een LangGraph-agent met LangChain's create_agent, verbindt deze met het OpenAI-compatibele modeleindpunt van het Foundry-project en geeft de gecompileerde grafiek door aan ResponsesHostServer. De host start een HTTP-server en maakt de grafiek beschikbaar via POST /responses. De server verbindt standaard met de poort 8088of met de waarde van de PORT omgevingsvariabele wanneer deze is ingesteld.
Note
Deep Agents worden op dezelfde manier gehost als andere LangGraph-agents. Geef de agent rechtstreeks door aan ResponsesHostServer.
agent = create_deep_agent(...)
ResponsesHostServer(agent).run(port=port)
Voer de app lokaal uit:
python main.py
Het eindpunt voor antwoorden testen
Verzend een niet-streaming Responses-verzoek naar de lokale server.
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"
Voor streamingreacties stelt u stream in op true. De host stuurt serververzonden gebeurtenissen van de Responses API, zoals response.created, response.output_text.delta en response.completed.
Gesprekken
ResponsesHostServer ondersteunt twee gespreksstatuspatronen. Het patroon dat wordt gebruikt, is afhankelijk van of uw gecompileerde grafiek een LangGraph-controlepunt heeft.
| Grafiekconfiguratie | Gespreksbron | Wat de host in latere beurten naar de grafiek stuurt |
|---|---|---|
| Grafiek zonder controlepunt | Antwoordgeschiedenis van de protocolruntime | Vorige reactiegeschiedenis plus de huidige aanvraaginvoer |
| Grafiek gecompileerd met een checkpointfunctie | LangGraph-controlepuntstatus die wordt opgegeven door de gespreks- of antwoordthread | Alleen invoer van huidige aanvraag |
Gebruik een checkpointer wanneer je grafiek de runtime-status van LangGraph, onderbrekingen of node-lokale status over meerdere beurten nodig heeft. Voor lokale tests kunt u een controlepunt in het geheugen gebruiken:
from langgraph.checkpoint.memory import MemorySaver
graph = create_agent(
build_chat_model(),
tools=[],
checkpointer=MemorySaver(),
)
Gebruik voor Hosted Agents in productie een duurzame checkpointer in plaats van een in-memory-checkpointer, zodat de grafiekstatus behouden blijft bij containerherstarts.
Clients vervolgen een Responses-gesprek door previous_response_id of een conversation-ID door te geven. Voor lokale tests koppelt u de vorige antwoord-id in de volgende aanvraag:
POST http://localhost:8088/responses
Content-Type: application/json
{
"input": "Can you make that more concise?",
"previous_response_id": "<previous-response-id>",
"stream": false
}
Wanneer de agent in Foundry draait, werkt hetzelfde patroon via het Responses-eindpunt van de gehoste agent. Als u later ook hetzelfde gehoste sandboxbestandssysteem nodig hebt, neem dan agent_session_id op of gebruik een conversation-ID. Zie Gehoste agentsessies beheren voor meer informatie.
Menselijke-inbreng
Als uw grafiek LangGraph-aanroepen interrupt() gebruikt, toont ResponsesHostServer openstaande interrupts via standaard outputitems van de Responses API:
- Een
function_callitem met de naam__hosted_agent_adapter_interrupt__. - Een
mcp_approval_requestitem metserver_labelingesteld oplanggraph.
Clients kunnen de grafiek hervatten door een function_call_output item te verzenden waarvan call_id het overeenkomt met de interrupt-id of een mcp_approval_response item waarvan approval_request_id de interrupt-id overeenkomt. Gebruik function_call_output wanneer u een rijke LangGraph Command payload met resume, update of goto-velden moet verzenden. Gebruik mcp_approval_response deze functie voor een eenvoudige goedkeurings- of afkeuringsstroom.
Protocol voor aanroepen
Gebruik InvocationsHostServer deze functie wanneer uw bellers de aanvraagvorm voor de antwoord-API niet kunnen gebruiken of wanneer uw scenario geen chatgesprek is. De standaardhost voor aanroepen accepteert een message tekenreeks en een optionele stream vlag.
Een aanroephost maken
Gebruik dezelfde modelbouwfunctie uit het voorbeeld Antwoorden, maar begin InvocationsHostServer in plaats van ResponsesHostServer.
import os
from langchain.agents import create_agent
from langgraph.checkpoint.memory import MemorySaver
from langchain_azure_ai.agents.hosting import InvocationsHostServer
def main() -> None:
graph = create_agent(
build_chat_model(),
tools=[],
checkpointer=MemorySaver(),
)
port = int(os.environ.get("PORT", "8088"))
InvocationsHostServer(graph).run(port=port)
if __name__ == "__main__":
main()
Wat dit codefragment doet: Host de LangGraph-agent via POST /invocations. De MemorySaver checkpointer biedt lokale continuïteit over meerdere interacties heen voor een opgegeven sessie-ID. Gebruik voor productie een robuust checkpointmechanisme, zodat de status behouden blijft na het opnieuw opstarten van containers.
Note
Deep Agents worden op dezelfde manier gehost als andere LangGraph-agents. Geef de agent rechtstreeks door aan InvocationsHostServer.
agent = create_deep_agent(...)
InvocationsHostServer(agent).run(port=port)
Het eindpunt voor aanroepen testen
Een niet-streamingaanvraag verzenden:
curl -i -X POST http://localhost:8088/invocations \
-H "Content-Type: application/json" \
-d '{"message":"My name is Alice.","stream":false}'
Niet-streamingaanvragen retourneren JSON in deze vorm:
{
"response": "Assistant text"
}
Voor gesprekken met meerdere beurten hergebruikt u de x-agent-session-id responseheader als queryparameter agent_session_id in het volgende verzoek:
curl -X POST "http://localhost:8088/invocations?agent_session_id=<session-id>" \
-H "Content-Type: application/json" \
-d '{"message":"What is my name?"}'
Streamingverzoeken geven text/event-stream gebeurtenissen met payloads met tokens terug:
curl -N -X POST http://localhost:8088/invocations \
-H "Content-Type: application/json" \
-d '{"message":"Count to 5.","stream":true}'
De stream bevat token gebeurtenissen gevolgd door een terminal done gebeurtenis:
data: {"token": "..."}
event: done
data: {}
Het aanvraagschema aanpassen
Als u de aanvraagtekst wilt aanpassen, maakt u een subklasse van InvocationsHostServer en overschrijft u parse_request. U kunt ook build_input overschrijven om de geparseerde gegevens toe te wijzen aan een aangepaste graaftoestand.
from starlette.requests import Request
from langchain_azure_ai.agents.hosting import InvocationsHostServer
class TicketHostServer(InvocationsHostServer):
async def parse_request(self, request: Request) -> tuple[str, bool]:
data = await request.json()
ticket_id = data["ticket_id"]
description = data["description"]
stream = bool(data.get("stream", False))
return f"Summarize ticket {ticket_id}: {description}", stream
if __name__ == "__main__":
TicketHostServer(graph).run()
Wat dit codefragment doet: Accepteert een aangepaste nettolading van een ticket en converteert deze naar één gebruikersbericht voordat de host de grafiek aanroept. Gebruik build_input voor complexere grafiekstatussen in plaats van het verzoek tot tekst af te vlakken.
Deploy
U kunt implementeren met behulp van de Azure Developer CLI of de Foundry Toolkit Visual Studio Code-extensie. De Azure Cli-stroom voor ontwikkelaars maakt gebruik van voorbeeldbestanden azure.yaml en Docker. De extensiestroom biedt een begeleide implementatie-ervaring in Visual Studio Code.
Voor de implementatie van gehoste agents is de rol Foundry Project Manager op het project vereist. Zie Een gehoste agent implementeren voor meer informatie.
Implementeren met Azure Developer CLI
De langchain-azure-ai bronopslagplaats bevat voorbeelden van gehoste agents die u kunt uitvoeren en implementeren met behulp van de Azure Developer CLI. De flow maakt gebruik van de azure.yaml, Dockerfile en main.py van elke sample. Zie azure.yaml meer informatie over de configuratie van de hosted-agent in.
Installeer de AI-agentextensie en meld u aan voordat u een voorbeeld initialiseert:
azd ext install azure.ai.agents
azd auth login
Docker moet lokaal actief zijn omdat azd ai agent run de containerimage bouwt die is opgegeven in de Dockerfile van het voorbeeld. Zie de naslaginformatie Azure Developer CLI voor meer informatie.
Initialiseer met een voorbeeldbestand 'azure.yaml'
Maak een nieuwe map en initialiseer deze op basis van een voorbeeld azure.yaml. Vervang de azure.yaml URL door het voorbeeld dat u wilt gebruiken.
mkdir my-langchain-agent
cd my-langchain-agent
azd ai agent init -m https://github.com/langchain-ai/langchain-azure/blob/main/samples/hosting/langgraph-hosted-agents/responses/01_basic/azure.yaml
Volg de aanwijzingen van azd ai agent init. Als u nog geen Foundry-project en modelimplementatie hebt, kan de initialisatiestroom u helpen bij het maken ervan.
De container lokaal uitvoeren
Voer de agenthost lokaal uit via azd:
azd ai agent run
De host draait op http://127.0.0.1:8088. Roep in een andere terminal het lokale protocoleindpunt rechtstreeks aan:
curl -X POST http://127.0.0.1:8088/responses \
-H "Content-Type: application/json" \
-d '{"input": "Hello!"}'
PowerShell-equivalent:
(Invoke-WebRequest -Uri http://127.0.0.1:8088/responses `
-Method POST -ContentType 'application/json' `
-Body '{"input": "Hello!"}').Content
U kunt de lokale agent ook aanroepen via azd:
azd ai agent invoke --local "Hello!"
Implementeren in Foundry
Als het geïnitialiseerde project gebruikmaakt van een nieuw Foundry-project en een nieuwe modelimplementatie, richt u eerst de Azure resources in:
azd provision
Rol de agent uit:
azd deploy
De implementatie verpakt de agent in een containerinstallatiekopie, pusht deze naar het ingerichte containerregister en implementeert deze naar de runtime van de Foundry Hosted Agent.
De Foundry-hostinginfrastructuur injecteert runtime-omgevingsvariabelen in de agent, waaronder:
-
FOUNDRY_PROJECT_ENDPOINT: de eindpunt-URL voor het Foundry-project waar de agent is geïmplementeerd. -
FOUNDRY_MODEL_NAME: De naam van de modelimplementatie geselecteerd tijdensazd ai agent init. -
APPLICATIONINSIGHTS_CONNECTION_STRING: de verbindingsreeks voor het Application Insights-exemplaar van het project.
Zie Een gehoste agent implementeren en de levenscyclus van gehoste agents beheren voor volledige implementatieconcepten, machtigingen en beheer.
Implementeren met Foundry Toolkit Visual Studio Code-extensie
Zie quickstart: Uw eerste gehoste agent implementeren voor implementatie op basis van extensies.
Een bestaande agent hosten
Als uw toepassing al werkt met LangSmith of de LangGraph CLI, gebruikt u de langchain_azure_ai.agents.hosting.run module om de agent naadloos op Foundry te hosten zonder de code of configuratie ervan te wijzigen.
Start vanaf de hoofdmap van het project een Responses-host:
python -m langchain_azure_ai.agents.hosting.run --protocol responses
Als u dezelfde graaf beschikbaar wilt maken via het Invocations-protocol, stelt u --protocol in op invocations. Als langgraph.json u meerdere grafieken definieert, geeft u de grafieknaam door als het eerste argument. Gebruik --config <path> dit als het configuratiebestand zich niet op het standaardpad langgraph.json bevindt. Voorbeeld:
python -m langchain_azure_ai.agents.hosting.run agent --protocol invocations
Gebruik dezelfde moduleopdracht als het containerinvoerpunt wanneer u de bestaande toepassing implementeert in Foundry.
Configureer bijvoorbeeld de opdracht in azure.yaml.
De belangrijkste instelling is het startpunt.
services:
my-agent:
host: azure.ai.agent
kind: hosted
codeConfiguration:
runtime: python_3_13
entryPoint: '-m langchain_azure_ai.agents.hosting.run --protocol responses'
...
...
Troubleshooting
Gebruik deze controlelijst om veelvoorkomende problemen vast te stellen bij het ontwikkelen van gehoste agents met langchain_azure_ai.agents.hosting.
Validatie van grafiekschema mislukt
De standaardhosts verwachten een gecompileerde LangGraph-grafiek waarvan de status een messages veld heeft, zoals MessagesState. Als uw graaf gebruikmaakt van een aangepast statusschema, moet u de host subklasseren en build_input overschrijven. Overschrijf voor Responses handle_create wanneer u volledige controle nodig hebt over het parseren van verzoeken, de uitvoering van de grafiek en de gegenereerde Responses-gebeurtenissen.
De gespreksstatus wordt niet voortgezet
Voor het Responses-protocol geeft u previous_response_id of een conversation-ID door in latere beurten. Als uw graaf een checkpointer gebruikt, controleer dan of de checkpointer is geconfigureerd en persistent is voor de omgeving waarin de agent wordt uitgevoerd.
Voor het protocol Invocations slaat het platform de gespreksgeschiedenis niet op.
Gebruik een agent_session_id queryparameter om latere aanroepen naar dezelfde gehoste sandbox te routeren en gebruik uw eigen statusarchief of LangGraph-controlepunt voor gespreksstatus.
Het model kan niet worden bereikt in de gehoste container
Controleer of de versie van de gehoste agent FOUNDRY_MODEL_NAME bevat en of de agentidentiteit gemachtigd is om het Foundry-project aan te roepen. Het platform stelt FOUNDRY_PROJECT_ENDPOINT in; je code moet die variabele uitlezen wanneer die in Foundry wordt uitgevoerd.