namespace SemanticKernelStudy.Test; /// /// /// public class TryTest { //推荐:Xunit.DependencyInjection.Logging 库,与 Microsoft.Extensions.Logging 集成 private readonly ILogger _logger; public TryTest(ILogger logger) { _logger = logger; } [Fact] public void Try_SK_Test() { KernelFunction f1 = KernelFunctionFactory.CreateFromPrompt("河南省会在哪里?"); KernelFunction f2 = KernelFunctionFactory.CreateFromMethod(() => "河南省会在郑州"); KernelFunction f3 = KernelFunctionFactory.CreateFromPrompt(string.Empty); } [Fact] public async Task Try_SK_Filter_Test() { var builder = Kernel.CreateBuilder(); // This filter overrides result with "Result from filter" value. builder.Services.AddSingleton(); var kernel = builder.Build(); var function = KernelFunctionFactory.CreateFromMethod(() => "Result from method"); var result = await kernel.InvokeAsync(function); Console.WriteLine(result); Console.WriteLine($"Metadata: {string.Join(",", result.Metadata!.Select(kv => $"{kv.Key}: {kv.Value}"))}"); } [Fact] public async Task Try_SK_Filter2_Test() { var builder = Kernel.CreateBuilder(); // This filter overrides result with "Result from filter" value. builder.Services.AddSingleton(); var kernel = builder.Build(); var function = KernelFunctionFactory.CreateFromMethod(() => "Result from method"); var result = await kernel.InvokeAsync(function); Console.WriteLine(result); Console.WriteLine($"Metadata: {string.Join(",", result.Metadata!.Select(kv => $"{kv.Key}: {kv.Value}"))}"); } [Fact] public void Try_Logger_Test() { var msg = "使用 Xunit.DependencyInjection 实现的 {abc} 输出测试内容"; _logger.LogInformation(msg); Assert.True(true, msg); } private sealed class FunctionFilterExample : IFunctionInvocationFilter { public async Task OnFunctionInvocationAsync(Microsoft.SemanticKernel.FunctionInvocationContext context, Func next) { // Example: override kernel arguments context.Arguments["input"] = "new input"; // This call is required to proceed with next filters in pipeline and actual function. // Without this call next filters and function won't be invoked. await next(context); // Example: get function result value var value = context.Result!.GetValue(); // Example: get token usage from metadata var usage = context.Result.Metadata?["Usage"]; // Example: override function result value and metadata Dictionary metadata = context.Result.Metadata is not null ? new(context.Result.Metadata) : []; metadata["metadata_key"] = "metadata_value"; context.Result = new FunctionResult(context.Result, "Result from filter") { Metadata = metadata }; } } }