![]()
Ši pamoka apims:
Baigę šią pamoką, jūs gebėsite:
Microsoft Agent Framework (MAF) kodo pavyzdžiai saugomi šiame saugykloje, faileose xx-python-agent-framework ir xx-dotnet-agent-framework.

Microsoft Agent Framework (MAF) yra Microsoft vieningas karkasas AI agentams kurti. Jis suteikia lankstumą sprendžiant įvairius agentūrinius naudojimo atvejus, pasitaikančius tiek gamyboje, tiek tyrimuose, pavyzdžiui:
Kad AI agentai veiktų gamyboje, MAF taip pat turi funkcijas:
Microsoft Agent Framework taip pat pabrėžia suderinamumą:
Pažvelkime, kaip šios savybės taikomos Microsoft Agent Framework pagrindinėms sąvokoms.

Agentų kūrimas
Agentų kūrimas vykdomas apibrėžiant nuspėjimo tarnybą (LLM tiekėją), instrukcijų rinkinį, kurias AI agentas turi vykdyti, ir priskirtą name:
agent = AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent( instructions="You are good at recommending trips to customers based on their preferences.", name="TripRecommender" )
Viršuje naudojamas Azure OpenAI, bet agentai gali būti kuriami naudojant įvairias paslaugas, įskaitant Microsoft Foundry Agent Service:
AzureAIAgentClient(async_credential=credential).create_agent( name="HelperAgent", instructions="You are a helpful assistant." ) as agent
OpenAI Responses, ChatCompletion API
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.", )
arba MiniMax, kuris teikia OpenAI suderinamą API su dideliais konteksto langais (iki 204K žetonų):
agent = OpenAIChatClient(base_url="https://api.minimax.io/v1", api_key=os.environ["MINIMAX_API_KEY"], model_id="MiniMax-M2.7").create_agent( name="HelpfulAssistant", instructions="You are a helpful assistant.", )
arba nuotolinius agentus, naudojant A2A protokolą:
agent = A2AAgent( name=agent_card.name, description=agent_card.description, agent_card=agent_card, url="https://your-a2a-agent-host" )
Agentų paleidimas
Agentai paleidžiami naudojant .run arba .run_stream metodus, pvz., ne srautiniams ar srautiniams atsakymams.
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)
Kiekvienam agento paleidimui taip pat gali būti nustatytos pasirinktys parametrams pritaikyti, pvz., max_tokens, kuriuos agentas naudoja, tools, kuriuos agentas gali iškviesti, ir net model, kuri naudojama agentui.
Tai naudinga, kai specifiniai modeliai ar įrankiai yra būtini vartotojo užduočiai įvykdyti.
Įrankiai
Įrankiai gali būti apibrėžti tiek kuriant agentą:
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."
# Kai tiesiogiai kuriamas ChatAgent
agent = ChatAgent( chat_client=OpenAIChatClient(), instructions="You are a helpful assistant", tools=[get_attractions]
tiek paleidžiant agentą:
result1 = await agent.run( "What's the best place to visit in Seattle?", tools=[get_attractions] # Įrankis skirtas tik šiam vykdymui )
Agentų gijos
Agentų gijos naudojamos daugiažingsnių pokalbių tvarkymui. Gijos gali būti sukuriamos:
get_new_thread(), kuris leidžia saugoti giją ilgą laikąGijos kūrimas atrodo taip:
# Sukurkite naują giją.
thread = agent.get_new_thread() # Paleiskite agentą su gija.
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)
Tada galite serializuoti giją, kad ją išsaugotumėte vėlesniam naudojimui:
# Sukurti naują giją.
thread = agent.get_new_thread()
# Vykdyti agentą su gija.
response = await agent.run("Hello, how are you?", thread=thread)
# Serializuoti giją saugojimui.
serialized_thread = await thread.serialize()
# Deserializuoti gijos būseną po įkėlimo iš saugyklos.
resumed_thread = await agent.deserialize_thread(serialized_thread)
Agentų tarpinis programinis sluoksnis
Agentai sąveikauja su įrankiais ir LLM užduočiai atlikti. Tam tikrais atvejais norime vykdyti arba stebėti vykdymą tarp šių sąveikų. Agentų tarpinis sluoksnis leidžia tai padaryti per:
Funkcinį tarpinį programinį sluoksnį
Šis tarpinis sluoksnis leidžia vykdyti veiksmą tarp agento ir funkcijos/įrankio, kurį agentas kvies. Pavyzdys – norint atlikti žurnalavimą funkcijos kvietimo metu.
Toliau pateiktame kode next nurodo, ar kviečiamas kitas tarpinio sluoksnio elementas, ar tiesioginė funkcija.
async def logging_function_middleware(
context: FunctionInvocationContext,
next: Callable[[FunctionInvocationContext], Awaitable[None]],
) -> None:
"""Function middleware that logs function execution."""
# Išankstinis apdorojimas: registruoti prieš funkcijos vykdymą
print(f"[Function] Calling {context.function.name}")
# Tęsti prie kito tarpinio programos sluoksnio arba funkcijos vykdymo
await next(context)
# Tolimesnis apdorojimas: registruoti po funkcijos vykdymo
print(f"[Function] {context.function.name} completed")
Pokyčių tarpinis programinis sluoksnis
Šis sluoksnis leidžia vykdyti veiksmą arba žurnalavimą tarp agento ir užklausų LLM.
Tai apima svarbią informaciją, pvz., messages, kurios siunčiamos į AI tarnybą.
async def logging_chat_middleware(
context: ChatContext,
next: Callable[[ChatContext], Awaitable[None]],
) -> None:
"""Chat middleware that logs AI interactions."""
# Išankstinis apdorojimas: žurnalas prieš AI kvietimą
print(f"[Chat] Sending {len(context.messages)} messages to AI")
# Tęsti prie kito tarpinio sluoksnio arba AI paslaugos
await next(context)
# Po apdorojimo: žurnalas po AI atsakymo
print("[Chat] AI response received")
Agentų atmintis
Kaip aptarta pamokoje Agentic Memory, atmintis yra svarbi, leidžianti agentui veikti skirtinguose kontekstuose. MAF siūlo kelias skirtingas atminties rūšis:
Operatyvinė atmintis
Tai atmintis, saugoma gijose programos vykdymo laikotarpiu.
# Sukurkite naują giją.
thread = agent.get_new_thread() # Vykdykite agentą su šia gija.
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)
Nuolatinės žinutės
Ši atmintis naudojama pokalbių istorijai saugoti skirtingose sesijose. Ji apibrėžiama naudojant chat_message_store_factory:
from agent_framework import ChatMessageStore
# Sukurkite pasirinktinių žinučių saugyklą
def create_message_store():
return ChatMessageStore()
agent = ChatAgent(
chat_client=OpenAIChatClient(),
instructions="You are a Travel assistant.",
chat_message_store_factory=create_message_store
)
Dinaminė atmintis
Ši atmintis pridedama prie konteksto prieš paleidžiant agentus. Šią atmintį galima saugoti išorinėse paslaugose, pvz., mem0:
from agent_framework.mem0 import Mem0Provider
# Naudojant Mem0 pažangioms atminties funkcijoms
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
)
Agentų stebimumas
Stebimumas yra svarbus patikimų ir prižiūrimų agentūrinių sistemų kūrimui. MAF integruojasi su OpenTelemetry, kad suteiktų sekimą ir matuoklius geresniam stebimumui.
from agent_framework.observability import get_tracer, get_meter
tracer = get_tracer()
meter = get_meter()
with tracer.start_as_current_span("my_custom_span"):
# daryti kažką
pass
counter = meter.create_counter("my_custom_counter")
counter.add(1, {"key": "value"})
MAF siūlo darbo eigas – iš anksto apibrėžtus žingsnius užduočiai atlikti, kuriose AI agentai veikia kaip komponentai.
Darbo eigos sudaro įvairūs komponentai, leidžiantys geresnį valdymo srautą. Darbo eigos taip pat palaiko daugiagentūrę koordinaciją ir patikros taškus darbo eigos būsenoms išsaugoti.
Pagrindiniai darbo eigos komponentai yra:
Vykdytojai
Vykdytojai priima įvesties žinutes, atlieka paskirtas užduotis ir sukuria išvesties žinutę. Tai juda darbo eigą pirmyn link didesnės užduoties užbaigimo. Vykdytojai gali būti AI agentai arba vartotojo logika.
Kraštai
Kraštai apibrėžia žinučių srautą darbo eigoje. Jie gali būti:
Tiesioginiai kraštai – paprasti vienas prie vieno ryšiai tarp vykdytojų:
from agent_framework import WorkflowBuilder
builder = WorkflowBuilder()
builder.add_edge(source_executor, target_executor)
builder.set_start_executor(source_executor)
workflow = builder.build()
Sąlyginiai kraštai – aktyvuojami, kai įvykdoma tam tikra sąlyga. Pavyzdžiui, jei viešbučių kambariai nėra prieinami, vykdytojas gali pasiūlyti kitas galimybes.
Perjungimo atvejo kraštai – nukreipia žinutes į skirtingus vykdytojus pagal apibrėžtas sąlygas. Pavyzdžiui, jei keliautojas turi prioriteto prieigą, jo užduotys bus tvarkomos per kitą darbo eigą.
Išskleidimo kraštai – siunčia vieną žinutę keliems gavėjams.
Surinkimo kraštai – surenka kelias žinutes iš skirtingų vykdytojų ir siunčia vienam gavėjui.
Įvykiai
Norint geriau stebėti darbo eigas, MAF siūlo įrankius su vykdymo įvykiais, įskaitant:
WorkflowStartedEvent - pradėtas darbo eigos vykdymasWorkflowOutputEvent - darbo eiga sugeneruoja išvestįWorkflowErrorEvent - darbo eiga susiduria su klaidaExecutorInvokeEvent - vykdytojas pradeda apdorojimąExecutorCompleteEvent - vykdytojas baigia apdorojimąRequestInfoEvent - išduota užklausaAukščiau aprašytos pagrindinės Microsoft Agent Framework sąvokos. Kuriant sudėtingesnius agentus, verta apsvarstyti šiuos išplėstinius modelius:
Microsoft Agent Framework kodo pavyzdžiai saugomi šiame saugykloje, faileose xx-python-agent-framework ir xx-dotnet-agent-framework.
Prisijunkite prie Microsoft Foundry Discord, kad susitiktumėte su kitais besimokančiais, dalyvautumėte valandos klausimų ir atsakymų sesijose bei gautumėte atsakymus į savo AI agentų klausimus.
Atsakomybės apribojimas: Šis dokumentas buvo išverstas naudojant dirbtinio intelekto vertimo paslaugą Co-op Translator. Nors siekiame tikslumo, atkreipkite dėmesį, kad automatizuoti vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas gimtąja kalba turi būti laikomas autoritetingu šaltiniu. Svarbiai informacijai rekomenduojama naudoti profesionalų žmogaus vertimą. Mes neatsakome už bet kokius nesusipratimus ar klaidingas interpretacijas, kylančias naudojant šį vertimą.