ai-agents-for-beginners

🌍 āļ•āļąāļ§āđāļ—āļ™āļ—āđˆāļ­āļ‡āđ€āļ—āļĩāđˆāļĒāļ§ AI āļ”āđ‰āļ§āļĒ Microsoft Agent Framework (.NET)

📋 āļ āļēāļžāļĢāļ§āļĄāļŠāļ–āļēāļ™āļāļēāļĢāļ“āđŒ

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ™āļĩāđ‰āđāļŠāļ”āļ‡āļ§āļīāļ˜āļĩāļŠāļĢāđ‰āļēāļ‡āļ•āļąāļ§āđāļ—āļ™āļ§āļēāļ‡āđāļœāļ™āļ—āđˆāļ­āļ‡āđ€āļ—āļĩāđˆāļĒāļ§āļ­āļąāļˆāļ‰āļĢāļīāļĒāļ°āđ‚āļ”āļĒāđƒāļŠāđ‰ Microsoft Agent Framework āļŠāļģāļŦāļĢāļąāļš .NET āļ•āļąāļ§āđāļ—āļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡āđāļœāļ™āļāļēāļĢāđ€āļ”āļīāļ™āļ—āļēāļ‡āđāļšāļšāļ§āļąāļ™āđ€āļ”āļĩāļĒāļ§āļ—āļĩāđˆāļ›āļĢāļąāļšāđƒāļŦāđ‰āđ€āļŦāļĄāļēāļ°āļŠāļĄāļāļąāļšāļšāļļāļ„āļ„āļĨāļŠāļģāļŦāļĢāļąāļšāļˆāļļāļ”āļŦāļĄāļēāļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļŠāļļāđˆāļĄāļ—āļąāđˆāļ§āđ‚āļĨāļāđ‚āļ”āļĒāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī

āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļŦāļĨāļąāļ:

🔧 āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāļ—āļēāļ‡āđ€āļ—āļ„āļ™āļīāļ„

āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩāļŦāļĨāļąāļ

āļŠāđˆāļ§āļ™āļ›āļĢāļ°āļāļ­āļšāļŠāļģāļ„āļąāļ

  1. AIAgent: āļ•āļąāļ§āļˆāļąāļ”āļāļēāļĢāļŦāļĨāļąāļāļ‚āļ­āļ‡āļ•āļąāļ§āđāļ—āļ™āļ—āļĩāđˆāļˆāļąāļ”āļāļēāļĢāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļšāļ—āļŠāļ™āļ—āļ™āļē
  2. āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āđāļšāļšāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡: āļŸāļąāļ‡āļāđŒāļŠāļąāļ™ GetRandomDestination() āļŠāļģāļŦāļĢāļąāļšāļ•āļąāļ§āđāļ—āļ™āđƒāļŠāđ‰āļ‡āļēāļ™
  3. āļĨāļđāļāļ„āđ‰āļē Responses: āļ­āļīāļ™āđ€āļ—āļ­āļĢāđŒāđ€āļŸāļ‹āļšāļ—āļŠāļ™āļ—āļ™āļēāļ—āļĩāđˆāļ­āļīāļ‡āļāļąāļš Azure OpenAI Responses
  4. āļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāļŠāļ•āļĢāļĩāļĄāļĄāļīāļ‡: āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡āđāļšāļšāđ€āļĢāļĩāļĒāļĨāđ„āļ—āļĄāđŒ

āđāļšāļšāđāļœāļ™āļāļēāļĢāļœāļŠāļēāļ™āļĢāļ§āļĄ

graph LR
    A[āļ„āļģāļ‚āļ­āļ‚āļ­āļ‡āļœāļđāđ‰āđƒāļŠāđ‰] --> B[āļ•āļąāļ§āđāļ—āļ™ AI]
    B --> C[Azure OpenAI (API āļāļēāļĢāļ•āļ­āļšāļāļĨāļąāļš)]
    B --> D[āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āđ€āļĨāļ·āļ­āļāļˆāļļāļ”āļŦāļĄāļēāļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āđāļšāļšāļŠāļļāđˆāļĄ]
    C --> E[āļāļģāļŦāļ™āļ”āļāļēāļĢāļ—āđˆāļ­āļ‡āđ€āļ—āļĩāđˆāļĒāļ§]
    D --> E

🚀 āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āđƒāļŠāđ‰āļ‡āļēāļ™

