![]()
Ова лекција ће покрити:
Након завршетка ове лекције, знаћете како да:
Примери кода за Microsoft Agent Framework (MAF) могу се наћи у овом репозиторијуму под фајловима xx-python-agent-framework и xx-dotnet-agent-framework.

Microsoft Agent Framework (MAF) је јединствени Microsoft-ов оквир за израду AI агената. Он нуди флексибилност да обради широк спектар агентских случајева употребе виђених и у производним и у истраживачким окружењима укључујући:
Да би испоручио AI агенте у производњи, MAF такође укључује функције за:
Microsoft Agent Framework је такође фокусиран на интероперабилност кроз:
Хајде да погледамо како се ове функције примењују на неке од основних појмова Microsoft Agent Framework.

Креирање агената
Креирање агената се обавља дефинисањем сервиса за извођење закључивања (LLM провајдер), скупом упутстава која AI агент треба да прати и додељеним name:
agent = AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent( instructions="You are good at recommending trips to customers based on their preferences.", name="TripRecommender" )
Горњи пример користи Azure OpenAI али агенти се могу креирати користећи различите сервисе укључујући и 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.", )
или удаљене агенте користећи A2A протокол:
agent = A2AAgent( name=agent_card.name, description=agent_card.description, agent_card=agent_card, url="https://your-a2a-agent-host" )
Покретање агената
Агенти се извршавају помоћу метода .run или .run_stream за нетрансмијуће или стриминг одговоре.
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)
За сваки покретач агента могу се подесити опције за прилагођавање параметара као што су max_tokens које агент користи, tools које агент може позивати, па чак и сам model који се користи.
Ово је корисно у случајевима када су специфични модели или алати потребни за извршење корисничког задатка.
Алатке
Алатке могу бити дефинисане и приликом дефинисања агента:
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."
# Када се директно креира ChatAgent
agent = ChatAgent( chat_client=OpenAIChatClient(), instructions="You are a helpful assistant", tools=[get_attractions]
али и приликом покретања агента:
result1 = await agent.run( "What's the best place to visit in Seattle?", tools=[get_attractions] # Алат обезбеђен само за ову извршну поставку )
Нитови агената
Нитови агената се користе за руковање вишекратним разговорама. Нитови могу бити креирани на два начина:
get_new_thread() што омогућава да се нит сачува током временаКод за креирање нити изгледа овако:
# Направите нови нит.
thread = agent.get_new_thread() # Покрените агента са нити.
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)
Нит се затим може серијализовати да би се сачувала за каснију употребу:
# Креирајте нови нит.
thread = agent.get_new_thread()
# Покрените агента са ништом.
response = await agent.run("Hello, how are you?", thread=thread)
# Серијализујте нит за складиштење.
serialized_thread = await thread.serialize()
# Десеријализујте стање нити након учитавања из складишта.
resumed_thread = await agent.deserialize_thread(serialized_thread)
Посредник агената
Агенти комуницирају са алаткама и LLM-овима како би завршили корисничке задатке. У одређеним сценаријима желимо да извршавамо или пратимо радње између ових интеракција. Посредник агента нам омогућава да то радимо кроз:
Функцијски посредник
Овај посредник омогућава извршавање радње између агента и функције/алата који ће позивати. Пример када би се ово користило је када желите да бележите позив функције.
У коду испод, next одређује да ли се позива следећи посредник или сама функција.
async def logging_function_middleware(
context: FunctionInvocationContext,
next: Callable[[FunctionInvocationContext], Awaitable[None]],
) -> None:
"""Function middleware that logs function execution."""
# Предобрада: Логовање пре извршења функције
print(f"[Function] Calling {context.function.name}")
# Настави на следећи посреднички софтвер или извршење функције
await next(context)
# Побрaда: Логовање након извршења функције
print(f"[Function] {context.function.name} completed")
Чат посредник
Овај посредник омогућава извршење или бележење радње између агента и захтева LLM-у.
Ово садржи важне информације као што су messages које се шаљу AI сервису.
async def logging_chat_middleware(
context: ChatContext,
next: Callable[[ChatContext], Awaitable[None]],
) -> None:
"""Chat middleware that logs AI interactions."""
# Предобрада: Логовање пре позива АИ-а
print(f"[Chat] Sending {len(context.messages)} messages to AI")
# Настави на следећи посреднички слој или АИ сервис
await next(context)
# Постобрада: Логовање након одговора АИ-а
print("[Chat] AI response received")
Меморија агента
Као што је обрађено у лекцији Agentic Memory, меморија је важан елемент за омогућавање агента да ради у различитим контекстима. MAF нуди неколико врста меморија:
Складиштење у меморији
Ово је меморија која се чува у нитима током извршења апликације.
# Креирај нови тред.
thread = agent.get_new_thread() # Покрени агента са тредом.
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)
Перзистентне поруке
Ова меморија се користи за чување историје разговора између различитих сесија. Дефинише се користећи фабрику chat_message_store_factory:
from agent_framework import ChatMessageStore
# Креирајте прилагођену продавницу порука
def create_message_store():
return ChatMessageStore()
agent = ChatAgent(
chat_client=OpenAIChatClient(),
instructions="You are a Travel assistant.",
chat_message_store_factory=create_message_store
)
Динамична меморија
Ова меморија се додаје у контекст пре покретања агената. Ове меморије могу се чувати у спољним сервисима као што је mem0:
from agent_framework.mem0 import Mem0Provider
# Коришћење Mem0 за напредне меморијске могућности
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
)
Опсервабилност агента
Опсервабилност је важна за израду поузданих и одрживих агентских система. MAF се интегрише са OpenTelemetry за пружање праћења и мера за бољу опсервабилност.
from agent_framework.observability import get_tracer, get_meter
tracer = get_tracer()
meter = get_meter()
with tracer.start_as_current_span("my_custom_span"):
# уради нешто
pass
counter = meter.create_counter("my_custom_counter")
counter.add(1, {"key": "value"})
MAF нуди радне токове који су унапред дефинисани кораци за завршетак задатка и укључују AI агенте као компоненте у тим корацима.
Радни токови се састоје из различитих компоненти које омогућавају боље управљање током контроле. Радни токови такође омогућавају мулти-агентску оркестрацију и чување стања радног тока.
Основне компоненте радног тока су:
Екзекутори
Екзекутори примају улазне поруке, обављају додељене задатке и производе излазне поруке. Ово покреће радни ток унапред ка завршетку већег задатка. Екзекутора могу бити AI агенти или прилагођена логика.
Ивице
Ивице се користе за дефинисање протока порука унутар радног тока. Оне могу бити:
Директне ивице - Једноставне један-на-један везе између екзекутора:
from agent_framework import WorkflowBuilder
builder = WorkflowBuilder()
builder.add_edge(source_executor, target_executor)
builder.set_start_executor(source_executor)
workflow = builder.build()
Условане ивице - Активирају се након што је испуњен одређени услов. На пример, када хотели немају слободне собе, екзекутор може предложити друге опције.
Switch-case ивице - Роутују поруке различитим екзекуторама на основу дефинисаних услова. На пример, ако путник има приоритетни приступ, њихови задаци ће бити обрађени кроз други радни ток.
Fan-out ивице - Шаљу једну поруку више циљева.
Fan-in ивице - Прикупљају више порука од различитих екзекутора и шаљу их једном циљу.
Догађаји
Да би осигурао бољу опсервабилност унутар радних токова, MAF нуди уграђене догађаје за извршење укључујући:
WorkflowStartedEvent - Започиње извршење радног токаWorkflowOutputEvent - Радни ток производи излазWorkflowErrorEvent - Радни ток наиђе на грешкуExecutorInvokeEvent - Екзекутор почиње обрадуExecutorCompleteEvent - Екзекутор завршава обрадуRequestInfoEvent - Захтев је постављенГорње секције покривају кључне појмове Microsoft Agent Framework. Како градите сложеније агенте, ево неких напредних шаблона које треба размотрити:
Примери кода за Microsoft Agent Framework могу се наћи у овом репозиторијуму под фајловима xx-python-agent-framework и xx-dotnet-agent-framework.
Придружите се Microsoft Foundry Discord да бисте упознали друге учеснике, присуствовали канцеларијским сатима и добили одговоре на ваша питања о AI агентима.
Одрицање од одговорности:
Овај документ је преведен коришћењем AI сервиса за превођење Co-op Translator. Иако се трудимо да превод буде што прецизнији, треба имати у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати коначним и ауторитетним извором. За кључне информације препоручује се професионални људски превод. Не сносимо одговорност за било каква неспоразуме или погрешне интерпретације које могу настати коришћењем овог превода.