Ta lekcija bo zajemala:
Po zaključku te lekcije boste znali:
Primeri kode za Microsoft Agent Framework (MAF) so na voljo v tem repozitoriju pod datotekami xx-python-agent-framework
in xx-dotnet-agent-framework
.
Microsoft Agent Framework (MAF) temelji na izkušnjah in spoznanjih iz Semantic Kernel in AutoGen. Ponuja prilagodljivost za obravnavo širokega spektra agentnih primerov uporabe, ki jih najdemo tako v produkcijskih kot raziskovalnih okoljih, vključno z:
Za dostavo AI agentov v produkciji MAF vključuje tudi funkcije za:
Microsoft Agent Framework je osredotočen tudi na interoperabilnost z:
Poglejmo, kako se te funkcije uporabljajo pri nekaterih ključnih konceptih Microsoft Agent Framework.
Ustvarjanje agentov
Ustvarjanje agentov se izvede z definiranjem storitve sklepanja (LLM ponudnik), niza navodil, ki jih AI agent sledi, in dodeljenega imena
:
agent = AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent( instructions="You are good at recommending trips to customers based on their preferences.", name="TripRecommender" )
Zgornji primer uporablja Azure OpenAI
, vendar je mogoče agente ustvariti z različnimi storitvami, vključno z Azure AI 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 z uporabo protokola A2A:
agent = A2AAgent( name=agent_card.name, description=agent_card.description, agent_card=agent_card, url="https://your-a2a-agent-host" )
Zagon agentov
Agenti se zaženejo z metodama .run
ali .run_stream
za odgovore brez pretakanja ali s pretakanjem.
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 lahko vključuje možnosti za prilagoditev parametrov, kot so max_tokens
, ki jih agent uporablja, tools
, ki jih agent lahko kliče, in celo model
, ki ga agent uporablja.
To je uporabno v primerih, kjer so za dokončanje uporabnikove naloge potrebni specifični modeli ali orodja.
Orodja
Orodja je mogoče definirati tako pri 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."
# When creating a ChatAgent directly
agent = ChatAgent( chat_client=OpenAIChatClient(), instructions="You are a helpful assistant", tools=[get_attractions]
kot tudi pri zagonu agenta:
result1 = await agent.run( "What's the best place to visit in Seattle?", tools=[get_attractions] # Tool provided for this run only )
Agentne niti
Agentne niti se uporabljajo za obravnavo pogovorov z več obrati. Niti je mogoče ustvariti bodisi z:
get_new_thread()
, ki omogoča, da se nit shrani skozi časZa ustvarjanje niti koda izgleda takole:
# Create a new thread.
thread = agent.get_new_thread() # Run the agent with the thread.
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 shranjevanje za kasnejšo uporabo:
# Create a new thread.
thread = agent.get_new_thread()
# Run the agent with the thread.
response = await agent.run("Hello, how are you?", thread=thread)
# Serialize the thread for storage.
serialized_thread = await thread.serialize()
# Deserialize the thread state after loading from storage.
resumed_thread = await agent.deserialize_thread(serialized_thread)
Agentno vmesno programsko opremo
Agenti komunicirajo z orodji in LLM-ji za dokončanje uporabnikovih nalog. V določenih scenarijih želimo izvesti ali spremljati interakcije med temi koraki. Agentno vmesno programsko opremo nam to omogoča prek:
Funkcijske vmesne programske opreme
Ta vmesna programska oprema omogoča izvedbo dejanja med agentom in funkcijo/orodjem, ki ga bo klical. Primer uporabe bi bil, ko želite beležiti klic funkcije.
V spodnji kodi next
določa, ali naj se pokliče naslednja vmesna programska oprema ali dejanska funkcija.
async def logging_function_middleware(
context: FunctionInvocationContext,
next: Callable[[FunctionInvocationContext], Awaitable[None]],
) -> None:
"""Function middleware that logs function execution."""
# Pre-processing: Log before function execution
print(f"[Function] Calling {context.function.name}")
# Continue to next middleware or function execution
await next(context)
# Post-processing: Log after function execution
print(f"[Function] {context.function.name} completed")
Vmesna programska oprema za klepet
Ta vmesna programska oprema omogoča izvedbo ali beleženje dejanja med agentom in zahtevami med LLM.
Vsebuje pomembne informacije, kot so messages
, 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."""
# Pre-processing: Log before AI call
print(f"[Chat] Sending {len(context.messages)} messages to AI")
# Continue to next middleware or AI service
await next(context)
# Post-processing: Log after AI response
print("[Chat] AI response received")
Agentni pomnilnik
Kot je obravnavano v lekciji Agentic Memory
, je pomnilnik pomemben element za omogočanje agentu delovanja v različnih kontekstih. MAF ponuja več različnih vrst pomnilnikov:
Pomnilnik v aplikaciji
To je pomnilnik, shranjen v nitih med delovanjem aplikacije.
# Create a new thread.
thread = agent.get_new_thread() # Run the agent with the thread.
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 pri shranjevanju zgodovine pogovorov med različnimi sejami. Definiran je z uporabo chat_message_store_factory
:
from agent_framework import ChatMessageStore
# Create a custom message store
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 kontekstu pred zagonom agentov. Ti pomnilniki se lahko shranijo v zunanje storitve, kot je mem0:
from agent_framework.mem0 import Mem0Provider
# Using Mem0 for advanced memory capabilities
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
)
Opazljivost agentov
Opazljivost je pomembna za gradnjo zanesljivih in vzdržljivih agentnih sistemov. MAF se integrira z OpenTelemetry za zagotavljanje sledenja in merilnikov za boljšo opazljivost.
from agent_framework.observability import get_tracer, get_meter
tracer = get_tracer()
meter = get_meter()
with tracer.start_as_current_span("my_custom_span"):
# do something
pass
counter = meter.create_counter("my_custom_counter")
counter.add(1, {"key": "value"})
MAF ponuja delovne tokove, ki so vnaprej določeni 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 nadzorni tok. Delovni tokovi omogočajo tudi orkestracijo več agentov in kontrolne točke za shranjevanje stanj delovnega toka.
Osnovne komponente delovnega toka so:
Izvajalci
Izvajalci prejmejo vhodna sporočila, opravijo dodeljene naloge in nato ustvarijo izhodno sporočilo. To premika delovni tok proti dokončanju večje naloge. Izvajalci so lahko AI agenti ali prilogena logika.
Povezave
Povezave se uporabljajo za definiranje toka sporočil v delovnem toku. Te so lahko:
Neposredne povezave - Enostavne povezave ena na ena med izvajalci:
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 - Aktivirane, ko je izpolnjen določen pogoj. Na primer, ko hotelske sobe niso na voljo, lahko izvajalec predlaga druge možnosti.
Povezave z izbiro primera - Usmerjajo sporočila k različnim izvajalcem glede na določene pogoje. Na primer, če ima potovalni kupec prednostni dostop, se njegove naloge obravnavajo prek drugega delovnega toka.
Razdeljene povezave - Pošljejo eno sporočilo več ciljem.
Združene povezave - Zberejo več sporočil od različnih izvajalcev 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 ustvari izhodWorkflowErrorEvent
- Delovni tok naleti na napakoExecutorInvokeEvent
- Izvajalec začne obdelavoExecutorCompleteEvent
- Izvajalec zaključi obdelavoRequestInfoEvent
- Izdana je zahtevaPoenostavljeno ustvarjanje agentov
Semantic Kernel zahteva ustvarjanje primerka jedra za vsakega agenta. MAF uporablja poenostavljen pristop z uporabo razširitev za glavne ponudnike.
agent = AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent( instructions="You are good at reccomending trips to customers based on their preferences.", name="TripRecommender" )
Ustvarjanje niti agentov
Semantic Kernel zahteva ročno ustvarjanje niti. V MAF je agentu neposredno dodeljena nit.
thread = agent.get_new_thread() # Run the agent with the thread.
Registracija orodij
V Semantic Kernel se orodja registrirajo v jedru, ki se nato posreduje agentu. V MAF se orodja registrirajo neposredno med procesom ustvarjanja agenta.
agent = ChatAgent( chat_client=OpenAIChatClient(), instructions="You are a helpful assistant", tools=[get_attractions]
Ekipe proti delovnim tokovom
Ekipe
so struktura dogodkov za dejavnosti, ki jih vodijo dogodki z agenti v AutoGen. MAF uporablja Delovne tokove
, ki usmerjajo podatke k izvajalcem prek arhitekture na osnovi grafov.
Ustvarjanje orodij
AutoGen uporablja FunctionTool
za ovijanje funkcij, ki jih agenti kličejo. MAF uporablja @ai_function, ki deluje podobno, vendar samodejno sklepa sheme za vsako funkcijo.
Obnašanje agentov
Agenti so v AutoGen privzeto agenti z enim obratom, razen če je max_tool_iterations
nastavljen na višjo vrednost. V MAF je ChatAgent
privzeto večobratni, kar pomeni, da bo še naprej klical orodja, dokler naloga uporabnika ni dokončana.
Primeri kode za Microsoft Agent Framework so na voljo v tem repozitoriju pod datotekami xx-python-agent-framework
in xx-dotnet-agent-framework
.
Pridružite se Azure AI Foundry Discord, kjer lahko spoznate druge učence, se udeležite uradnih ur in dobite odgovore na vprašanja o AI agentih.
Omejitev odgovornosti:
Ta dokument je bil preveden z uporabo storitve AI za prevajanje Co-op Translator. Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvirnem jeziku je treba obravnavati kot avtoritativni vir. Za ključne informacije priporočamo profesionalni človeški prevod. Ne prevzemamo odgovornosti za morebitna nesporazumevanja ali napačne razlage, ki izhajajo iz uporabe tega prevoda.