ai-agents-for-beginners

๐ŸŒ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจธเจพเจซเจŸ เจเจœเฉฐเจŸ เจซเจฐเฉ‡เจฎเจตเจฐเจ• (.NET) เจจเจพเจฒ AI เจฏเจพเจคเจฐเจพ เจเจœเฉฐเจŸ

๐Ÿ“‹ เจฆเจฐเจธเจผเจจเจพเจจเฉเจฎเจพ เจธเจฅเจฟเจคเฉ€

เจ‡เจน เจ‰เจฆเจพเจนเจฐเจจ เจธเจฟเจ–เจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆ เจ•เจฟ เจ•เจฟเจตเฉ‡เจ‚ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจธเจพเจซเจŸ เจเจœเฉฐเจŸ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจซเจฐ.NET เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เฉฑเจ• เจฌเฉเฉฑเจงเฉ€เจฎเจพเจจ เจฏเจพเจคเจฐเจพ เจฏเฉ‹เจœเจจเจพ เจฌเจฃเจพเจ‰เจฃ เจตเจพเจฒเจพ เจเจœเฉฐเจŸ เจฌเจฃเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจเจœเฉฐเจŸ เจฆเฉเจจเฉ€เจ† เจญเจฐ เจฆเฉ‡ เจ•เจฟเจคเฉ‡ เจตเฉ€ เจ—เฉฐเจคเจตเจพเจ‚ เจฒเจˆ เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจคเฉŒเจฐ โ€˜เจคเฉ‡ เจตเจฟเจ…เจ•เจคเฉ€เจ—เจค เจฆเจฟเจจ-เจญเจฐ เจฆเฉ€เจ†เจ‚ เจฏเจพเจคเจฐเจพ เจฏเฉ‹เจœเจจเจพเจตเจพเจ‚ เจคเจฟเจ†เจฐ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจฎเฉเฉฑเจ– เจธเจฎเจฐเฉฑเจฅเจพเจตเจพเจ‚:

๐Ÿ”ง เจคเจ•เจจเฉ€เจ•เฉ€ เจตเจพเจธเจคเฉ‚เจ•เจฒเจพ

เจฎเฉเฉฑเจ– เจคเจ•เจจเจพเจฒเฉ‹เจœเฉ€เจ†เจ‚

เจฎเฉเฉฑเจ– เจญเจพเจ—

  1. AIAgent: เจฎเฉเฉฑเจ– เจเจœเฉฐเจŸ เจœเฉ‹ เจ—เฉฑเจฒเจฌเจพเจค เจฆเฉ‡ เจชเฉเจฐเจตเจพเจน เจจเฉ‚เฉฐ เจธเฉฐเจญเจพเจฒเจฆเจพ เจนเฉˆ
  2. เจ•เจธเจŸเจฎ เจŸเฉ‚เจฒ: เจเจœเฉฐเจŸ เจฒเจˆ เจ‰เจชเจฒเฉฑเจฌเจง GetRandomDestination() เจซเฉฐเจ•เจธเจผเจจ
  3. Responses เจ•เจฒเจพเจ‡เฉฐเจŸ: เจ…เฉ›เฉ‚เจฐ เจ“เจชเจจAI Responses-เจ…เจงเจพเจฐเจฟเจค เจ—เฉฑเจฒเจฌเจพเจค เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ
  4. เจธเจŸเฉเจฐเฉ€เจฎเจฟเฉฐเจ— เจธเจฎเจฐเจฅเจจ: เจคเฉเจฐเฉฐเจค เจœเจตเจพเจฌ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจธเจฎเจฐเจฅเจพ

เจ‡เฉฐเจŸเฉ€เจ—เจฐเฉ‡เจธเจผเจจ เจชเฉˆเจŸเจฐเจจ

graph LR
    A[เจฏเฉ‚เจœเจผเจฐ เจฌเจฟเจจเฉˆ] --> B[เจเจ†เจˆ เจเจœเฉฐเจŸ]
    B --> C[เจเจœเจผเฉ‚เจฐ OpenAI (เจœเจตเจพเจฌ เจฆเฉ‡เจฃ เจตเจพเจฒเฉ€ API)]
    B --> D[GetRandomDestination เจŸเฉ‚เจฒ]
    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
