mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
35a8565495
* Add AG-UI integration * Fix tests. PR feedback * Cleanup * PR Feedback * Improve README and getting started experience * Fix links
101 lines
2.7 KiB
Python
101 lines
2.7 KiB
Python
# Copyright (c) Microsoft. All rights reserved.
|
|
|
|
"""Example agent demonstrating agentic generative UI with custom events during execution."""
|
|
|
|
import asyncio
|
|
|
|
from agent_framework import ChatAgent, ai_function
|
|
from agent_framework.azure import AzureOpenAIChatClient
|
|
|
|
from agent_framework_ag_ui import AgentFrameworkAgent
|
|
|
|
|
|
@ai_function
|
|
async def research_topic(topic: str) -> str:
|
|
"""Research a topic and generate a comprehensive report.
|
|
|
|
Args:
|
|
topic: The topic to research
|
|
|
|
Returns:
|
|
Research report
|
|
"""
|
|
# Simulate multi-step research process
|
|
steps = [
|
|
("Searching databases", 1.0),
|
|
("Analyzing sources", 1.5),
|
|
("Synthesizing information", 1.0),
|
|
("Generating report", 0.5),
|
|
]
|
|
|
|
results: list[str] = []
|
|
for step_name, duration in steps:
|
|
await asyncio.sleep(duration)
|
|
results.append(f"- {step_name}: completed")
|
|
|
|
return f"Research report on '{topic}':\n" + "\n".join(results)
|
|
|
|
|
|
@ai_function
|
|
async def create_presentation(title: str, num_slides: int) -> str:
|
|
"""Create a presentation with multiple slides.
|
|
|
|
Args:
|
|
title: Presentation title
|
|
num_slides: Number of slides to create
|
|
|
|
Returns:
|
|
Presentation summary
|
|
"""
|
|
# Simulate slide generation
|
|
slides: list[str] = []
|
|
for i in range(num_slides):
|
|
await asyncio.sleep(0.5)
|
|
slides.append(f"Slide {i + 1}: Content for {title}")
|
|
|
|
return f"Created presentation '{title}' with {num_slides} slides:\n" + "\n".join(slides)
|
|
|
|
|
|
@ai_function
|
|
async def analyze_data(dataset: str) -> str:
|
|
"""Analyze a dataset and produce insights.
|
|
|
|
Args:
|
|
dataset: The dataset name to analyze
|
|
|
|
Returns:
|
|
Analysis results
|
|
"""
|
|
# Simulate data analysis phases
|
|
phases = [
|
|
("Loading data", 0.8),
|
|
("Cleaning data", 1.0),
|
|
("Running statistical analysis", 1.2),
|
|
("Generating visualizations", 0.7),
|
|
]
|
|
|
|
insights: list[str] = []
|
|
for phase_name, duration in phases:
|
|
await asyncio.sleep(duration)
|
|
insights.append(f"- {phase_name}: done")
|
|
|
|
return f"Analysis of '{dataset}':\n" + "\n".join(insights)
|
|
|
|
|
|
agent = ChatAgent(
|
|
name="research_assistant",
|
|
instructions=(
|
|
"You are a research and analysis assistant. "
|
|
"You can research topics, create presentations, and analyze data. "
|
|
"Use the available tools to help users with their research needs."
|
|
),
|
|
chat_client=AzureOpenAIChatClient(),
|
|
tools=[research_topic, create_presentation, analyze_data],
|
|
)
|
|
|
|
research_assistant_agent = AgentFrameworkAgent(
|
|
agent=agent,
|
|
name="ResearchAssistant",
|
|
description="Research assistant that emits progress events during task execution",
|
|
)
|