![]()
Ta lekcija bo zajemala:
Po zaključenem tečaju boste znali:
Primeri kode za Microsoft Agent Framework (MAF) lahko najdete v tem repozitoriju pod datotekami xx-python-agent-framework in xx-dotnet-agent-framework.

Microsoft Agent Framework (MAF) je Microsoftov enotni okvir za gradnjo AI agentov. Ponuja prilagodljivost za različne agentske primere uporabe, ki jih opazimo tako v produkciji kot v raziskovalnih okoljih, vključno z:
Za zagotavljanje AI agentov v produkciji MAF vključuje tudi funkcije za:
Microsoft Agent Framework se osredotoča tudi na interoperabilnost z:
Poglejmo, kako so te funkcije uporabljene v nekaterih osnovnih konceptih Microsoft Agent Framework.

Ustvarjanje agentov
Ustvarjanje agenta poteka z definiranjem inferenčne storitve (LLM ponudnik), nabora navodil, ki jih mora AI agent slediti, in dodeljenim imenom:
agent = AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent( instructions="You are good at recommending trips to customers based on their preferences.", name="TripRecommender" )
Gornji primer uporablja Azure OpenAI, a agente lahko ustvarite z različnimi storitvami, vključno z Microsoft Foundry Agent Service:
AzureAIAgentClient(async_credential=credential).create_agent( name="HelperAgent", instructions="You are a helpful assistant." ) as agent
OpenAI Responses, ChatCompletion API-ji
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.", )
ali oddaljenimi agenti preko protokola A2A:
agent = A2AAgent( name=agent_card.name, description=agent_card.description, agent_card=agent_card, url="https://your-a2a-agent-host" )
Zagon agentov
Agent se zažene z metodama .run ali .run_stream za nereferenčne ali pretočne odgovore.
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)
Vsak zagon agenta ima lahko tudi možnosti za prilagajanje parametrov, kot so max_tokens, ki jih agent uporablja, orodja, ki jih agent lahko kliče, in celo sam model, ki ga agent uporablja.
To je uporabno v primerih, kjer so za dokončanje uporabnikove naloge potrebni določeni modeli ali orodja.
Orodja
Orodja lahko določite tako ob definiranju agenta:
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."
# Ko neposredno ustvarjate ChatAgent
agent = ChatAgent( chat_client=OpenAIChatClient(), instructions="You are a helpful assistant", tools=[get_attractions]
kot tudi ob zagonu agenta:
result1 = await agent.run( "What's the best place to visit in Seattle?", tools=[get_attractions] # Orodje na voljo samo za to izvajanje )
Niti agentov
Niti agentov se uporabljajo za večkratna pogovorna kroženja. Niti se lahko ustvarijo na dva načina:
get_new_thread(), ki omogoča, da se nit shrani skozi časZa ustvarjanje niti koda izgleda takole:
# Ustvari novo nit.
thread = agent.get_new_thread() # Zaženi agenta z nitjo.
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)
Nit lahko nato serializirate za kasnejšo uporabo:
# Ustvari novo nit.
thread = agent.get_new_thread()
# Zaženi agenta z nitjo.
response = await agent.run("Hello, how are you?", thread=thread)
# Serijaliziraj nit za shranjevanje.
serialized_thread = await thread.serialize()
# Deserijaliziraj stanje niti po nalaganju iz shrambe.
resumed_thread = await agent.deserialize_thread(serialized_thread)
Agent Middleware
Agenti sodelujejo z orodji in LLM-ji za dokončanje uporabnikovih nalog. V določenih scenarijih želimo izvesti ali spremljati interakcije med njimi. Agent middleware nam to omogoča preko:
Funkcijski Middleware
Ta middleware omogoča izvajanje dejanja med agentom in funkcijo/orodjem, ki ga kliče. Primer uporabe je beleženje klica funkcije.
V spodnji kodi next določa, ali naj se pokliče naslednji middleware ali funkcija sama.
async def logging_function_middleware(
context: FunctionInvocationContext,
next: Callable[[FunctionInvocationContext], Awaitable[None]],
) -> None:
"""Function middleware that logs function execution."""
# Predobdelava: Zabeleži pred izvedbo funkcije
print(f"[Function] Calling {context.function.name}")
# Nadaljuj do naslednjega vmesnega sloja ali izvedbe funkcije
await next(context)
# Poobdelava: Zabeleži po izvedbi funkcije
print(f"[Function] {context.function.name} completed")
Chat Middleware
Ta middleware omogoča izvajanje ali beleženje dejanja med agentom in zahtevami med LLM-jem.
Vsebuje pomembne informacije, kot so sporočila, ki se pošiljajo AI storitvi.
async def logging_chat_middleware(
context: ChatContext,
next: Callable[[ChatContext], Awaitable[None]],
) -> None:
"""Chat middleware that logs AI interactions."""
# Predobdelava: Zabeleži pred klicem AI
print(f"[Chat] Sending {len(context.messages)} messages to AI")
# Nadaljuj na naslednji vmesni sloj ali AI storitev
await next(context)
# Poobdelava: Zabeleži po odgovoru AI
print("[Chat] AI response received")
Agentov pomnilnik
Kot je opisano v lekciji Agentic Memory, je pomnilnik pomemben element za omogočanje agenta delovanja v različnih kontekstih. MAF ponuja več vrst pomnilnikov:
Pomnilnik v spominu
To je pomnilnik, ki se hrani v nitih med izvajanjem aplikacije.
# Ustvari novo nit.
thread = agent.get_new_thread() # Zaženi agenta z nitjo.
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)
Trajna sporočila
Ta pomnilnik se uporablja za shranjevanje zgodovine pogovorov med različnimi sejami. Definira se z uporabo chat_message_store_factory:
from agent_framework import ChatMessageStore
# Ustvari po meri shrambo sporočil
def create_message_store():
return ChatMessageStore()
agent = ChatAgent(
chat_client=OpenAIChatClient(),
instructions="You are a Travel assistant.",
chat_message_store_factory=create_message_store
)
Dinamični pomnilnik
Ta pomnilnik se doda v kontekst pred zagonom agentov. Ti pomnilniki so lahko shranjeni v zunanjih storitvah, kot je mem0:
from agent_framework.mem0 import Mem0Provider
# Uporaba Mem0 za napredne zmogljivosti pomnilnika
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
)
Opazovanje agenta
Opazovanje je pomembno za gradnjo zanesljivih in vzdržljivih agentskih sistemov. MAF se povezuje z OpenTelemetry za zagotavljanje sledenja in meritev za boljše opazovanje.
from agent_framework.observability import get_tracer, get_meter
tracer = get_tracer()
meter = get_meter()
with tracer.start_as_current_span("my_custom_span"):
# narediti nekaj
pass
counter = meter.create_counter("my_custom_counter")
counter.add(1, {"key": "value"})
MAF ponuja delovne tokove, ki so vnaprej definirani koraki za dokončanje naloge in vključujejo AI agente kot komponente teh korakov.
Delovni tokovi so sestavljeni iz različnih komponent, ki omogočajo boljši nadzor pretoka. Prav tako omogočajo orkestracijo več agentov in checkpointing za shranjevanje stanj delovnih tokov.
Glavne komponente delovnega toka so:
Izvrševalci
Izvrševalci sprejemajo vhodna sporočila, izvajajo dodeljene naloge in proizvajajo izhodna sporočila. Tako omogočajo napredovanje delovnega toka proti zaključku večje naloge. Izvrševalci so lahko AI agenti ali prilagojena logika.
Povezave
Povezave se uporabljajo za določanje toka sporočil v delovnem toku. Lahko so:
Neposredne povezave - preproste povezave ena na ena med izvrševalci:
from agent_framework import WorkflowBuilder
builder = WorkflowBuilder()
builder.add_edge(source_executor, target_executor)
builder.set_start_executor(source_executor)
workflow = builder.build()
Pogojne povezave - aktivirajo se po izpolnitvi določenega pogoja. Na primer, ko sobe v hotelu niso na voljo, izvrševalec lahko predlaga druge možnosti.
Switch-case povezave - usmerjajo sporočila različnim izvrševalcem glede na definirane pogoje. Na primer, če ima potovalni kupec prioriteto in se njegove naloge obravnavajo prek drugega delovnega toka.
Fan-out povezave - pošljejo eno sporočilo več ciljem.
Fan-in povezave - zberejo več sporočil iz različnih izvrševalcev in jih pošljejo enemu cilju.
Dogodki
Za boljšo opazljivost delovnih tokov MAF ponuja vgrajene dogodke za izvajanje, vključno z:
WorkflowStartedEvent - Začetek izvajanja delovnega tokaWorkflowOutputEvent - Delovni tok proizvede izhodWorkflowErrorEvent - Delovni tok se sreča z napakoExecutorInvokeEvent - Izvrševalec začne z obdelavoExecutorCompleteEvent - Izvrševalec zaključi obdelavoRequestInfoEvent - Izvedena je bila zahtevaPrejšnji razdelki zajemajo ključne koncepte Microsoft Agent Framework. Ko gradite bolj kompleksne agente, upoštevajte naslednje napredne vzorce:
Primeri kode za Microsoft Agent Framework lahko najdete v tem repozitoriju pod datotekami xx-python-agent-framework in xx-dotnet-agent-framework.
Pridružite se Microsoft Foundry Discord za srečanje z drugimi učenci, udeležbo v urah pomoči in odgovore na vaša vprašanja o AI agentih.
Omejitev odgovornosti: Ta dokument je bil preveden z uporabo storitve za avtomatski prevod AI Co-op Translator. Čeprav si prizadevamo za natančnost, vas opozarjamo, da lahko avtomatski prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvornih jeziku velja za zavezujoč vir. Za ključne informacije priporočamo strokovni prevod s strani usposobljenega prevajalca. Ne odgovarjamo za morebitna nesporazume ali napačne interpretacije, ki izhajajo iz uporabe tega prevoda.