# เจชเจพเจตเจฐเจธเจผเฉˆเฉฑเจฒ
$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. เจเจœเฉฐเจŸ เจตเจพเจธเจคเฉ‚เจ•เจฒเจพ: เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจธเจพเจซเจŸ เจเจœเฉฐเจŸ เจซเจฐเฉ‡เจฎเจตเจฐเจ• .NET เจตเจฟเฉฑเจš AI เจเจœเฉฐเจŸ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ‡เฉฑเจ• เจธเจพเจซเจผ, เจŸเจพเจˆเจช-เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจคเจฐเฉ€เจ•เจพ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆ
  2. เจŸเฉ‚เจฒ เจ‡เฉฐเจŸเฉ€เจ—เจฐเฉ‡เจธเจผเจจ: [Description] เจ—เฉเจฃเจพเจ‚ เจจเจพเจฒ เจธเจœเจพเจ‡เจ† เจ—เจฟเจ† เจซเฉฐเจ•เจธเจผเจจ เจเจœเฉฐเจŸ เจฒเจˆ เจ‰เจชเจฒเฉฑเจฌเจง เจŸเฉ‚เจฒ เจฌเจฃ เจœเจพเจ‚เจฆเจพ เจนเฉˆ
  3. เจ•เจจเจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ เจชเฉเจฐเจฌเฉฐเจงเจจ: เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฐเจฟเจ…เจฌเจฒ เจ…เจคเฉ‡ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เฉเจฐเฉˆเจกเฉˆเจ‚เจธเจผเฉ€เจ…เจฒ เจธเฉฐเจญเจพเจฒ เจฌเจฟเจนเจคเจฐ .NET เจ…เจญเจฟเจ†เจธเจพเจ‚ เจฆเฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒ
  4. เจ…เฉ›เฉ‚เจฐ เจ“เจชเจจAI Responses API: เจเจœเฉฐเจŸ เจ…เฉ›เฉ‚เจฐ.AI.OpenAI SDK เจฐเจพเจนเฉ€เจ‚ เจ…เฉ›เฉ‚เจฐ เจ“เจชเจจAI Responses API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ

๐Ÿ”— เจตเจพเจงเฉ‚ เจธเจฐเฉ‹เจค


เจ…เจธเจตเฉ€เจ•เจพเจฐเฉ‹เจชเจฃ: เจ‡เจธ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจฆเจพ เจ…เจจเฉเจตเจพเจฆ เจเจ†เจˆ เจ…เจจเฉเจตเจพเจฆ เจธเฉ‡เจตเจพ Co-op Translator เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค เจœเจฆเฉ‹เจ‚ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจธเจนเฉ€เจคเจพเจตเจพเจ‚ เจฒเจˆ เจฏเจคเจจเจธเจผเฉ€เจฒ เจนเจพเจ‚, เจ•เจฟเจฐเจชเจพ เจ•เจฐเจ•เฉ‡ เจงเจฟเจ†เจจ เจฐเฉฑเจ–เฉ‹ เจ•เจฟ เจธเจตเฉˆเจšเจพเจฒเจฟเจค เจ…เจจเฉเจตเจพเจฆเจพเจ‚ เจตเจฟเฉฑเจš เจ—เจฒเจคเฉ€เจ†เจ‚ เจœเจพเจ‚ เจ…เจธเจฎเฉฑเจคเจฟเจ†เจตเจพเจ‚ เจนเฉ‹ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจเฅค เจฎเฉ‚เจฒ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจ†เจชเจฃเฉ€ เจฎเฉ‚เจฒ เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจš เจ…เจงเจฟเจ•เจพเจฐเจ• เจธเจฐเฉ‹เจค เจฎเฉฐเจจเจฟเจ† เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจœเจฐเฉ‚เจฐเฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฒเจˆ, เจชเฉ‡เจธเจผเฉ‡เจตเจฐ เจฎเจจเฉเฉฑเจ–เฉ€ เจ…เจจเฉเจตเจพเจฆ เจฆเฉ€ เจธเจฟเจซเจผเจพเจฐเจธเจผ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจ‡เจธ เจ…เจจเฉเจตเจพเจฆ เจฆเฉ‡ เจ‰เจชเจฏเฉ‹เจ— เจคเฉ‹เจ‚ เจชเฉˆเจฆเจพ เจนเฉ‹เจฃ เจตเจพเจฒเฉ€เจ†เจ‚ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจ—เจฒเจคเจซเจนเจฟเจฎเฉ€เจ†เจ‚ เจœเจพเจ‚ เจ—เจฒเจค เจตเจฟเจ†เจ–เจฟเจ†เจตเจพเจ‚ เจฒเจˆ เจœเจตเจพเจฌเจฆเฉ‡เจน เจจเจนเฉ€เจ‚ เจนเจพเจ‚เฅค