// Copyright (c) Microsoft. All rights reserved. using Azure.AI.OpenAI; using Azure.Identity; using Microsoft.Agents.AI; using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Agents; using Microsoft.SemanticKernel.Connectors.OpenAI; using OpenAI.Chat; var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set."); var deploymentName = System.Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o"; var userInput = "Tell me a joke about a pirate."; Console.WriteLine($"User Input: {userInput}"); await SKAgent(); await SKAgent_As_AFAgentAsync(); await AFAgent(); async Task SKAgent() { Console.WriteLine("\n=== SK Agent ===\n"); var builder = Kernel.CreateBuilder().AddAzureOpenAIChatClient(deploymentName, endpoint, new AzureCliCredential()); var agent = new ChatCompletionAgent() { Kernel = builder.Build(), Name = "Joker", Instructions = "You are good at telling jokes.", }; var thread = new ChatHistoryAgentThread(); var settings = new OpenAIPromptExecutionSettings() { MaxTokens = 1000 }; var agentOptions = new AgentInvokeOptions() { KernelArguments = new(settings) }; await foreach (var result in agent.InvokeAsync(userInput, thread, agentOptions)) { Console.WriteLine(result.Message); } Console.WriteLine("---"); await foreach (var update in agent.InvokeStreamingAsync(userInput, thread, agentOptions)) { Console.Write(update.Message); } } // Example of Semantic Kernel Agent code converted as an Agent Framework Agent async Task SKAgent_As_AFAgentAsync() { Console.WriteLine("\n=== SK Agent Converted as an AF Agent ===\n"); var builder = Kernel.CreateBuilder().AddAzureOpenAIChatClient(deploymentName, endpoint, new AzureCliCredential()); #pragma warning disable SKEXP0110 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed. var agent = new ChatCompletionAgent() { Kernel = builder.Build(), Name = "Joker", Instructions = "You are good at telling jokes.", }.AsAIAgent(); #pragma warning restore SKEXP0110 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed. var thread = await agent.CreateSessionAsync(); var agentOptions = new ChatClientAgentRunOptions(new() { MaxOutputTokens = 1000 }); var result = await agent.RunAsync(userInput, thread, agentOptions); Console.WriteLine(result); Console.WriteLine("---"); await foreach (var update in agent.RunStreamingAsync(userInput, thread, agentOptions)) { Console.Write(update); } } async Task AFAgent() { Console.WriteLine("\n=== AF Agent ===\n"); var agent = new AzureOpenAIClient(new Uri(endpoint), new AzureCliCredential()).GetChatClient(deploymentName) .AsAIAgent(name: "Joker", instructions: "You are good at telling jokes."); var thread = await agent.CreateSessionAsync(); var agentOptions = new ChatClientAgentRunOptions(new() { MaxOutputTokens = 1000 }); var result = await agent.RunAsync(userInput, thread, agentOptions); Console.WriteLine(result); Console.WriteLine("---"); await foreach (var update in agent.RunStreamingAsync(userInput, thread, agentOptions)) { Console.Write(update); } }