首页 > 其他分享 >Semantic Kernel入门系列:利用Handlebars创建Prompts functions

Semantic Kernel入门系列:利用Handlebars创建Prompts functions

时间:2024-05-23 09:08:41浏览次数:15  
标签:Kernel functions Semantic Handlebars 创建 request Prompts new 模板

引言

本章我们将学习通过Handlebars Prompts Template来创建Prompts functions

什么是Handlebars

Handlebars是一个流行的 JavaScript 模板引擎,它允许你通过在 HTML 中使用简单的占位符来创建动态的 HTML

它使用模板和输入对象来生成 HTML 或其他文本格式。Handlebars 模板看起来像常规的文本,但是它带有嵌入式的 Handlebars 表达式 。

<p>{{firstname}} {{lastname}}</p>

有关Handlebars语法更详细的介绍请参考:
Handlebars 中文文档 | Handlebars 中文网

实战

创建项目

VS 创建控制台应用程序,右键管理用户机密,添加我们大模型的应用配置

{
  "OneApiSpark": {
    "Endpoint": "http://localhost:3000",
    "ModelId": "SparkDesk-v3.5",
    "ApiKey": "sk-LAYzQaWssCYYEVHP1d6a3fFa111745249e94F0364a0cF37c"
  }
}

安装 Nuget 包

PM> NuGet\Install-Package Microsoft.SemanticKernel -Version 1.13.0
PM> NuGet\Install-Package Microsoft.SemanticKernel.PromptTemplates.Handlebars -Version 1.13.0

使用 HandleBars PromptsTemplates

var template =
            """
            <message role="system">Instructions: What is the intent of this request?</message>
            <message role="user">{{request}}</message>
            """;

之前的文章介绍过创建Prompts functions有两种模板的格式化引擎,第一种是默认的模板格式叫semantic-kernel,第二种就是本章介绍的handlebars

创建提示函数

var kernelFunction = kernel.CreateFunctionFromPrompt(new PromptTemplateConfig()
{
    Name = "getIntent",
    Description = "Understand the user's input intent.",
    TemplateFormat = HandlebarsPromptTemplateFactory.HandlebarsTemplateFormat,
    Template = template,
    InputVariables = [
 new() { Name = "request", Description = "User's request.", IsRequired = true },
          //new() { Name = "history", Description = "Historical message record.", IsRequired = true },
        ],
    ExecutionSettings = new Dictionary<string, PromptExecutionSettings>() {
               {
                      OpenAIPromptExecutionSettings.DefaultServiceId ,//"default"
                        new OpenAIPromptExecutionSettings()
                        {
                            MaxTokens = 2048,
                            Temperature = 0.6
                        }
                    },
        }
}, promptTemplateFactory: new HandlebarsPromptTemplateFactory());

跟默认的相比有两个点需要注意

  • TemplateFormat属性
 TemplateFormat= HandlebarsPromptTemplateFactory.HandlebarsTemplateFormat,
  • CreateFunctionFromPrompt方法的promptTemplateFactory参数
promptTemplateFactory: new HandlebarsPromptTemplateFactory()

要用HandlebarsPromptTemplateFactory工厂替换默认的格式化工厂

执行函数

string request = "I want to send an email to the marketing team celebrating their recent milestone.";
var result = await kernelFunction.InvokeAsync(kernel, new KernelArguments() { { "request", request } });
Console.WriteLine(result.ToString());

输出

The intent of this request is to send an email to the marketing team to celebrate their recent milestone.

最后

通过本章的学习,我们掌握了如何利用 Handlebars Prompts TemplateSemantic Kernel C# 中创建和执行 Prompts functionsHandlebars 提供了强大的模板功能,使我们能够更灵活地生成动态文本输出,从而实现各种定制化的提示函数。通过结合 Handlebars 的模板引擎和 Semantic Kernel 的功能,我们可以构建更智能和交互性强的应用程序,提升用户体验和功能性。

本文源代码