āļŠāļīāđˆāļ‡āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļĄāļĩāļĨāđˆāļ§āļ‡āļŦāļ™āđ‰āļē

āļ•āļąāļ§āđāļ›āļĢāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™

# zsh/bash
export AZURE_OPENAI_ENDPOINT=https://<your-resource>.openai.azure.com
export AZURE_OPENAI_DEPLOYMENT=gpt-5-mini
# āļˆāļēāļāļ™āļąāđ‰āļ™āļĨāļ‡āļŠāļ·āđˆāļ­āđ€āļ‚āđ‰āļēāđƒāļŠāđ‰āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰ AzureCliCredential āļĢāļąāļšāđ‚āļ—āđ€āļ„āđ‡āļ™āđ„āļ”āđ‰
az login
# PowerShell
$env:AZURE_OPENAI_ENDPOINT = "https://<your-resource>.openai.azure.com"
$env:AZURE_OPENAI_DEPLOYMENT = "gpt-5-mini"
# āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļ‚āđ‰āļēāļŠāļđāđˆāļĢāļ°āļšāļšāđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰ AzureCliCredential āļŠāļēāļĄāļēāļĢāļ–āļĢāļąāļšāđ‚āļ—āđ€āļ„āđ‡āļ™āđ„āļ”āđ‰
az login

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ”

āđ€āļžāļ·āđˆāļ­āļĢāļąāļ™āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ”,

# zsh/bash
chmod +x ./01-dotnet-agent-framework.cs
./01-dotnet-agent-framework.cs

āļŦāļĢāļ·āļ­āđƒāļŠāđ‰ dotnet CLI:

dotnet run ./01-dotnet-agent-framework.cs

āļ”āļđ 01-dotnet-agent-framework.cs āļŠāļģāļŦāļĢāļąāļšāđ‚āļ„āđ‰āļ”āļ„āļĢāļšāļ–āđ‰āļ§āļ™

#!/usr/bin/dotnet run

#:package Microsoft.Extensions.AI@10.4.1
#:package Microsoft.Agents.AI.OpenAI@1.1.0
#:package Azure.AI.OpenAI@2.1.0
#:package Azure.Identity@1.13.1

using System.ComponentModel;

using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;

using Azure.AI.OpenAI;
using Azure.Identity;

// Tool Function: Random Destination Generator
// This static method will be available to the agent as a callable tool
// The [Description] attribute helps the AI understand when to use this function
// This demonstrates how to create custom tools for AI agents
[Description("Provides a random vacation destination.")]
static string GetRandomDestination()
{
    // List of popular vacation destinations around the world
    // The agent will randomly select from these options
    var destinations = new List<string>
    {
        "Paris, France",
        "Tokyo, Japan",
        "New York City, USA",
        "Sydney, Australia",
        "Rome, Italy",
        "Barcelona, Spain",
        "Cape Town, South Africa",
        "Rio de Janeiro, Brazil",
        "Bangkok, Thailand",
        "Vancouver, Canada"
    };

    // Generate random index and return selected destination
    // Uses System.Random for simple random selection
    var random = new Random();
    int index = random.Next(destinations.Count);
    return destinations[index];
}

// Azure OpenAI with the Responses API (stable v1 endpoint). Sign in with `az login`.
var azureEndpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")
    ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
var deployment = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT") ?? "gpt-5-mini";

var azureClient = new AzureOpenAIClient(new Uri(azureEndpoint), new AzureCliCredential());

// Create AI Agent with Travel Planning Capabilities
// Get the Responses client for the specified deployment and create the AI agent
// Configure agent with travel planning instructions and random destination tool
// The agent can now plan trips using the GetRandomDestination function
AIAgent agent = azureClient
    .GetChatClient(deployment)
    .AsAIAgent(
        instructions: "You are a helpful AI Agent that can help plan vacations for customers at random destinations",
        tools: [AIFunctionFactory.Create(GetRandomDestination)]
    );

// Execute Agent: Plan a Day Trip
// Run the agent with streaming enabled for real-time response display
// Shows the agent's thinking and response as it generates the content
// Provides better user experience with immediate feedback
await foreach (var update in agent.RunStreamingAsync("Plan me a day trip"))
{
    await Task.Delay(10);
    Console.Write(update);
}

