You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SemanticKernel 1.0.0-rc4及后续版本如何拦截最终渲染提示词?

在SemanticKernel 1.0.0-rc4及后续版本中拦截最终渲染提示词的方案

SemanticKernel 1.0.0-rc4版本移除了原有的PromptRendered事件,替代方案主要有以下几种:

1. 实现自定义IPromptRenderFilter过滤器

通过实现IPromptRenderFilter接口,可以在提示词渲染的生命周期中拦截最终结果:

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.PromptTemplates;

public class PromptRenderLogger : IPromptRenderFilter
{
    public Task OnPromptRenderAsync(PromptRenderContext context, Func<PromptRenderContext, Task> next)
    {
        // 监听渲染完成事件
        context.RenderedPromptChanged += (_, args) =>
        {
            Console.WriteLine($"最终渲染提示词:\n{args.NewValue}");
        };

        return next(context);
    }
}

注册过滤器到Kernel构建器:

var kernel = Kernel.CreateBuilder()
    .AddOpenAIChatCompletion("gpt-3.5-turbo", "你的API密钥")
    .AddPromptRenderFilter<PromptRenderLogger>()
    .Build();

2. 启用内置日志系统

SemanticKernel会在Debug级别日志中输出渲染后的提示词,只需配置日志输出即可:

using Microsoft.Extensions.Logging;

var kernel = Kernel.CreateBuilder()
    .AddOpenAIChatCompletion("gpt-3.5-turbo", "你的API密钥")
    .AddLogging(config =>
    {
        config.AddConsole();
        config.SetMinimumLevel(LogLevel.Debug);
    })
    .Build();

运行后,控制台日志中会包含标记为Rendered prompt的条目,直接查看即可。

3. 手动获取渲染结果(适用于直接调用模板场景)

如果是手动触发提示词渲染,可以直接获取返回的渲染结果:

var template = kernel.CreatePromptTemplate("问候语:{{$greeting}},姓名:{{$name}}", new PromptTemplateConfig());
var context = kernel.CreateNewContextWithVariables(new() { ["greeting"] = "你好", ["name"] = "李四" });
var renderedPrompt = await template.RenderAsync(context);

Console.WriteLine(renderedPrompt);

内容的提问来源于stack exchange,提问作者mehrandvd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 17:55:58