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

semantic,kernel,handlebars,prompts,functions · 浏览次数 : 0

小编点评

**引言** 本章将通过 Handlebars Prompts Template 创建 Prompts 函数。Handlebars 是一个流行的 JavaScript 模板引擎,用于创建动态 HTML。 **Handlebars 简介** Handlebars 是一个模板和输入对象结合的 JavaScript 模板引擎。它允许您使用简单的占位符在 HTML 中创建动态的 HTML。 **Handlebars Prompts Templates** Handlebars Prompts Templates 是一个用于创建 Prompt 函数的模板引擎。它提供以下功能: * 创建不同的模板格式 * 定义输入变量 * 设置执行设置 **创建 Prompts 函数** 可以使用 `kernel.CreateFunctionFromPrompt()` 方法创建 Prompts 函数。该方法接受一个 `PromptTemplateConfig` 对象作为参数。 **示例** 以下是一个示例模板: ``` <message role="system">Instructions: What is the intent of this request? <message role="user">{{request}} ``` 该模板定义了两个消息,每个消息对应一个角色(`system` 和 `user`)。当用户输入文本时,模板将填充 `request` 变量的值。 **执行 Prompts 函数** 可以使用 `InvokeAsync()` 方法执行 Prompts 函数。该方法接受一个 `KernelArguments` 对象作为参数,其中包含要执行函数的参数。 **总结** Handlebars Prompts Templates 是一个用于创建动态 HTML 的便捷工具。通过使用模板和输入变量,您可以轻松创建各种提示函数。这种函数可以帮助您实现更智能和交互性强的应用程序,提升用户体验和功能性。

正文

引言

本章我们将学习通过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相似的内容:

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

引言 本章我们将学习通过Handlebars Prompts Template来创建Prompts functions。 什么是Handlebars? Handlebars是一个流行的 JavaScript 模板引擎,它允许你通过在 HTML 中使用简单的占位符来创建动态的 HTML。 它使用模板和

Semantic Kernel入门系列:利用YAML定义prompts functions

引言 在上一章节我们熟悉了prompts functions(提示函数)的创建,我们了解了PromptTemplateConfig中各个属性的简单使用。Semantic Kernel允许我们利用多种方式去创建prompts包括native functions,prompts functions或者也

Semantic Kernel入门系列:通过依赖注入管理对象和插件

前言 本章讲一下在Semantic Kernel中使用DependencyInject(依赖注入),在之前的章节我们都是通过手动创建Kernel对象来完成框架的初始化工作,今天我们用依赖注入的方式来实现。 实战 定义Native Plugins 我们用官网的LightPlugins插件来演示依赖注入

.NET周报 【4月第3期 2023-04-15】

国内文章 Semantic Kernel 入门系列:📅 Planner 规划器 https://www.cnblogs.com/xbotter/p/semantic_kernel_introduction_planner.html 本文介绍了Semantic Kernel的一个核心能力,即实现目标

(1)semantic-kernel入门课程

(1)semantic-kernel入门课程 获取OpenAI在线API 由于在国内的限制,我们并没有办法直接访问OpenAI,所以下面的教程我们会推荐使用https://api.token-ai.cn,然后您需要在这个网站中注册一个账号,并且创建一个令牌(最好是设置无限额度和无过期时间),创建好的

入门Semantic Kernel:OneApi集成与HelloWorld

引言 从这一章节开始正式进入我们的 Semantic Kernel 的学习之旅了。 什么是Semantic Kernel? Semantic Kernel是一个轻量级的开源框架,通过 Semantic Kernel 可以快速使用不同编程语言(C#/Python/Java)结合 LLMs(OpenAI

如何让其他模型也能在SemanticKernel中调用本地函数

在SemanticKernel的入门例子中: // Import packages using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.ChatCompletion; using Microsoft.SemanticKerne

探索Semantic Kernel内置插件:深入了解HttpPlugin的应用

前言 上一章我们熟悉了Semantic Kernel中的内置插件和对ConversationSummaryPlugin插件进行了实战,本章我们讲解一下另一个常用的内置插件HttpPlugin的应用。 上一章对ConversationSummaryPlugin总结进行了调整之后,顺便给Semantic

探索Semantic Kernel内置插件:深入了解ConversationSummaryPlugin的应用

前言 经过前几章的学习我们已经熟悉了Semantic Kernel 插件的概念,以及基于Prompts构造的Semantic Plugins和基于本地方法构建的Native Plugins。本章我们来讲解一下在Semantic Kernel 中内置的一些插件,让我们避免重复造轮子。 内置插件 Sem

.NET 6+Semantic Kernel快速接入OpenAI接口

Semantic Kernel 与 LangChain 类似,但 Semantic Kernel 是为应用开发开发人员创建的SDK项目,它支持.NET, Python 以及 Java,但是对.NET支持最成熟(微软自家孩子嘛),可以让你的应用很轻易的集成AI大语言模型。今天我们快速地使用Semant...