ai-agents-for-beginners

Raziskovanje Microsoft Agent Framework

Agent Framework

Uvod

Ta lekcija bo zajemala:

Cilji učenja

Po zaključenem tečaju boste znali:

Primeri kode

Primeri kode za Microsoft Agent Framework (MAF) lahko najdete v tem repozitoriju pod datotekami xx-python-agent-framework in xx-dotnet-agent-framework.

Razumevanje Microsoft Agent Framework

Framework Intro

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.

Ključni koncepti Microsoft Agent Framework

Agenti

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:

Za 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"})

Delovni tokovi

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:

Napredni MAF vzorci

Prejšnji razdelki zajemajo ključne koncepte Microsoft Agent Framework. Ko gradite bolj kompleksne agente, upoštevajte naslednje napredne vzorce:

Primeri kode

Primeri kode za Microsoft Agent Framework lahko najdete v tem repozitoriju pod datotekami xx-python-agent-framework in xx-dotnet-agent-framework.

Imate več vprašanj o Microsoft 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.