1using Microsoft.SemanticKernel;
2using Microsoft.SemanticKernel.Connectors.OpenAI;
3using System.ComponentModel;
4
5// 1. Build a Kernel with Azure OpenAI
6var builder = Kernel.CreateBuilder();
7builder.AddAzureOpenAIChatCompletion(
8 deploymentName: "gpt-4o-mini",
9 endpoint: Environment.GetEnvironmentVariable("AOAI_ENDPOINT")!,
10 apiKey: Environment.GetEnvironmentVariable("AOAI_KEY")!);
11
12// 2. Author a plugin with [KernelFunction]
13public class SalesPlugin
14{
15 [KernelFunction]
16 [Description("Get total revenue for a region in a quarter")]
17 public Task<decimal> GetRevenueAsync(
18 [Description("Region, e.g. EMEA")] string region,
19 [Description("Quarter, e.g. Q3-2025")] string quarter)
20 {
21 // Real impl would hit a DB
22 return Task.FromResult(region == "EMEA" ? 1_200_000m : 850_000m);
23 }
24}
25
26// 3. Register the plugin
27builder.Plugins.AddFromType<SalesPlugin>();
28var kernel = builder.Build();
29
30// 4. Auto function-calling
31var settings = new OpenAIPromptExecutionSettings {
32 ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions,
33};
34var result = await kernel.InvokePromptAsync(
35 "What was EMEA revenue in Q3-2025? Compare to APAC.",
36 new(settings));
37
38// 5. Typed result
39Console.WriteLine(result.GetValue<string>());