标签:Kernel,functions,Semantic,Handlebars,创建,request,Prompts,new,模板
From: https://www.cnblogs.com/ruipeng/p/18207414

相关文章

  • 2022-05-18-空间静态kernel核密度、空间动态kernel核密度工具更新
    在前版本基础上,针对有用户反映当数据有极端大的异常值时,画出的图不美观,具体表现在等高线集中在某一小块区域的问题,对此做出改进如下:增加坐标轴范围的选项,该选项的范围为1-100,代表将数据从小到大排列后,取前百分之多少的量,以剔除极端大值。当数据中没有极端大值时,该项填100,当极端大......
  • 2022-05-07-无条件、空间静态、空间动态kernel核密度工具
    今天要介绍的是一个目前论文中常用到的方法:无条件kernel核密度、空间静态kernel核密度和空间动态kernel核密度。Kernel核密度估计属于非参数估计方法,不过分依赖模型,可以用来研究各地区的不平衡分布问题。假设f(x)是随机变量X的的密度函数,Xi为独立同分布的观测值,x为均值,h为带宽。......
  • chapter-1 start_kernel() part-2
    接下来解释一下函数jump_lable_init()parse_early_param()random_init_early(command_line)setup_log_buf(0)vfs_caches_init_early()sort_main_extable()trap_init()//important!mm_core_init()poking_init()ftrace_init()early_trace_init()sched_init()//impor......
  • Notes: Understanding the linux kernel Chapter 8 Memory Management
    dynamicmemoryPageFrameManagementPageDescriptorsusedtodistinguishthepageframesthatareusedtocontainpagesthatbelongtoprocessesfromthosethatcontainkernelcodeorkerneldatastructures.Similarly,itmustbeabletodeterminewhet......
  • Semantic Kernel入门系列:利用YAML定义prompts functions
    引言在上一章节我们熟悉了promptsfunctions(提示函数)的创建,我们了解了PromptTemplateConfig中各个属性的简单使用。SemanticKernel允许我们利用多种方式去创建prompts包括nativefunctions,promptsfunctions或者也叫Semanticfunctions,和Yaml文件等。本章的我们将学习利......
  • C++ Virtual Functions
    Virtual这个关键字在多态中扮演一个绝对重要的角色,只要memberfunctions声明的前面加上virtual的关键字,他就会成为 Virtualmemberfunctions。任何一个class如果拥有virtualfunctions,就可以得到C++编译器的虚拟机制(virtualmechanism)的服务。这个class的所有derivedclass......
  • chapter-1 start_kernel() part-1
    linuxkernelv6.6.31(LTS)start_kernel()的实现在/init/main.casmlinkage__visible__init__no_sanitize_address__noreturn__no_stack_protectorvoidstart_kernel(void)先解释一手上面一大串宏的作用:asmlinkage:这是一个汇编语言链接约定,用于告诉编译器这个函数的......
  • JavaScript execute asynchronous functions in Parallel with count and Promise All
    JavaScriptexecuteasynchronousfunctionsinParallelwithcountandPromiseAllInOneJavaScript使用count和Promise并行执行异步函数errorsfunctionpromiseAll<T>(functions:Fn<T>[]):Promise<T[]>{returnnewPromise((resolve,reject)=&......
  • 深入学习Semantic Kernel:创建和配置prompts functions
    引言上一章我们熟悉了一下SemanticKernel的理论知识,Kernel创建以及简单的Sample熟悉了一下SK的基本使用。在SemanticKernel中的kernelfunctions由两部分组成第一部分是promptsfunctions(提示函数),第二部分Nativefunction(原生函数),kernelfunctions是构成插件(Plu......
  • AoPS - Chapter 7 Functions
    这一章主要讲解函数的运算与函数方程求解。函数的运算对于函数\(f\),若函数\(g\)满足对任意\(x\)有\(g(f(x))=x\),则\(g\)为\(f\)的反函数(Inverse)。若函数\(h\)满足对于任意\(x\)有\(h(x)=g(f(x))\),则\(h\)为\(f\)与\(g\)的复合(composition),记为\(h=g......