ai-agents-for-beginners

🌍 AI туристички Π°Π³Π΅Π½Ρ‚ са Microsoft Agent Framework (.NET)

πŸ“‹ ΠŸΡ€Π΅Π³Π»Π΅Π΄ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡ˜Π°

Овај ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·ΡƒΡ˜Π΅ ΠΊΠ°ΠΊΠΎ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΎΠ³ Π°Π³Π΅Π½Ρ‚Π° Π·Π° ΠΏΠ»Π°Π½ΠΈΡ€Π°ΡšΠ΅ ΠΏΡƒΡ‚ΠΎΠ²Π°ΡšΠ° користСћи Microsoft Agent Framework Π·Π° .NET. АгСнат ΠΌΠΎΠΆΠ΅ аутоматски гСнСрисати пСрсонализованС ΠΏΠ»Π°Π½ΠΎΠ²Π΅ Ρ˜Π΅Π΄Π½ΠΎΠ΄Π½Π΅Π²Π½ΠΈΡ… ΠΈΠ·Π»Π΅Ρ‚Π° Π·Π° насумичнС Π΄Π΅ΡΡ‚ΠΈΠ½Π°Ρ†ΠΈΡ˜Π΅ ΡˆΠΈΡ€ΠΎΠΌ свСта.

ΠšΡ™ΡƒΡ‡Π½Π΅ могућности:

πŸ”§ Π’Π΅Ρ…Π½ΠΈΡ‡ΠΊΠ° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°

ОсновнС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡ˜Π΅

ΠšΡ™ΡƒΡ‡Π½Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅

  1. AIAgent: Π“Π»Π°Π²Π½ΠΈ оркСстратор Π°Π³Π΅Π½Ρ‚Π° који ΡƒΠΏΡ€Π°Π²Ρ™Π° Ρ‚ΠΎΠΊΠΎΠΌ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Π°
  2. ΠŸΡ€ΠΈΠ»Π°Π³ΠΎΡ’Π΅Π½ΠΈ Π°Π»Π°Ρ‚ΠΈ: Π€ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° GetRandomDestination() доступна Π°Π³Π΅Π½Ρ‚Ρƒ
  3. Chat Client: Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ Π·Π° Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ ΠΏΠΎΠ΄Ρ€ΠΆΠ°Π½ GitHub ΠΌΠΎΠ΄Π΅Π»ΠΈΠΌΠ°
  4. ΠŸΠΎΠ΄Ρ€ΡˆΠΊΠ° Π·Π° стриминг: Бпособност Π³Π΅Π½Π΅Ρ€ΠΈΡΠ°ΡšΠ° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π° Ρƒ Ρ€Π΅Π°Π»Π½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Ρƒ

Π¨Π΅ΠΌΠ° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π΅

graph LR
    A[User Request] --> B[AI Agent]
    B --> C[GitHub Models API]
    B --> D[GetRandomDestination Tool]
    C --> E[Travel Itinerary]
    D --> E

πŸš€ ΠŸΠΎΡ‡Π΅Ρ‚Π°ΠΊ Ρ€Π°Π΄Π°

ΠŸΡ€Π΅Π΄ΡƒΡΠ»ΠΎΠ²ΠΈ

ΠŸΠΎΡ‚Ρ€Π΅Π±Π½Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ°

# zsh/bash
export GH_TOKEN=<your_github_token>
export GH_ENDPOINT=https://models.github.ai/inference
export GH_MODEL_ID=openai/gpt-5-mini
# PowerShell
$env:GH_TOKEN = "<your_github_token>"
$env:GH_ENDPOINT = "https://models.github.ai/inference"
$env:GH_MODEL_ID = "openai/gpt-5-mini"

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°

Π”Π° бистС ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°,

# 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@9.*
#:package Microsoft.Agents.AI.OpenAI@1.*-*

using System.ClientModel;
using System.ComponentModel;

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

using OpenAI;

// 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];
}

