![]()
Tässä oppitunnissa käsitellään:
Oppitunnin suorittamisen jälkeen osaat:
Microsoft Agent Framework (MAF) -koodiesimerkkejä löytyy tästä arkistosta tiedostojen xx-python-agent-framework ja xx-dotnet-agent-framework alta.

Microsoft Agent Framework (MAF) on Microsoftin yhtenäinen kehys tekoälyagenttien rakentamiseen. Se tarjoaa joustavuutta käsitellä laajaa kirjoa agenteille tyypillisiä käyttötapauksia niin tuotanto- kuin tutkimusympäristöissä, mukaan lukien:
Tuotannossa toteutettavien tekoälyagenttien ansioksi MAF sisältää myös ominaisuuksia kuten:
Microsoft Agent Framework keskittyy myös yhteentoimivuuteen esimerkiksi:
Tarkastellaanpa, miten näitä ominaisuuksia sovelletaan Microsoft Agent Frameworkin keskeisiin käsitteisiin.

Agenttien luominen
Agentin luominen tehdään määrittelemällä päättelypalvelu (LLM-toimittaja), joukko ohjeita tekoälyagentille noudatettavaksi ja nimetty name:
agent = AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent( instructions="You are good at recommending trips to customers based on their preferences.", name="TripRecommender" )
Yllä käytetään Azure OpenAI-palvelua, mutta agentteja voi luoda monilla eri palveluilla, mukaan lukien Microsoft Foundry Agent Service:
AzureAIAgentClient(async_credential=credential).create_agent( name="HelperAgent", instructions="You are a helpful assistant." ) as agent
OpenAI:n Responses, ChatCompletion -rajapinnat
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.", )
tai MiniMax, joka tarjoaa OpenAI-yhteensopivan API:n suurilla konteksti-ikkunoilla (jopa 204 000 tokenia):
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.", )
tai etäagentit A2A-protokollaa käyttäen:
agent = A2AAgent( name=agent_card.name, description=agent_card.description, agent_card=agent_card, url="https://your-a2a-agent-host" )
Agenttien suorittaminen
Agentteja ajetaan .run tai .run_stream -menetelmillä, joko ei-suoratoistona tai suoratoistona vastauksia varten.
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)
Jokaisessa agentin suorituksessa voi olla myös asetuksia parametrien, kuten agentin käyttämien max_tokens-, agentin kutsumien tools-työkalujen ja jopa käytetyn model-mallin mukauttamiseksi.
Tämä on hyödyllistä tapauksissa, joissa tehtävän suorittamiseen tarvitaan tiettyjä malleja tai työkaluja.
Työkalut
Työkaluja voidaan määritellä sekä agenttia luotaessa:
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."
# Kun luodaan ChatAgent suoraan
agent = ChatAgent( chat_client=OpenAIChatClient(), instructions="You are a helpful assistant", tools=[get_attractions]
että agenttia ajettaessa:
result1 = await agent.run( "What's the best place to visit in Seattle?", tools=[get_attractions] # Työkalu, joka on saatavilla vain tätä ajoa varten )
Agenttilangat
Agenttilankoja käytetään monisäikeisten keskustelujen käsittelemiseen. Langat voidaan luoda joko:
get_new_thread(), jolloin lanka voidaan tallentaa ajan myötäLangat luodaan seuraavasti:
# Luo uusi säie.
thread = agent.get_new_thread() # Suorita agentti säikeen kanssa.
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)
Langat voi sitten sarjoittaa tallennettavaksi myöhempää käyttöä varten:
# Luo uusi säie.
thread = agent.get_new_thread()
# Suorita agentti säikeellä.
response = await agent.run("Hello, how are you?", thread=thread)
# Sarjoita säie tallennusta varten.
serialized_thread = await thread.serialize()
# Purka säikeen tila lataamisen jälkeen tallennuksesta.
resumed_thread = await agent.deserialize_thread(serialized_thread)
Agentin middleware
Agentit kommunikoivat työkalujen ja LLM:ien kanssa suorittaakseen käyttäjän tehtävät. Joissain tilanteissa haluamme suorittaa tai seurata tapahtumia näiden välissä. Agentin middleware mahdollistaa tämän esimerkiksi:
Toimintomiddleware
Tämä middleware mahdollistaa toiminnon suorittamisen agentin ja kutsuttavan funktion/työkalun välillä. Esimerkki käytöstä on lokituksen tekeminen funktiokutsun yhteydessä.
Alla olevassa koodissa next määrittelee, kutsutaanko seuraava middleware vai varsinainen funktio.
async def logging_function_middleware(
context: FunctionInvocationContext,
next: Callable[[FunctionInvocationContext], Awaitable[None]],
) -> None:
"""Function middleware that logs function execution."""
# Esikäsittely: Kirjaa lokiin ennen funktion suorittamista
print(f"[Function] Calling {context.function.name}")
# Jatka seuraavaan middlewareen tai funktion suorittamiseen
await next(context)
# Jälkikäsittely: Kirjaa lokiin funktion suorittamisen jälkeen
print(f"[Function] {context.function.name} completed")
Keskustelumiddleware
Tämä middleware mahdollistaa toiminnon suorittamisen tai lokituksen agentin ja LLM:lle lähetettyjen pyyntöjen välillä.
Se sisältää tärkeitä tietoja, kuten AI-palvelulle lähetetyt messages.
async def logging_chat_middleware(
context: ChatContext,
next: Callable[[ChatContext], Awaitable[None]],
) -> None:
"""Chat middleware that logs AI interactions."""
# Ennakkokäsittely: Kirjaa lokiin ennen tekoälykutsua
print(f"[Chat] Sending {len(context.messages)} messages to AI")
# Jatka seuraavaan väliohjelmistoon tai tekoälypalveluun
await next(context)
# Jälkikäsittely: Kirjaa lokiin tekoälyvastauksen jälkeen
print("[Chat] AI response received")
Agentin muisti
Kuten Agentic Memory -oppitunnissa käsiteltiin, muisti on olennainen osa agentin toimintaa eri kontekstien välillä. MAF tarjoaa useita eri muistin tyyppejä:
Muisti sovelluksen ajon aikana
Tämä on muisti, joka tallennetaan langoissa sovelluksen ajon aikana.
# Luo uusi säie.
thread = agent.get_new_thread() # Suorita agentti säikeen kanssa.
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)
Pysyvät viestit
Tätä muistia käytetään keskusteluhistorian tallentamiseen eri sessioiden välillä. Se määritellään chat_message_store_factory:lla:
from agent_framework import ChatMessageStore
# Luo mukautettu viestivarasto
def create_message_store():
return ChatMessageStore()
agent = ChatAgent(
chat_client=OpenAIChatClient(),
instructions="You are a Travel assistant.",
chat_message_store_factory=create_message_store
)
Dynaaminen muisti
Tämä muisti lisätään kontekstiin ennen agenttien suorittamista. Näitä muistoja voidaan tallentaa ulkoisiin palveluihin, kuten mem0:
from agent_framework.mem0 import Mem0Provider
# Mem0:n käyttäminen edistyneisiin muistitoimintoihin
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
)
Agentin havaittavuus
Havaittavuus on tärkeää luotettavien ja ylläpidettävien agenttipohjaisten järjestelmien rakentamisessa. MAF integroituu OpenTelemetryyn tarjotakseen jäljitystä ja mittareita paremman havaittavuuden saavuttamiseksi.
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 jotain
pass
counter = meter.create_counter("my_custom_counter")
counter.add(1, {"key": "value"})
MAF tarjoaa työnkulkuja, jotka ovat ennalta määriteltyjä vaiheita tehtävän suorittamiseksi ja sisältävät tekoälyagentteja osina näitä vaiheita.
Työnkulut koostuvat eri komponenteista, jotka mahdollistavat paremman ohjausvirtauksen. Työnkulut mahdollistavat myös moni-agenttien orkestroinnin ja tarkistuspisteiden käytön, joiden avulla työnkulun tilat voidaan tallentaa.
Työnkulun peruskomponentit ovat:
Suorittajat
Suorittajat vastaanottavat syöteviestejä, suorittavat niille määritellyt tehtävät ja tuottavat sitten tulosviestin. Tämä vie työnkulkua eteenpäin kohti suuremman tehtävän valmistumista. Suorittajat voivat olla joko tekoälyagentteja tai mukautettua logiikkaa.
Kärjet
Kärkiä käytetään viestien virran määrittämiseen työnkulussa. Ne voivat olla:
Suoria kärkiä – Yksinkertaisia yhden ja yhden välistä yhteyksiä suorittajien välillä:
from agent_framework import WorkflowBuilder
builder = WorkflowBuilder()
builder.add_edge(source_executor, target_executor)
builder.set_start_executor(source_executor)
workflow = builder.build()
Ehtokärkiä – Aktivoituvat, kun tietty ehto täyttyy. Esimerkiksi, kun hotellihuoneita ei ole saatavilla, suorittaja voi ehdottaa muita vaihtoehtoja.
Kytkin-tilakärkiä – Reitittää viestejä eri suorittajille määriteltyjen ehtojen perusteella. Esimerkiksi, jos matkustajalla on prioriteettikäyttöoikeus, hänen tehtävänsä käsitellään toisessa työnkulussa.
Fan-out kärkiä – Lähettää yhden viestin useille kohteille.
Fan-in kärkiä – Kerää useita viestejä eri suorittajilta ja lähettää ne yhdelle kohteelle.
Tapahtumat
Tarjotakseen paremman havaittavuuden työnkuluihin, MAF tarjoaa sisäänrakennettuja suoritus tapahtumia, mukaan lukien:
WorkflowStartedEvent - Työnkulun suoritus alkaaWorkflowOutputEvent - Työnkulku tuottaa tuloksenWorkflowErrorEvent - Työnkulku kohtaa virheenExecutorInvokeEvent - Suorittaja aloittaa käsittelynExecutorCompleteEvent - Suorittaja päättää käsittelynRequestInfoEvent - Pyyntö tehdäänEdellä olevat osiot käsittelevät Microsoft Agent Frameworkin keskeisiä käsitteitä. Kun rakennat monimutkaisempia agentteja, tässä on joitakin kehittyneitä malleja harkittavaksi:
Microsoft Agent Framework on kehys-yhteensopiva — et ole rajoitettu käyttämään vain MAF:lla kirjoitettuja agentteja. Jos sinulla on jo agentti rakennettu LangChainilla tai LangGraphilla, voit käyttää sitä Microsoft Foundryn isännöimänä agenttina, jolloin Foundry hallinnoi ajonaikaa, istuntoja, skaalausta, identiteettiä ja protokollapisteitä puolestasi, kun taas agenttilogiikka pysyy LangGraphissa.
Tämä tehdään langchain_azure_ai.agents.hosting -paketilla, joka tarjoaa käännetyn LangGraph-kaavion samoilla protokollilla, joita Foundryn isännöimät agentit käyttävät.
1. Asenna hosting-lisäosa:
pip install -U "langchain-azure-ai[hosting]>=1.2.4" azure-identity
hosting-lisäosa asentaa Foundryn protokollakirjastot: azure-ai-agentserver-responses (OpenAI-yhteensopiva /responses-päätepiste) ja azure-ai-agentserver-invocations (geneerinen /invocations-päätepiste).
2. Valitse hosting-protokolla:
| Protokolla | Isäntäluokka | Päätepiste | Käytä, kun |
|---|---|---|---|
| Responses | ResponsesHostServer |
/responses |
Haluat OpenAI-yhteensopivan chatin, suoratoiston, vastaushistorian ja keskusteluketjutuksen — suositeltu oletus keskusteluagentteja varten. |
| Invocations | InvocationsHostServer |
/invocations |
Tarvitset mukautetun JSON-muodon, webhook-tyyppisen päätepisteen tai ei-keskustelevaa käsittelyä. |
Koska Responses API on ensisijainen API Foundryn agenttityyppiseen kehittämiseen, aloita useimmille agenteille ResponsesHostServer-luokalla.
3. Määritä ympäristömuuttujat (az login ensin, jotta DefaultAzureCredential voi kirjautua sisään):
export FOUNDRY_PROJECT_ENDPOINT="https://<resource>.services.ai.azure.com/api/projects/<project>"
export FOUNDRY_MODEL_NAME="gpt-5-mini"
Kun agentti myöhemmin suoritetaan isännöitynä agenttina Foundryssa, alusta lisää FOUNDRY_PROJECT_ENDPOINT automaattisesti.
4. Paljasta LangGraph-agentti Responses-protokollan kautta:
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-5-mini")
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 tässä kohdistuu Foundryn projektin OpenAI-yhteensopivaan (Responses) päätepisteeseen.
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()
Suorita paikallisesti komennolla python main.py, sitten lähetä Responses-pyyntö osoitteeseen http://localhost:8088/responses.
Keskeiset käyttäytymistavat:
previous_response_id tai conversation-tunnuksen. Jos kaaviosi on käännetty LangGraphin tarkistuspisteellä, Foundry yhdistää keskustelun tilan tarkistuspisteeseen (käytä tuotannossa kestävää tarkistuspistettä; MemorySaver sopii paikalliseen testaukseen).interrupt()-toimintoa, ResponsesHostServer näyttää odottavan keskeytyksen Responsesin function_call / mcp_approval_request -kohteena, ja asiakkaat jatkavat vastaavalla function_call_output / mcp_approval_response -vastauksella.azd ext install azure.ai.agents, azd ai agent init -m <manifest>, azd ai agent run (paikallinen, vaatii Dockerin), sitten azd provision ja azd deploy. Isännöidyn agentin käyttöönotto vaatii Foundry Project Manager -roolin.Tämän esimerkin ajo kelpoinen versio löytyy tiedostosta code-samples/14-langchain-hosted-agent.py. Täydellisen läpikäynnin (Invocations-protokolla, mukautetut pyyntömalleja ja vianetsintä) löydät sivulta Host LangGraph agents as Foundry hosted agents.
Microsoft Agent Frameworkin koodiesimerkkejä löytyy tästä arkistosta xx-python-agent-framework- ja xx-dotnet-agent-framework-tiedostoista.
Liity Microsoft Foundryn Discordiin tavata muita oppijoita, osallistua toimistoaikoihin ja saada vastauksia AI Agents -kysymyksiisi.
Tietokoneen käyttösovellusten (CUA) rakentaminen
Vastuuvapauslauseke: Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, otathan huomioon, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäiskielellä on virallinen lähde. Tärkeissä asioissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinymmärryksistä tai tulkinnoista.