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.")] staticstringGetRandomDestination() { // 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") ?? thrownew 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 awaitforeach (var update in agent.RunStreamingAsync("Plan me a day trip")) { await Task.Delay(10); Console.Write(update); }
🎓 要点
代理架构:Microsoft Agent Framework 提供了一种干净、类型安全的方法来在 .NET 中构建 AI 代理