引言

本章我们将学习通过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 的功能,我们可以构建更智能和交互性强的应用程序,提升用户体验和功能性。

本文源代码

Semantic Kernel入门系列:利用Handlebars创建Prompts functions的更多相关文章

  1. Semantic Kernel 入门系列:💬Semantic Function

    如果把提示词也算作一种代码的话,那么语义技能所带来的将会是全新编程方式,自然语言编程. 通常情况下一段prompt就可以构成一个Semantic Function,如此这般简单,如果我们提前可以组织好 ...

  2. Semantic Kernel 入门系列:🔥Kernel 内核和🧂Skills 技能

    理解了LLM的作用之后,如何才能构造出与LLM相结合的应用程序呢? 首先我们需要把LLM AI的能力和原生代码的能力区分开来,在Semantic Kernel(以下简称SK),LLM的能力称为 sem ...

  3. Semantic Kernel 入门系列:🥑突破提示词的限制

    无尽的上下文 LLM的语言理解和掌握能力在知识内容的解读和总结方面提供了强大的能力. 但是由于训练数据本身来自于公共领域,也就注定了无法在一些小众或者私有的领域能够足够的好的应答. 因此如何给LLM ...

  4. Semantic Kernel 入门系列:🥑Memory内存

    了解的运作原理之后,就可以开始使用Semantic Kernel来制作应用了. Semantic Kernel将embedding的功能封装到了Memory中,用来存储上下文信息,就好像电脑的内存一样 ...

  5. Semantic Kernel 入门系列:📅 Planner 计划管理

    Semantic Kernel 的一个核心能力就是实现"目标导向"的AI应用. 目标导向 "目标导向"听起来是一个比较高大的词,但是却是实际生活中我们处理问题的 ...

  6. Semantic Kernel 入门系列:🛸LLM降临的时代

    不论你是否关心,不可否认,AGI的时代即将到来了. 在这个突如其来的时代中,OpenAI的ChatGPT无疑处于浪潮之巅.而在ChatGPT背后,我们不能忽视的是LLM(Large Language ...

  7. Semantic Kernel 入门系列:🪄LLM的魔法

    ChatGPT 只是LLM 的小试牛刀,让人类能够看到的是机器智能对于语言系统的理解和掌握. 如果只是用来闲聊,而且只不过是将OpenAI的接口封装一下,那么市面上所有的ChatGPT的换皮应用都差不 ...

  8. Semantic Kernel 入门系列:💾Native Function

    语义的归语义,语法的归语法. 基础定义 最基本的Native Function定义只需要在方法上添加 SKFunction 的特性即可. using Microsoft.SemanticKernel. ...

  9. Semantic Kernel 入门系列:🍋Connector连接器

    当我们使用Native Function的时候,除了处理一些基本的逻辑操作之外,更多的还是需要进行外部数据源和服务的对接,要么是获取相关的数据,要么是保存输出结果.这一过程在Semantic Kern ...

  10. mybatis入门系列一之创建mybatis程序

    Mybatis基础系列一 创建第一个mybatis程序 需要配置项 1. 在conf.xml的需要配置配置两个标签数据库连接和mapper,xml文件加载信息 <-- 进行数据库环境参数的配置 ...

随机推荐

  1. js调用摄像头,实现简单的视频展台软件

    参考文档: web api:https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices codeantenna:https://code ...

  2. 数据驱动ddt简单使用

    安装 pip install ddt 数据驱动 ddt  可以使用的地方很多 比如: 1. 做接口测试的参数化 2. 读取自动化测试关键字模型的测试用例 等 demo import ddt, unit ...

  3. 踩坑指南:入门OpenTenBase之监控篇

    本次监控将采用Prometheus.Grafana可视化工具以及postgres_exporter对OpenTenBase进行全面监控和优化. 安装监控 Docker安装 1.Docker要求 Cen ...

  4. 重新点亮linux 命令树————文件权限和目录权限[九]

    前言 简单整理一下文件权限和目录权限. 正文 当打开ls -al的时候会出现相关的权限信息. 那么上面文件类型包括: 普通文件 d 目录文件 b 块特殊文件 (设备,比如u盘) c 字符特殊文件 (终 ...

  5. 什么是ip协议一

    前言 两节结束,为网络底层系列做铺垫. 首先来看一张图: IOS有七层,但是我们可以简化层4层,ip属于传输层,可以说是非常重要,下面简单的做一个介绍. 正文 ip的介绍: 1.ip是tcp/ip 协 ...

  6. Bogus 实战:使用 Bogus 和 EFCore 生成模拟数据和种子数据【完整教程】

    引言 上一章我们介绍了在xUnit单元测试中用xUnit.DependencyInject来使用依赖注入,上一章我们的Sample.Repository仓储层有一个批量注入的接口没有做单元测试,今天用 ...

  7. Tencent 闲聊对话机器人接口调用,画像:设计员小白

    from datetime import datetime import time import requests from hashlib import md5 from urllib import ...

  8. 力扣597(MySQL)-好友申请Ⅰ:总体通过率(简单)

    题目: 此表没有主键,它可能包含重复项.该表包含发送请求的用户的 ID ,接受请求的用户的 ID 以及请求的日期. 此表没有主键,它可能包含重复项.该表包含发送请求的用户的 ID ,接受请求的用户的 ...

  9. 飞桨PaddlePaddle的安装

    飞桨PaddlePaddle的安装 MacOS 下的 PIP 安装 一.环境准备 1.1 如何查看您的环境 可以使用以下命令查看本机的操作系统和位数信息: uname -m && ca ...

  10. 跨全端SDK技术演进

    简介: 细想,团队进行跨平台开发已有三年有余,也是集团里面C++方向里比较早涉及该领域的部门之一,伴随业界跨平台技术发展与演进,我们也沉淀了一整套基于C++的跨平台技术体系,本文将以消息SDK为例,详 ...