// Extract configuration from environment variables
// Retrieve the GitHub Models API endpoint, defaults to https://models.github.ai/inference if not specified
// Retrieve the model ID, defaults to openai/gpt-5-mini if not specified
// Retrieve the GitHub token for authentication, throws exception if not specified
var github_endpoint = Environment.GetEnvironmentVariable("GH_ENDPOINT") ?? "https://models.github.ai/inference";
var github_model_id = Environment.GetEnvironmentVariable("GH_MODEL_ID") ?? "openai/gpt-5-mini";
var github_token = Environment.GetEnvironmentVariable("GH_TOKEN") ?? throw new InvalidOperationException("GH_TOKEN is not set.");

// Configure OpenAI Client Options
// Create configuration options to point to GitHub Models endpoint
// This redirects OpenAI client calls to GitHub's model inference service
var openAIOptions = new OpenAIClientOptions()
{
    Endpoint = new Uri(github_endpoint)
};

// Initialize OpenAI Client with GitHub Models Configuration
// Create OpenAI client using GitHub token for authentication
// Configure it to use GitHub Models endpoint instead of OpenAI directly
var openAIClient = new OpenAIClient(new ApiKeyCredential(github_token), openAIOptions);

// Create AI Agent with Travel Planning Capabilities
// Initialize OpenAI client, get chat client for specified model, and create AI agent
// Configure agent with travel planning instructions and random destination tool
// The agent can now plan trips using the GetRandomDestination function
AIAgent agent = openAIClient
    .GetChatClient(github_model_id)
    .CreateAIAgent(
        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. ΠšΠΎΠΌΠΏΠ°Ρ‚ΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ‚ са OpenAI: Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π° GitHub ΠΌΠΎΠ΄Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡˆΠ΅ бСспрСкорно ΠΊΡ€ΠΎΠ· OpenAI-ΠΊΠΎΠΌΠΏΠ°Ρ‚ΠΈΠ±ΠΈΠ»Π½Π΅ API-јС

πŸ”— Π”ΠΎΠ΄Π°Ρ‚Π½ΠΈ рСсурси


ΠžΠ΄Ρ€ΠΈΡ†Π°ΡšΠ΅ ΠΎΠ΄ одговорности:
Овај Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ јС ΠΏΡ€Π΅Π²Π΅Π΄Π΅Π½ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ΠΌ услугС Π·Π° ΠΏΡ€Π΅Π²ΠΎΡ’Π΅ΡšΠ΅ ΠΏΠΎΠΌΠΎΡ›Ρƒ Π²Π΅ΡˆΡ‚Π°Ρ‡ΠΊΠ΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ†ΠΈΡ˜Π΅ Co-op Translator. Иако сС Ρ‚Ρ€ΡƒΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΌΠΎ тачност, ΠΌΠΎΠ»ΠΈΠΌΠΎ вас Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ Ρƒ Π²ΠΈΠ΄Ρƒ Π΄Π° аутоматски ΠΏΡ€Π΅Π²ΠΎΠ΄ΠΈ ΠΌΠΎΠ³Ρƒ садрТати Π³Ρ€Π΅ΡˆΠΊΠ΅ ΠΈΠ»ΠΈ нСтачности. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π½Π° њСговом ΠΈΠ·Π²ΠΎΡ€Π½ΠΎΠΌ Ρ˜Π΅Π·ΠΈΠΊΡƒ Ρ‚Ρ€Π΅Π±Π° сматрати Π°ΡƒΡ‚ΠΎΡ€ΠΈΡ‚Π°Ρ‚ΠΈΠ²Π½ΠΈΠΌ ΠΈΠ·Π²ΠΎΡ€ΠΎΠΌ. Π—Π° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π΅ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡƒΡ‡ΡƒΡ˜Π΅ сС профСсионални ΠΏΡ€Π΅Π²ΠΎΠ΄ ΠΎΠ΄ странС Ρ™ΡƒΠ΄ΠΈ. НС ΠΏΡ€Π΅ΡƒΠ·ΠΈΠΌΠ°ΠΌΠΎ одговорност Π·Π° Π±ΠΈΠ»ΠΎ ΠΊΠ°ΠΊΠ²Π° ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½Π° Ρ‚ΡƒΠΌΠ°Ρ‡Π΅ΡšΠ° ΠΈΠ»ΠΈ нСспоразумС који ΠΌΠΎΠ³Ρƒ настати услСд ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ° ΠΎΠ²ΠΎΠ³ ΠΏΡ€Π΅Π²ΠΎΠ΄Π°.