🎓 āļ‚āđ‰āļ­āļŠāļĢāļļāļ›āļŠāļģāļ„āļąāļ

  1. āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāļ•āļąāļ§āđāļ—āļ™: Microsoft Agent Framework āļĄāļ­āļšāđāļ™āļ§āļ—āļēāļ‡āļ—āļĩāđˆāļŠāļ°āļ­āļēāļ”āđāļĨāļ°āļ›āļĨāļ­āļ”āļ āļąāļĒāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ•āļąāļ§āđāļ—āļ™ AI āđƒāļ™ .NET
  2. āļāļēāļĢāļœāļŠāļēāļ™āļĢāļ§āļĄāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­: āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļ—āļĩāđˆāļĄāļĩ [Description] āļˆāļ°āļāļĨāļēāļĒāđ€āļ›āđ‡āļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļ—āļĩāđˆāļ•āļąāļ§āđāļ—āļ™āđƒāļŠāđ‰āđ„āļ”āđ‰
  3. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļē: āļ•āļąāļ§āđāļ›āļĢāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāđāļĨāļ°āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāļĢāļąāļšāļĢāļ­āļ‡āļ­āļĒāđˆāļēāļ‡āļ›āļĨāļ­āļ”āļ āļąāļĒāļ•āļēāļĄāđāļ™āļ§āļ—āļēāļ‡āļ›āļāļīāļšāļąāļ•āļīāļ—āļĩāđˆāļ”āļĩāļ—āļĩāđˆāļŠāļļāļ”āļ‚āļ­āļ‡ .NET
  4. Azure OpenAI Responses API: āļ•āļąāļ§āđāļ—āļ™āđƒāļŠāđ‰ Azure OpenAI Responses API āļœāđˆāļēāļ™ Azure.AI.OpenAI SDK

🔗 āđāļŦāļĨāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄ


āļ›āļāļīāđ€āļŠāļ˜āļ„āļ§āļēāļĄāļĢāļąāļšāļœāļīāļ”āļŠāļ­āļš: āđ€āļ­āļāļŠāļēāļĢāļ™āļĩāđ‰āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāđāļ›āļĨāđ‚āļ”āļĒāđƒāļŠāđ‰āļšāļĢāļīāļāļēāļĢāđāļ›āļĨāļ āļēāļĐāļē AI Co-op Translator āļ‚āļ“āļ°āļ—āļĩāđˆāđ€āļĢāļēāļžāļĒāļēāļĒāļēāļĄāđƒāļŦāđ‰āļ„āļ§āļēāļĄāļ–āļđāļāļ•āđ‰āļ­āļ‡ āđ‚āļ›āļĢāļ”āļ—āļĢāļēāļšāļ§āđˆāļēāļāļēāļĢāđāļ›āļĨāđ‚āļ”āļĒāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāļ­āļēāļˆāļĄāļĩāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļŦāļĢāļ·āļ­āļ„āļ§āļēāļĄāđ„āļĄāđˆāļ–āļđāļāļ•āđ‰āļ­āļ‡ āđ€āļ­āļāļŠāļēāļĢāļ•āđ‰āļ™āļ‰āļšāļąāļšāđƒāļ™āļ āļēāļĐāļēāļ•āđ‰āļ™āļ—āļēāļ‡āļ„āļ§āļĢāļ–āļđāļāļžāļīāļˆāļēāļĢāļ“āļēāđ€āļ›āđ‡āļ™āđāļŦāļĨāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāđ€āļŠāļ·āđˆāļ­āļ–āļ·āļ­āđ„āļ”āđ‰ āļŠāļģāļŦāļĢāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļŠāļģāļ„āļąāļ āđāļ™āļ°āļ™āļģāđƒāļŦāđ‰āđƒāļŠāđ‰āļāļēāļĢāđāļ›āļĨāđ‚āļ”āļĒāļĄāļ™āļļāļĐāļĒāđŒāļĄāļ·āļ­āļ­āļēāļŠāļĩāļž āđ€āļĢāļēāđ„āļĄāđˆāļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāļ•āđˆāļ­āļ„āļ§āļēāļĄāđ€āļ‚āđ‰āļēāđƒāļˆāļœāļīāļ”āļŦāļĢāļ·āļ­āļāļēāļĢāļ•āļĩāļ„āļ§āļēāļĄāļ—āļĩāđˆāļœāļīāļ”āļžāļĨāļēāļ”āļ—āļĩāđˆāđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āļˆāļēāļāļāļēāļĢāđƒāļŠāđ‰āļāļēāļĢāđāļ›āļĨāļ™āļĩāđ‰