ai-agents-for-beginners

Pagsasaliksik sa Microsoft Agent Framework

Agent Framework

Panimula

Tatalakayin sa araling ito ang mga sumusunod:

Mga Layunin sa Pagkatuto

Pagkatapos makumpleto ang araling ito, malalaman mo kung paano:

Mga Halimbawa ng Code

Makikita ang mga halimbawa ng code para sa Microsoft Agent Framework (MAF) sa repositoryong ito sa ilalim ng mga file na xx-python-agent-framework at xx-dotnet-agent-framework.

Pag-unawa sa Microsoft Agent Framework

Framework Intro

Ang Microsoft Agent Framework (MAF) ay pinag-isang framework ng Microsoft para sa paggawa ng mga AI agent. Nagbibigay ito ng kakayahang tugunan ang malawak na uri ng mga use case ng ahente na makikita sa parehong produksyon at mga environment ng pananaliksik kabilang ang:

Para maihatid ang mga AI Agent sa Produksyon, may mga katangian rin ang MAF para sa:

Nakatuon din ang Microsoft Agent Framework sa pagiging interoperable sa pamamagitan ng:

Suriin natin kung paano ina-apply ang mga katangiang ito sa ilang mga pangunahing konsepto ng Microsoft Agent Framework.

Pangunahing Mga Konsepto ng Microsoft Agent Framework

Mga Ahente

Agent Framework

Paglikha ng mga Ahente

Ginagawa ang paglikha ng ahente sa pamamagitan ng pagtukoy ng inference service (LLM Provider), isang set ng mga instruksiyon na susundin ng AI Agent, at itinalagang name:

agent = AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent( instructions="You are good at recommending trips to customers based on their preferences.", name="TripRecommender" )

Ang nasa itaas ay gumagamit ng Azure OpenAI pero maaaring lumikha ng mga ahente gamit ang iba’t ibang serbisyo kabilang ang Microsoft Foundry Agent Service:

AzureAIAgentClient(async_credential=credential).create_agent( name="HelperAgent", instructions="You are a helpful assistant." ) as agent

OpenAI Responses, ChatCompletion APIs

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.", )

o remote agents gamit ang A2A protocol:

agent = A2AAgent( name=agent_card.name, description=agent_card.description, agent_card=agent_card, url="https://your-a2a-agent-host" )

Pagpapatakbo ng mga Ahente

Pinapatakbo ang mga ahente gamit ang .run o .run_stream na mga pamamaraan para sa hindi streaming o streaming na mga sagot.

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)

Bawat pagpapatakbo ng ahente ay maaari ring magkaroon ng mga opsyon para i-customize ang mga parametro tulad ng max_tokens na ginagamit ng ahente, ang mga tools na maaaring tawagan ng ahente, at maging ang mismong model na ginagamit ng ahente.

Ito ay kapaki-pakinabang sa mga kaso kung saan kinakailangan ang partikular na mga modelo o mga tool para matapos ang gawain ng user.

Mga Tool

Maaaring tukuyin ang mga tool kapwa sa paggawa ng ahente:

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." 


# Kapag direktang lumilikha ng ChatAgent

