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[Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ GetRandomDestination]
    C --> E[План Π·Π° ΠΏΡŠΡ‚ΡƒΠ²Π°Π½Π΅]
    D --> E

πŸš€ Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΈ изисквания

Π—Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° срСдата

# zsh/bash
export AZURE_OPENAI_ENDPOINT=https://<your-resource>.openai.azure.com
export AZURE_OPENAI_DEPLOYMENT=gpt-4.1-mini
# Π’Π»Π΅Π·Ρ‚Π΅, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ AzureCliCredential Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€
az login
# PowerShell
$env:AZURE_OPENAI_ENDPOINT = "https://<your-resource>.openai.azure.com"
$env:AZURE_OPENAI_DEPLOYMENT = "gpt-4.1-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-4.1-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. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ сС стрСмим към точност, моля ΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π²ΠΎΠ΄ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈΠ»ΠΈ нСточности. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π½Π° нСговия Ρ€ΠΎΠ΄Π΅Π½ Π΅Π·ΠΈΠΊ трябва Π΄Π° сС счита Π·Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π΅Π½ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ. Π—Π° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π° информация сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° профСсионалСн Ρ‡ΠΎΠ²Π΅ΡˆΠΊΠΈ ΠΏΡ€Π΅Π²ΠΎΠ΄. НиС Π½Π΅ носим отговорност Π·Π° ΠΊΠ°ΠΊΠ²ΠΈΡ‚ΠΎ ΠΈ Π΄Π° Π΅ нСдоразумСния ΠΈΠ»ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈ Ρ‚ΡŠΠ»ΠΊΡƒΠ²Π°Π½ΠΈΡ, ΠΏΡ€ΠΎΠΈΠ·Ρ‚ΠΈΡ‡Π°Ρ‰ΠΈ ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€Π΅Π²ΠΎΠ΄.