Semantic Kernel入门系列:利用Handlebars创建Prompts functions
引言
本章我们将学习通过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 Template 在 Semantic Kernel C# 中创建和执行 Prompts functions。Handlebars 提供了强大的模板功能,使我们能够更灵活地生成动态文本输出,从而实现各种定制化的提示函数。通过结合 Handlebars 的模板引擎和 Semantic Kernel 的功能,我们可以构建更智能和交互性强的应用程序,提升用户体验和功能性。
Semantic Kernel入门系列:利用Handlebars创建Prompts functions的更多相关文章
- Semantic Kernel 入门系列:💬Semantic Function
如果把提示词也算作一种代码的话,那么语义技能所带来的将会是全新编程方式,自然语言编程. 通常情况下一段prompt就可以构成一个Semantic Function,如此这般简单,如果我们提前可以组织好 ...
- Semantic Kernel 入门系列:🔥Kernel 内核和🧂Skills 技能
理解了LLM的作用之后,如何才能构造出与LLM相结合的应用程序呢? 首先我们需要把LLM AI的能力和原生代码的能力区分开来,在Semantic Kernel(以下简称SK),LLM的能力称为 sem ...
- Semantic Kernel 入门系列:🥑突破提示词的限制
无尽的上下文 LLM的语言理解和掌握能力在知识内容的解读和总结方面提供了强大的能力. 但是由于训练数据本身来自于公共领域,也就注定了无法在一些小众或者私有的领域能够足够的好的应答. 因此如何给LLM ...
- Semantic Kernel 入门系列:🥑Memory内存
了解的运作原理之后,就可以开始使用Semantic Kernel来制作应用了. Semantic Kernel将embedding的功能封装到了Memory中,用来存储上下文信息,就好像电脑的内存一样 ...
- Semantic Kernel 入门系列:📅 Planner 计划管理
Semantic Kernel 的一个核心能力就是实现"目标导向"的AI应用. 目标导向 "目标导向"听起来是一个比较高大的词,但是却是实际生活中我们处理问题的 ...
- Semantic Kernel 入门系列:🛸LLM降临的时代
不论你是否关心,不可否认,AGI的时代即将到来了. 在这个突如其来的时代中,OpenAI的ChatGPT无疑处于浪潮之巅.而在ChatGPT背后,我们不能忽视的是LLM(Large Language ...
- Semantic Kernel 入门系列:🪄LLM的魔法
ChatGPT 只是LLM 的小试牛刀,让人类能够看到的是机器智能对于语言系统的理解和掌握. 如果只是用来闲聊,而且只不过是将OpenAI的接口封装一下,那么市面上所有的ChatGPT的换皮应用都差不 ...
- Semantic Kernel 入门系列:💾Native Function
语义的归语义,语法的归语法. 基础定义 最基本的Native Function定义只需要在方法上添加 SKFunction 的特性即可. using Microsoft.SemanticKernel. ...
- Semantic Kernel 入门系列:🍋Connector连接器
当我们使用Native Function的时候,除了处理一些基本的逻辑操作之外,更多的还是需要进行外部数据源和服务的对接,要么是获取相关的数据,要么是保存输出结果.这一过程在Semantic Kern ...
- mybatis入门系列一之创建mybatis程序
Mybatis基础系列一 创建第一个mybatis程序 需要配置项 1. 在conf.xml的需要配置配置两个标签数据库连接和mapper,xml文件加载信息 <-- 进行数据库环境参数的配置 ...
随机推荐
- VS Qt扩展插件下载地址
使用vs开发qt项目,需要安装qt插件 QT插件下载地址:https://mirrors.ustc.edu.cn/qtproject/official_releases/vsaddin/
- 挑战吧,HarmonyOS应用开发工程师
一年一度属于工程师的专属节日1024已过,但程序员多重活动持续进行中~ 参与活动即有机会获得HUAWEI Freebuds 5i 耳机等精美礼品! 点击"阅读原文"查看更多活动 ...
- HDC2021技术分论坛:鸿蒙智联设备开发,这五大法宝你应该拥有
作者:zhaowenguang,dinglu, 华为高级工程师 Huawei LiteOS是轻量级的开源物联网操作系统.智能硬件使能平台,可广泛应用于智能家居.穿戴式.车联网.制造业等领域,使物联网终 ...
- 重新整理 .net core 实践篇—————grpc工具[三十四]
前言 简单整理一下grpc工具. 正文 工具核心包: Grpc.Tools 这个是项目要引用的包,用来生成cs代码的. dotnet-grpc 这个就是cli,命令行工具 dotnet-grpc 核心 ...
- c# 多线程传值注意的地方
前言 下面介绍多线程传值的几种方式,并说明注意点. 正文 static void Main(string[] args) { SampleTread thead = new SampleTread(1 ...
- C++ 构造函数实战指南:默认构造、带参数构造、拷贝构造与移动构造
C++ 构造函数 构造函数是 C++ 中一种特殊的成员函数,当创建类对象时自动调用.它用于初始化对象的状态,例如为属性分配初始值.构造函数与类同名,且没有返回值类型. 构造函数类型 C++ 支持多种类 ...
- 力扣585(MySQL)-2016年的投资(中等)
题目: 写一个查询语句,将 2016 年 (TIV_2016) 所有成功投资的金额加起来,保留 2 位小数. 对于一个投保人,他在 2016 年成功投资的条件是: 他在 2015 年的投保额 (TIV ...
- 牛客网-SQL专项训练13
①某软件公司正在升级一套水务管理系统.该系统用于县市级供排水企业.供水厂.排水厂中水务数据的管理工作.系统经重新整合后,开发人员决定不再使用一张备份数据表waterinfo001表,需永久删除.选出符 ...
- 力扣400(java)-第N位数字(中等)
题目: 给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字. 示例 1: 输入:n = 3输出: ...
- anconda配置tensorflow环境
一.anconda的安装 1.进入Anaconda官网并按照电脑配置选择合适的安装包 Anaconda官网:https://www.anaconda.com/ 点击进入 不同的三个版本,分别是wind ...