agent = ChatAgent( chat_client=OpenAIChatClient(), instructions="You are a helpful assistant", tools=[get_attractions]

at pati na rin kapag pinapatakbo ang ahente:


result1 = await agent.run( "What's the best place to visit in Seattle?", tools=[get_attractions] # Kagamitang ibinigay para lamang sa takbong ito )

Mga Thread ng Ahente

Ginagamit ang mga Thread ng Ahente upang hawakan ang mga pag-uusap na may maraming turn. Maaaring likhain ang mga thread sa alinman sa mga paraan na ito:

Para gumawa ng isang thread, ganito ang itsura ng code:

# Gumawa ng bagong thread.
thread = agent.get_new_thread() # Patakbuhin ang ahente gamit ang thread.
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)

Maaari mo ring i-serialize ang thread upang maiimbak para sa hinaharap na paggamit:

# Lumikha ng bagong thread.
thread = agent.get_new_thread() 

# Patakbuhin ang ahente gamit ang thread.

response = await agent.run("Hello, how are you?", thread=thread) 

# Isalaysay ang thread para sa pag-iimbak.

serialized_thread = await thread.serialize() 

# I-deserialize ang estado ng thread pagkatapos i-load mula sa imbakan.

resumed_thread = await agent.deserialize_thread(serialized_thread)

Middleware ng Ahente

Nakikipag-ugnayan ang mga ahente sa mga tool at LLM upang tapusin ang mga gawain ng user. Sa ilang mga scenario, gusto nating magsagawa o magtala sa pagitan ng mga interaksyong ito. Pinapahintulutan tayo ng middleware ng ahente na gawin ito sa pamamagitan ng:

Function Middleware

Pinapayagan tayo ng middleware na ito na magsagawa ng isang aksyon sa pagitan ng ahente at isang function/tool na tatawagin nito. Isang halimbawa ng paggamit nito ay kung nais mong mag-log ng mga pag-tawag sa function.

Sa code sa ibaba, tinutukoy ng next kung tatawagin ang susunod na middleware o ang aktwal na function.

async def logging_function_middleware(
    context: FunctionInvocationContext,
    next: Callable[[FunctionInvocationContext], Awaitable[None]],
) -> None:
    """Function middleware that logs function execution."""
    # Paunang pagproseso: I-log bago ang pagpapatupad ng function
    print(f"[Function] Calling {context.function.name}")

    # Magpatuloy sa susunod na middleware o pagpapatupad ng function
    await next(context)

    # Pagkatapos ng pagproseso: I-log pagkatapos ng pagpapatupad ng function
    print(f"[Function] {context.function.name} completed")

Chat Middleware

Pinapayagan tayo ng middleware na ito na magsagawa o mag-log ng aksyon sa pagitan ng ahente at ng mga request sa pagitan ng LLM.

Naglalaman ito ng mahahalagang impormasyon tulad ng mga messages na ipinapadala sa AI service.

async def logging_chat_middleware(
    context: ChatContext,
    next: Callable[[ChatContext], Awaitable[None]],
) -> None:
    """Chat middleware that logs AI interactions."""
    # Paunang proseso: Mag-log bago ang tawag sa AI
    print(f"[Chat] Sending {len(context.messages)} messages to AI")

    # Magpatuloy sa susunod na middleware o serbisyo ng AI
    await next(context)

    # Pagkatapos ng proseso: Mag-log pagkatapos ng tugon ng AI
    print("[Chat] AI response received")

Memorya ng Ahente

Tulad ng tinalakay sa araling Agentic Memory, ang memorya ay isang mahalagang elemento upang payagan ang ahente na mag-operate sa iba’t ibang mga konteksto. Nag-aalok ang MAF ng ilang magkakaibang uri ng mga memorya:

In-Memory Storage

Ito ang memorya na naka-imbak sa mga thread habang tumatakbo ang aplikasyon.

# Lumikha ng bagong thread.
thread = agent.get_new_thread() # Patakbuhin ang ahente gamit ang thread.
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)

Matatagal na Mga Mensahe

Ginagamit ang memoryang ito kapag iniimbak ang kasaysayan ng pag-uusap sa iba’t ibang mga session. Tinukoy ito gamit ang chat_message_store_factory:

from agent_framework import ChatMessageStore

# Gumawa ng pasadyang imbakan ng mensahe
def create_message_store():
    return ChatMessageStore()

agent = ChatAgent(
    chat_client=OpenAIChatClient(),
    instructions="You are a Travel assistant.",
    chat_message_store_factory=create_message_store
)

Dynamic Memory

Idinagdag ang memoryang ito sa konteksto bago patakbuhin ang mga ahente. Maaaring itago ang mga memoryang ito sa mga panlabas na serbisyo tulad ng mem0:

from agent_framework.mem0 import Mem0Provider

