![]()
See õppetund käsitleb:
Pärast selle õppetunni läbimist oskad:
Koodinäited Microsoft Agent Frameworki (MAF) kohta leiad sellest hoidlast failide xx-python-agent-framework ja xx-dotnet-agent-framework alt.

Microsoft Agent Framework (MAF) on Microsofti ühtne raamistik tehisintellekti agentide ehitamiseks. See pakub paindlikkust erinevate agentuursete kasutusjuhtumite lahendamiseks nii tootmiskeskkonnas kui ka uurimistöös, sealhulgas:
Tootmiskeskkonna AI agentide tarnimiseks sisaldab MAF lisaks järgmisi funktsioone:
Microsoft Agent Framework keskendub ka ühilduvusele, võimaldades:
Vaatame, kuidas neid funktsioone rakendatakse Microsoft Agent Frameworki mõningates põhikontseptsioonides.

Agentide loomine
Agendi loomine toimub defineerides järeldamisteenus (LLM pakkuja), komplekt juhiseid AI agendile järgimiseks ja määrates name:
agent = AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent( instructions="You are good at recommending trips to customers based on their preferences.", name="TripRecommender" )
Ülaltoodud näide kasutab Azure OpenAI, kuid agente saab luua mitmete teenuste abil, sh Microsoft Foundry Agent Service:
AzureAIAgentClient(async_credential=credential).create_agent( name="HelperAgent", instructions="You are a helpful assistant." ) as agent
OpenAI Responses, ChatCompletion API-d
agent = OpenAIResponsesClient().create_agent( name="WeatherBot", instructions="You are a helpful weather assistant.", )
agent = OpenAIChatClient().create_agent( name="HelpfulAssistant", instructions="You are a helpful assistant.", )
või MiniMax, mis pakub OpenAI-ga ühilduvat API-t suurte kontekstivõimalustega (kuni 204K tokenit):
agent = OpenAIChatClient(base_url="https://api.minimax.io/v1", api_key=os.environ["MINIMAX_API_KEY"], model_id="MiniMax-M3").create_agent( name="HelpfulAssistant", instructions="You are a helpful assistant.", )
või kaugagendid kasutades A2A protokolli:
agent = A2AAgent( name=agent_card.name, description=agent_card.description, agent_card=agent_card, url="https://your-a2a-agent-host" )
Agentide käivitamine
Agente käitatakse .run või .run_stream meetoditega, vastavalt mittestriimiliste või voopõhiste vastuste puhul.
result = await agent.run("What are good places to visit in Amsterdam?")
print(result.text)
async for update in agent.run_stream("What are the good places to visit in Amsterdam?"):
if update.text:
print(update.text, end="", flush=True)
Iga agendi käivitamisel võib olla ka võimalusi kohandada parameetreid nagu agendi poolt kasutatavad max_tokens, agendi poolt kutsutavad tools ja isegi agendi jaoks kasutatav model.
See on kasulik juhtudel, kus konkreetseid mudeleid või tööriistu on vaja kasutaja ülesande täitmiseks.
Tööriistad
Tööriistu saab määratleda nii agendi loomisel:
def get_attractions( location: Annotated[str, Field(description="The location to get the top tourist attractions for")], ) -> str: """Get the top tourist attractions for a given location.""" return f"The top attractions for {location} are."
# ChatAgendi otsese loomise korral
agent = ChatAgent( chat_client=OpenAIChatClient(), instructions="You are a helpful assistant", tools=[get_attractions]
kui ka agendi käivitamisel:
result1 = await agent.run( "What's the best place to visit in Seattle?", tools=[get_attractions] # Tööriist, mis on mõeldud ainult selle käivituse jaoks )
Agentide lõimed
Agentide lõimedega hallatakse mitme vooruga vestlusi. Lõime saab luua kas:
get_new_thread() abil, mis võimaldab lõime salvestada aja jooksulLõime loomiseks näeb kood välja selline:
# Loo uus niit.
thread = agent.get_new_thread() # Käivita agent niidiga.
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)
Lõime võib seejärel serialiseerida hilisemaks salvestamiseks:
# Loo uus niit.
thread = agent.get_new_thread()
# Käivita agent koos niidiga.
response = await agent.run("Hello, how are you?", thread=thread)
# Sereali keera niit salvestamiseks.
serialized_thread = await thread.serialize()
# Desereali keera niidi olek pärast laadimist salvestusest.
resumed_thread = await agent.deserialize_thread(serialized_thread)
Agendi vahevara
Agendid suhtlevad tööriistade ja LLM-idega kasutaja ülesannete täitmiseks. Teatud olukordades soovime nende suhtluste vahepeal käivitada või jälgida tegevusi. Agendi vahevara võimaldab seda teha läbi:
Funktsioonide vahevara
See vahevara võimaldab käivitada tegevuse agendi ja funktsiooni/tööriista vahel, mida see kutsub. Näiteks võib see olla kasulik funktsiooni kõnede logimiseks.
Järgnev koodis määrab next, kas kutsutakse järgmine vahevara või tegelik funktsioon.
async def logging_function_middleware(
context: FunctionInvocationContext,
next: Callable[[FunctionInvocationContext], Awaitable[None]],
) -> None:
"""Function middleware that logs function execution."""
# Eeltöötlus: Logi enne funktsiooni täitmist
print(f"[Function] Calling {context.function.name}")
# Jätka järgmise vahenduse või funktsiooni täitmisega
await next(context)
# Järelprotsess: Logi pärast funktsiooni täitmist
print(f"[Function] {context.function.name} completed")
Vestluse vahevara
See vahevara võimaldab käivitada või logida tegevust agendi ja LLM vahelistes taotlustes.
See sisaldab olulist infot, nagu AI teenusele saadetavad sõnumid.
async def logging_chat_middleware(
context: ChatContext,
next: Callable[[ChatContext], Awaitable[None]],
) -> None:
"""Chat middleware that logs AI interactions."""
# Eeltöötlus: Logi enne tehisintellekti kutset
print(f"[Chat] Sending {len(context.messages)} messages to AI")
# Jätka järgmise vahendustarkvara või tehisintellekti teenusega
await next(context)
# Järeltoiming: Logi pärast tehisintellekti vastust
print("[Chat] AI response received")
Agendi mälu
Nagu on käsitletud õppetunnis Agentic Memory, on mälu oluline komponent, mis võimaldab agendil töötada erinevates kontekstides. MAF pakub mitut erinevat mälutüüpi:
Mälu rakenduse sees
See on mälu, mis salvestatakse lõimedes rakenduse tööajal.
# Loo uus lõim.
thread = agent.get_new_thread() # Käivita agent koos lõimega.
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)
Püsivad sõnumid
Seda mälu kasutatakse vestluste ajaloo salvestamiseks erinevate sessioonide vahel. See on määratletud kasutades chat_message_store_factory:
from agent_framework import ChatMessageStore
# Loo kohandatud sõnumite salvestus
def create_message_store():
return ChatMessageStore()
agent = ChatAgent(
chat_client=OpenAIChatClient(),
instructions="You are a Travel assistant.",
chat_message_store_factory=create_message_store
)
Dünaamiline mälu
Seda mälu lisatakse konteksti enne agendi käivitamist. Seda võib hoida väliste teenuste nagu mem0 abil:
from agent_framework.mem0 import Mem0Provider
# Kasutades Mem0 täiustatud mäluvõimaluste jaoks
memory_provider = Mem0Provider(
api_key="your-mem0-api-key",
user_id="user_123",
application_id="my_app"
)
agent = ChatAgent(
chat_client=OpenAIChatClient(),
instructions="You are a helpful assistant with memory.",
context_providers=memory_provider
)
Agendi jälgitavus
Jälgitavus on oluline usaldusväärsete ja hooldatavate agentuuri süsteemide loomiseks. MAF integreerub OpenTelemetryga, pakkudes jälgimist ja mõõdikuid parema jälgitavuse jaoks.
from agent_framework.observability import get_tracer, get_meter
tracer = get_tracer()
meter = get_meter()
with tracer.start_as_current_span("my_custom_span"):
# tee midagi
pass
counter = meter.create_counter("my_custom_counter")
counter.add(1, {"key": "value"})
MAF pakub töövooge, mis on eelmääratletud sammud ülesande täitmiseks, kaasates AI agente nende sammude komponentidena.
Töövood koosnevad erinevatest komponentidest, mis võimaldavad paremat voolu juhtimist. Töövood võimaldavad ka mitme agendi orkestreerimist ja läbipääsupunktide loomist töövoogude olekute salvestamiseks.
Töövoo põhikomponendid on:
Täideviijad
Täideviijad saavad sisendsõnumeid, täidavad neile määratud ülesandeid ja toodavad väljundisõnumeid. See viib töövoo edasi suurema ülesande täitmise suunas. Täideviijad võivad olla kas AI agent või kohandatud loogika.
Servad
Servasid kasutatakse sõnumite voo määratlemiseks töövoos. Need võivad olla:
Otseühendused - Lihtsad ühelt täideviijalt teisele ühendused:
from agent_framework import WorkflowBuilder
builder = WorkflowBuilder()
builder.add_edge(source_executor, target_executor)
builder.set_start_executor(source_executor)
workflow = builder.build()
Tingimuslikud ühendused - Aktiveeritakse, kui teatud tingimus on täidetud. Näiteks kui hotellitoad ei ole saadaval, saab täideviija soovitada muid võimalusi.
Lüliti-juhtumi ühendused - Suunavad sõnumeid erinevatele täideviijatele vastavalt määratletud tingimustele. Näiteks kui reisiklient on prioriteediga, käsitletakse tema ülesanded teise töövoo kaudu.
Hulgisaadetised - Saadab ühe sõnumi mitmele sihtmärgile.
Hulgakogumised - Kogub mitme täideviija sõnumeid ja saadab ühe sihtmärgi juurde.
Sündmused
Paremaks jälgitavuseks töövoogudel pakub MAF sisseehitatud sündmusi täitmise jaoks, sealhulgas:
WorkflowStartedEvent - töövoo täitmine algabWorkflowOutputEvent - töövoog genereerib väljundiWorkflowErrorEvent - töövoos tekib tõrgeExecutorInvokeEvent - täideviija alustab töötlemistExecutorCompleteEvent - täideviija lõpetab töötlemiseRequestInfoEvent - taotlus esitatakseÜlaltoodud osad käsitlevad Microsoft Agent Frameworki põhikontseptsioone. Kui ehitad keerukamaid agente, siis siin on mõned täiustatud mustrid, mida kaaluda:
Microsoft Agent Framework on raamistikuülene — sa ei ole piiratud ainult MAFis kirjutatud agentidega. Kui sul on juba agent ehitatud LangChaini või LangGraphiga, saad seda käitada kui Microsoft Foundry majutatud agenti, kus Foundry haldab jooksutamist, sessioone, skaleerimist, identiteeti ja protokolli lõpp-punkte, samal ajal kui sinu agendi loogika jääb LangGraphi.
Seda tehakse paketiga langchain_azure_ai.agents.hosting, mis eksponeerib koos kompileeritud LangGraph graafiku samadel protokollidel, mida Foundry majutatud agendid kasutavad.
1. Paigalda hosting lisa:
pip install -U "langchain-azure-ai[hosting]>=1.2.4" azure-identity
hosting lisa paigaldab Foundry protokolliteegid: azure-ai-agentserver-responses (OpenAI-yhildub /responses lõpp-punkt) ja azure-ai-agentserver-invocations (üldine /invocations lõpp-punkt).
2. Vali majutamisprotokoll:
| Protokoll | Host klass | Lõpp-punkt | Kasuta kui |
|---|---|---|---|
| Responses | ResponsesHostServer |
/responses |
Soovid OpenAI-yhildavat vestlust, striimimist, vastuste ajalugu ja vestluse lõimimist — see on soovitatud vaikimisi mitmepoolses vestluses. |
| Invocations | InvocationsHostServer |
/invocations |
Vajad kohandatud JSON-kuju, webhook-tüüpi lõpp-punkti või mittevestlusvoogudega töötlemist. |
Kuna Responses API on Foundry peamine agentuuri-arenduse API, alusta enamike agentide puhul ResponsesHostServer-iga.
3. Konfigureeri keskkonnamuutujad (az login esmalt, et DefaultAzureCredential saaks autentida):
export FOUNDRY_PROJECT_ENDPOINT="https://<resource>.services.ai.azure.com/api/projects/<project>"
export FOUNDRY_MODEL_NAME="gpt-4.1"
Kui agent hiljem käib Foundry majutatud agendina, süstib platvorm automaatselt FOUNDRY_PROJECT_ENDPOINT.
4. Eksponeeri LangGraph agent Responses protokolli kaudu:
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)
# ChatOpenAI sihib siin Foundry projekti OpenAI-ga ühilduvale (Responses) lõpp-punktile.
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()
Käivita lokaalselt käsuga python main.py, seejärel saada Responses taotlus aadressile http://localhost:8088/responses.
Peamised omadused:
previous_response_id või conversation ID. Kui su graafik on kompileeritud LangGraphi läbipääsupunktiga, võtab Foundry vestluse oleku salvestamiseks läbipääsupunkti võtme (kasuta tootmises vastupidavat läbipääsupunkti; MemorySaver sobib lokaalseks testimiseks).interrupt(), kuvab ResponsesHostServer ootel katkestuse Responsei function_call / mcp_approval_request kirjena ja kliendid jätkavad sobiva function_call_output / mcp_approval_response vastusega.azd ext install azure.ai.agents, azd ai agent init -m <manifest>, azd ai agent run (lokaalne, nõuab Dockerit), siis azd provision ja azd deploy. Majutatud agendi kasutuselevõtt nõuab Foundry projektihalduri rolli.Jooksev näidis sellest asub failis code-samples/14-langchain-hosted-agent.py. Täieliku läbivaatuse jaoks (Invocations protokoll, kohandatud päringu skeemid ja veaotsing) vaata Host LangGraph agents as Foundry hosted agents.
Microsoft Agent Frameworki koodinäited leiad sellest hoidlast failide xx-python-agent-framework ja xx-dotnet-agent-framework alt.
Liitu Microsoft Foundry Discordiga, et kohtuda teiste õppijatega, osaleda vastuvõtutundides ja saada oma AI agentide küsimustele vastused.
Arvuti kasutamise agentide loomine (CUA)
Lahtiütlus: See dokument on tõlgitud kasutades AI tõlketeenust Co-op Translator. Kuigi me püüdleme täpsuse poole, palun pange tähele, et automatiseeritud tõlgetes võib esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlkega seotud eksimustest või valesti mõistmistest.