ai-agents-for-beginners

ЁЯМН Microsoft Agent Framework (.NET) рд╕рд╣ AI рдЯреНрд░реЕрд╡реНрд╣рд▓ рдПрдЬрдВрдЯ

ЁЯУЛ рдкрд░рд┐рд╕реНрдерд┐рддреА рдЕрд╡рд▓реЛрдХрди

рд╣рд╛ рдЙрджрд╛рд╣рд░рдг Microsoft Agent Framework for .NET рд╡рд╛рдкрд░реВрди рдмреБрджреНрдзрд┐рдорд╛рди рдЯреНрд░реЕрд╡реНрд╣рд▓ рдирд┐рдпреЛрдЬрди рдПрдЬрдВрдЯ рдХрд╕рд╛ рдмрдирд╡рд╛рдпрдЪрд╛ рдпрд╛рдЪреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЛ. рд╣рд╛ рдПрдЬрдВрдЯ рдЬрдЧрднрд░рд╛рддреАрд▓ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реНрдерд│рд╛рдВрд╕рд╛рдареА рд╡реИрдпрдХреНрддрд┐рдХреГрдд рджрд┐рд╡рд╕рднрд░рд╛рдЪреНрдпрд╛ рд╕рд╣рд▓реАрдВрдЪреНрдпрд╛ рдЖрд░рд╛рдЦрдбреНрдпрд╛рдВрдирд╛ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ.

рдореБрдЦреНрдп рдХреНрд╖рдорддрд╛:

ЁЯФз рддрд╛рдВрддреНрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛

рдореБрдЦреНрдп рддрдВрддреНрд░рдЬреНрдЮрд╛рди

рдореБрдЦреНрдп рдШрдЯрдХ

  1. AIAgent: рдореБрдЦреНрдп рдПрдЬрдВрдЯ рдЬреЗ рд╕рдВрднрд╛рд╖рдг рдкреНрд░рд╡рд╛рд╣ рд╣рд╛рддрд╛рд│рддреЗ
  2. рд╕рд╛рдиреБрдХреВрд▓ рд╕рд╛рдзрдиреЗ: рдПрдЬрдВрдЯрд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз GetRandomDestination() рдлрдВрдХреНрд╢рди
  3. Responses Client: 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-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

рдирдореБрдирд╛ рдХреЛрдб

рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА,

# рдЭрд╢/рдмрд╛рд╢
chmod +x ./01-dotnet-agent-framework.cs
./01-dotnet-agent-framework.cs

рдХрд┐рдВрд╡рд╛ рдбреЙрдЯрдиреЗрдЯ 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 .NET рдордзреНрдпреЗ AI рдПрдЬрдВрдЯ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрд╡рдЪреНрдЫ, рдЯрд╛рдЗрдк-рд╕реЗрдл рдкрджреНрдзрдд рджреЗрддреЗ
  2. рд╕рд╛рдзрди рдПрдХрддреНрд░реАрдХрд░рдг: [Description] рдЕреЕрдЯреНрд░рд┐рдмреНрдпреБрдЯрд╕рд╣ рд╕рдЬрд╡рд▓реЗрд▓реНрдпрд╛ рдлрдВрдХреНрд╢рдиреНрд╕ рдПрдЬрдВрдЯрд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз рд╕рд╛рдзрдиреЗ рдмрдирддрд╛рдд
  3. рд╕рдВрд░рдЪрдирд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди: рд╡рд╛рддрд╛рд╡рд░рдгрд╛рддреАрд▓ рдЪрд▓ рдЖрдгрд┐ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреНрд░реЗрдбреЗрдиреНрд╢рд┐рдпрд▓ рд╣рд╛рддрд╛рд│рдгреА .NET рд╕рд░реНрд╡реЛрддреНрддрдо рдкрджреНрдзрддреАрдВрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ
  4. Azure OpenAI Responses API: рдПрдЬрдВрдЯ Azure.AI.OpenAI SDK рдорд╛рд░реНрдлрдд Azure OpenAI Responses API рд╡рд╛рдкрд░рддреЛ

ЁЯФЧ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрд░реЛрдд


рдЕрд╕реНрд╡реАрдХрд░рдг: рд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ Co-op Translator рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЕрдиреБрд╡рд╛рджрд┐рдд рдХреЗрд▓рд╛ рдЖрд╣реЗ. рдЬрд░реА рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрди рдХрд░рддреЛ, рддрд░реА рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪреА рдХрдорддрд░рддрд╛ рдЕрд╕реВ рд╢рдХрддреЗ. рдореВрд│ рджрд╕реНрддрдРрд╡рдЬ рддреНрдпрд╛рдЪреНрдпрд╛ рдореВрд│ рднрд╛рд╖реЗрдд рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ. рдорд╣рддреНрддреНрд╡рд╛рдЪреА рдорд╛рд╣рд┐рддреА рдЕрд╕рд▓реНрдпрд╛рд╕, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рдореБрд│реЗ рдЙрджреНрднрд╡рдгрд╛рд▒реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд▓рд╛рд╡рдгреАрд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рдирд╛рд╣реА.