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.
Använd paketet langchain_azure_ai.agents.hosting för att exponera en kompilerad LangGraph-graf via protokollen för Microsoft Foundry värdagenter. Med värdpaketet kan du behålla langchain- och LangGraph-agentlogik i kod medan Foundry hanterar värdbaserade runtime-, sessioner, skalnings-, identitets- och protokollslutpunkter.
I den här artikeln skapar du en minimal LangGraph-agent, exponerar den via protokollet Svar eller anrop, testar den via HTTP och distribuerar den till Foundry med Azure Developer CLI eller Foundry Toolkit Visual Studio Code-tillägget.
Du får också lära dig hur du migrerar ett befintligt LangGraph-projekt utan att ändra dess kod eller konfiguration.
Förutsättningar
- Ett Azure-abonnemang. Skapa en kostnadsfritt.
- Ett Foundry-projekt.
- En distribuerad chattmodell, till exempel
gpt-4.1ellergpt-5-mini. - Python 3.10 eller senare.
- Azure CLI inloggad (
az login) såDefaultAzureCredentialkan autentisera.
Installera paketet
Installera langchain-azure-ai version 1.2.9 eller senare med värdextra:
pip install -U "langchain-azure-ai[hosting]>=1.2.9" azure-identity
Tillägget hosting installerar foundry-protokollbiblioteken som används av värdservrarna:
-
azure-ai-agentserver-responsesför den OpenAI-kompatibla/responsesändpunkten. -
azure-ai-agentserver-invocationsför den generiska/invocationsslutpunkten.
Välj ett värdprotokoll
Värdagenter kan tillhandahålla ett eller flera protokoll. Börja med Svar för de flesta konversationsagenter.
| Protokoll | Värdklass | Endpoint | Använd när |
|---|---|---|---|
| Responses | ResponsesHostServer |
/responses |
Du vill ha OpenAI-kompatibel chatt, direktuppspelning, svarshistorik och konversationstrådning. |
| Anrop | InvocationsHostServer |
/invocations |
Du vill ha en anpassad JSON-struktur, en webhook-liknande endpoint eller bearbetning som inte är konversationsbaserad. |
Bakgrund om protokollbeteende och sessioner finns i Värdbaserade agenter och Hantera värdbaserade agentsessioner.
Konfigurera miljövariabler
Ange projektets slutpunkt och modelldistributionsnamn för lokal utveckling:
export FOUNDRY_PROJECT_ENDPOINT="https://<resource>.services.ai.azure.com/api/projects/<project>"
export FOUNDRY_MODEL_NAME="gpt-4.1"
När samma kod körs som en värdbaserad agent i Foundry matar plattformen in FOUNDRY_PROJECT_ENDPOINT. Om du använder azd ai agent init med ett exempel på azure.yaml, använder det genererade projektet också FOUNDRY_MODEL_NAME för den valda modellinstallationen.
Svarsprotokoll
Använd protokollet Svar när du vill ha en OpenAI-kompatibel chattslutpunkt med direktuppspelning, svarshistorik och konversationstrådar.
Skapa en Responses-värd
Skapa en fil med namnet main.py med en minimal LangGraph-agent som använder en Foundry-modell. Det här mönstret matchar det grundläggande svarsexemplet på langchain-azure-ai källlagringsplatsen.
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()
Vad det här kodfragmentet gör: Skapar en LangGraph-agent med LangChains create_agent, ansluter den till Foundry-projektets OpenAI-kompatibla modellslutpunkt och skickar den kompilerade grafen till ResponsesHostServer. Värdprogrammet startar en HTTP-server och gör grafen tillgänglig via POST /responses. Som standard binder servern till port 8088, eller till värdet för PORT miljövariabeln när en anges.
Note
Deep Agents hostas på samma sätt som andra LangGraph-agenter. Skicka agenten direkt till ResponsesHostServer.
agent = create_deep_agent(...)
ResponsesHostServer(agent).run(port=port)
Kör appen lokalt:
python main.py
Testa svarsslutpunkten
Skicka en begäran om icke-direktuppspelningssvar till den lokala servern.
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"
För strömningssvar anger du stream till true. Värden skickar serverutskickade händelser från Responses API, till exempel response.created, response.output_text.delta och response.completed.
Konversationer
ResponsesHostServer stöder två konversationstillståndsmönster. Mönstret som används beror på om det kompilerade diagrammet har en LangGraph-kontrollpunkt.
| Diagramkonfiguration | Konversationskälla | Vad värden skickar till grafen i senare turer |
|---|---|---|
| Diagram utan kontrollpunkt | Svarshistorik från protokollkörningen | Tidigare svarshistorik plus aktuella begärandeindata |
| Graf som kompilerats med en kontrollpunkterare | LangGraph-kontrollpunktstillståndet som styrs av konversationen eller svarstråden | Endast indata för aktuell begäran |
Använd en kontrollpunkt när diagrammet behöver Tillstånd för LangGraph-körning, avbrott eller nodlokalt tillstånd mellan svängar. För lokal testning kan du använda en minnesintern kontrollpunkt:
from langgraph.checkpoint.memory import MemorySaver
graph = create_agent(
build_chat_model(),
tools=[],
checkpointer=MemorySaver(),
)
För värdbaserade produktionsagenter använder du en beständig kontrollpunkt i stället för en minnesintern kontrollpunkt så att graftillståndet överlever omstarter av containrar.
Klienter fortsätter en svarskonversation genom att skicka previous_response_id eller ett conversation ID. För lokal testning kedjar du det tidigare svars-ID:t i nästa begäran:
POST http://localhost:8088/responses
Content-Type: application/json
{
"input": "Can you make that more concise?",
"previous_response_id": "<previous-response-id>",
"stream": false
}
När agenten körs i Foundry fungerar samma mönster via slutpunkten för svar från värdbaserade agenter. Om senare interaktioner också behöver samma hostade sandbox-filsystem inkluderar du agent_session_id eller använder ett conversation-ID. Mer information finns i Hantera värdbaserade agentsessioner.
Människa i processen
Om din graf använder LangGraph-interrupt()anrop visar ResponsesHostServer väntande avbrott via standardobjekt i Responses API-utdata:
- Ett
function_callobjekt med namnet__hosted_agent_adapter_interrupt__. - Ett
mcp_approval_requestobjekt medserver_labelvärdetlanggraph.
Klienter kan återuppta diagrammet genom att antingen skicka ett function_call_output objekt vars matchar avbrotts-ID call_id :t eller ett mcp_approval_response objekt vars matchar avbrotts-ID approval_request_id :t. Använd function_call_output när du behöver skicka en utökad LangGraph-nyttolast Command med resume-, update- eller goto-fält. Använd mcp_approval_response för ett enkelt flöde för att godkänna eller avvisa.
Anropsprotokoll
Använd InvocationsHostServer när dina anropare inte kan använda formen För svars-API-begäran eller när ditt scenario inte är en chattkonversation. Den förvalda Invocations-värden accepterar en sträng message och en valfri flagga stream.
Skapa en värd för anrop
Använd samma modellskapande funktion från exemplet Svar, men starta InvocationsHostServer i stället för 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()
Vad det här kodfragmentet gör: Är värd för LangGraph-agenten via POST /invocations. Kontrollpunktsverktyget MemorySaver ger lokal kontinuitet för flera svängar för ett visst sessions-ID. För produktion använder du en beständig kontrollpunkt så att tillståndet överlever omstarter av containrar.
Note
Deep Agents hostas på samma sätt som andra LangGraph-agenter. Skicka agenten direkt till InvocationsHostServer.
agent = create_deep_agent(...)
InvocationsHostServer(agent).run(port=port)
Testa slutpunkten för anrop
Skicka en begäran som inte är direktuppspelning:
curl -i -X POST http://localhost:8088/invocations \
-H "Content-Type: application/json" \
-d '{"message":"My name is Alice.","stream":false}'
Icke-strömmande begäranden returnerar JSON i den här formen:
{
"response": "Assistant text"
}
För konversationer i flera omgångar återanvänder du svarshuvudet x-agent-session-id som frågeparametern agent_session_id i nästa begäran:
curl -X POST "http://localhost:8088/invocations?agent_session_id=<session-id>" \
-H "Content-Type: application/json" \
-d '{"message":"What is my name?"}'
Strömmande begäranden returnerar text/event-stream-händelser med tokeninnehåll:
curl -N -X POST http://localhost:8088/invocations \
-H "Content-Type: application/json" \
-d '{"message":"Count to 5.","stream":true}'
Strömmen innehåller tokenhändelser följt av en terminalhändelse done :
data: {"token": "..."}
event: done
data: {}
Anpassa begärandeschemat
Anpassa begärandetexten genom att underklassa InvocationsHostServer och åsidosätta parse_request. Du kan också åsidosätta build_input för att mappa tolkade data till ett anpassat diagramtillstånd.
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()
Vad det här kodfragmentet gör: Accepterar en anpassad biljettnyttolast och konverterar den till ett meddelande för en enskild användare innan värden anropar diagrammet. För mer komplexa graftillstånd, åsidosätt build_input i stället för att förenkla begäran till text.
Rulla ut
Du kan distribuera med hjälp av Azure Developer CLI eller Foundry Toolkit Visual Studio Code-tillägget. CLI-flödet Azure Developer använder exempelfiler azure.yaml och Docker. Tilläggsflödet ger en guidad distributionsupplevelse i Visual Studio Code.
Distribution av värdbaserad agent kräver rollen Foundry Project Manager i projektet. Mer information finns i Distribuera en värdbaserad agent.
Distribuera med Azure Developer CLI
Källlagringsplatsen langchain-azure-ai innehåller värdbaserade agentexempel som du kan köra och distribuera med hjälp av Azure Developer CLI. Flödet använder varje provs azure.yaml, Dockerfile och main.py. Mer information om konfigurationen för värdbaserad agent i azure.yaml finns i Skapa azure.yaml för värdbaserade agenter.
Installera AI-agenttillägget och logga in innan du initierar ett exempel:
azd ext install azure.ai.agents
azd auth login
Docker måste köras lokalt eftersom azd ai agent run skapar containeravbildningen som deklarerats i exemplets Dockerfile. Mer information om kommandon finns i cli-referensen Azure Developer.
Initiera med hjälp av ett exempel på azure.yaml
Skapa en ny mapp och initiera den från ett exempel azure.yaml.
azure.yaml Ersätt URL:en med det exempel som du vill använda.
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
Följ anvisningarna från azd ai agent init. Om du inte redan har ett Foundry-projekt och en modelldistribution kan initieringsflödet vägleda dig genom att skapa dem.
Kör containern lokalt
Kör värden för agenten lokalt via azd:
azd ai agent run
Värden fungerar på http://127.0.0.1:8088. Anropa den lokala protokollslutpunkten direkt i en annan terminal:
curl -X POST http://127.0.0.1:8088/responses \
-H "Content-Type: application/json" \
-d '{"input": "Hello!"}'
PowerShell-motsvarighet:
(Invoke-WebRequest -Uri http://127.0.0.1:8088/responses `
-Method POST -ContentType 'application/json' `
-Body '{"input": "Hello!"}').Content
Du kan också anropa den lokala agenten via azd:
azd ai agent invoke --local "Hello!"
Distribuera till Foundry
Om det initierade projektet använder ett nytt Foundry-projekt och en ny modelldistribution etablerar du först Azure-resurserna:
azd provision
Distribuera agenten:
azd deploy
Distributionen paketerar agenten i en containeravbildning, push-överför den till det etablerade containerregistret och distribuerar den till Foundry Hosted Agent Runtime.
Foundrys värdinfrastruktur injicerar miljövariabler för körningsmiljön i agenten, inklusive:
-
FOUNDRY_PROJECT_ENDPOINT: Slutpunkts-URL:en för Foundry-projektet där agenten distribueras. -
FOUNDRY_MODEL_NAME: Namnet på modelldistributionen som valdes underazd ai agent init. -
APPLICATIONINSIGHTS_CONNECTION_STRING: Connection string för projektets Application Insights-instans.
Fullständiga distributionsbegrepp, behörigheter och hanteringsinformation finns i Distribuera en värdbaserad agent och Hantera värdbaserad agentlivscykel.
Distribuera med Foundry Toolkit Visual Studio Code-tillägget
Information om tilläggsbaserad distribution finns i Snabbstart: Distribuera din första värdbaserade agent.
Vara värd för en befintlig agent
Om ditt program redan fungerar med LangSmith eller LangGraph CLI använder du modulen langchain_azure_ai.agents.hosting.run för att sömlöst vara värd för agenten på Foundry utan att ändra dess kod eller konfiguration.
Starta en Responses-värdtjänst i projektroten:
python -m langchain_azure_ai.agents.hosting.run --protocol responses
Om du vill exponera samma graf via anropsprotokollet anger du --protocol till invocations. Om langgraph.json definierar flera grafer skickar du grafnamnet som det första argumentet. Använd --config <path> om konfigurationsfilen inte finns på standardsökvägen langgraph.json . Ett exempel:
python -m langchain_azure_ai.agents.hosting.run agent --protocol invocations
Använd samma modulkommando som containerns startpunkt när du distribuerar det befintliga programmet till Foundry.
Konfigurera till exempel kommandot i azure.yaml.
Den viktigaste inställningen är startpunkten.
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
Använd den här checklistan för att diagnostisera vanliga problem när du utvecklar värdbaserade agenter med langchain_azure_ai.agents.hosting.
Verifieringen av diagramschemat misslyckas
Standardvärdarna förväntar sig en kompilerad LangGraph-graf vars tillstånd har ett messages fält, till exempel MessagesState. Om diagrammet använder ett anpassat tillståndsschema underklassar du värden och åsidosätter build_input. För Responses, åsidosätt handle_create när du behöver fullständig kontroll över parsning av förfrågningar, exekvering av grafen och genererade Responses-händelser.
Konversationstillståndet fortsätter inte
För Responses-protokollet ska du skicka med previous_response_id eller ett conversation-ID i senare omgångar. Om din graf använder en kontrollpunktshanterare ska du se till att kontrollpunktshanteraren är korrekt konfigurerad och beständig för miljön där agenten körs.
För protokollet Anrop lagrar plattformen inte konversationshistorik.
Använd en agent_session_id frågeparameter för att styra senare anrop till samma hostade sandbox-miljö och använd din egen tillståndslagring eller LangGraph checkpointer för konversationens tillstånd.
Det går inte att nå modellen i den värdbaserade containern
Bekräfta att den värdbaserade agentversionen innehåller FOUNDRY_MODEL_NAMEoch att agentidentiteten har behörighet att anropa Foundry-projektet. Plattformen anger FOUNDRY_PROJECT_ENDPOINT; din kod ska läsa den variabeln när den körs i Foundry.