# Paggamit ng Mem0 para sa mga advanced na kakayahan sa memorya
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
)

Obserbabilidad ng Ahente

Mahalaga ang obserbabilidad sa pagbuo ng mga maaasahan at madaling mapanatili na mga sistemang agentic. Nakikipag-integrate ang MAF sa OpenTelemetry upang magbigay ng tracing at meter para sa mas mahusay na obserbabilidad.

from agent_framework.observability import get_tracer, get_meter

tracer = get_tracer()
meter = get_meter()
with tracer.start_as_current_span("my_custom_span"):
    # gumawa ng isang bagay
    pass
counter = meter.create_counter("my_custom_counter")
counter.add(1, {"key": "value"})

Mga Workflow

Nag-aalok ang MAF ng mga workflow na mga paunang tukoy na mga hakbang upang tapusin ang isang gawain at kinabibilangan ang mga AI agent bilang bahagi ng mga hakbang na iyon.

Binubuo ang mga workflow ng iba’t ibang mga bahagi na nagpapahintulot ng mas mahusay na daloy ng kontrol. Pinapayagan din ng mga workflow ang multi-agent orchestration at checkpointing upang mai-save ang mga estado ng workflow.

Ang mga pangunahing bahagi ng workflow ay:

Executors

Tumatanggap ang mga executor ng mga input message, isinasagawa ang kanilang mga itinalagang gawain, at pagkatapos ay gumagawa ng output message. Ito ang nagtutulak sa workflow upang matapos ang mas malaking gawain. Maaaring AI agent o custom logic ang mga executor.

Edges

Ginagamit ang mga edge upang tukuyin ang daloy ng mga message sa workflow. Maaari itong maging:

Direct Edges - Simpleng one-to-one na koneksyon sa pagitan ng mga executor:

from agent_framework import WorkflowBuilder

builder = WorkflowBuilder()
builder.add_edge(source_executor, target_executor)
builder.set_start_executor(source_executor)
workflow = builder.build()

Conditional Edges - Na-activate kapag natugunan ang isang partikular na kondisyon. Halimbawa, kapag walang available na mga kuwarto sa hotel, maaaring magmungkahi ang executor ng ibang mga opsyon.

Switch-case Edges - Nagpapadala ng mga message sa iba’t ibang executor base sa mga tinukoy na kondisyon. Halimbawa, kung ang customer ng paglalakbay ay may priyoridad na access at ang kanilang mga gawain ay hahawakan sa ibang workflow.

Fan-out Edges - Nagpapadala ng isang message sa maraming target.

Fan-in Edges - Nangongolekta ng maraming message mula sa iba’t ibang executor at ipinapadala ito sa isang target.

Events

Upang magbigay ng mas mahusay na obserbabilidad sa mga workflow, nag-aalok ang MAF ng mga built-in na event para sa pagpapatupad kabilang ang:

Mga Advanced na Pattern ng MAF

Tinatalakay sa mga naunang seksyon ang mga pangunahing konsepto ng Microsoft Agent Framework. Habang gumagawa ka ng mas kumplikadong mga ahente, narito ang ilang mga advanced na pattern na maaaring isaalang-alang:

Mga Halimbawa ng Code

Makikita ang mga halimbawa ng code para sa Microsoft Agent Framework sa repositoryong ito sa ilalim ng mga file na xx-python-agent-framework at xx-dotnet-agent-framework.

May Iba Ka Pang Mga Tanong Tungkol sa Microsoft Agent Framework?

Sumali sa Microsoft Foundry Discord upang makipagkita sa ibang mga nag-aaral, dumalo sa mga oras ng opisina, at masagot ang iyong mga tanong tungkol sa AI Agents.


Paunawa:
Ang dokumentong ito ay naisalin gamit ang AI translation service na Co-op Translator. Bagamat pinagsusumikapan naming maging tumpak ang salin, pakatandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang orihinal na wika ang dapat ituring na pinagtibay na sanggunian. Para sa mahahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng salin na ito.