Semantic Kernel入门系列:使用YAML界说prompts functions
导言
在上一章节咱们了解了prompts functions
(提示函数)的创立,咱们了解了PromptTemplateConfig
中各个特点的简略运用。Semantic Kernel
答应咱们使用多种办法去创立prompts
包含native functions
,prompts functions
或许也叫Semantic functions
,和Yaml 文件
等。
本章的咱们将学习使用Yaml
的格局来界说prompts functions
。YAML
是一种结构化数据格局,经过运用它,咱们能够将提示的不同部分会集在一个当地,更好地安排和办理代码。这种办法能够进步代码的可读性和保护性,使得对提示模板的修正和更新变得愈加简略和高效。
实战
仍是跟之前的章节相同,咱们经过OneApi+星火讯飞v3.5
进行咱们的Semantic Kernel
的学习,详细装备能够翻翻我前几章内容。
创立项目
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.Yaml -Version 1.13.0
创立 Yaml 文件
创立文件
接下来 鼠标点击joke.yaml
文件右键 点击特点,设置文件输出目录
Yaml 文件编写
咱们将编写一个简略的提示函数,意图是生成笑话。yaml
文件的内容其实便是咱们上一篇解说的PromptTemplateConfig
函数的 yaml
的表达形式。找到咱们上一章节的PromptTemplateConfig
的创立加深了解
var kernelFunctions = kernel.CreateFunctionFromPrompt(new PromptTemplateConfig()
{
Name = "intent",
Description = "use assistant to understand user input intent.",
TemplateFormat = PromptTemplateConfig.SemanticKernelTemplateFormat,//此处能够省掉默许便是"semantic-kernel"
Template = "What is the intent of this request? {{$request}}",
InputVariables = [new() { Name = "request", Description = "The user's request.", IsRequired = true }],
ExecutionSettings = new Dictionary<string, PromptExecutionSettings>() {
{
OpenAIPromptExecutionSettings.DefaultServiceId ,//"default"
new OpenAIPromptExecutionSettings()
{
MaxTokens = 1024,
Temperature = 0
}
},
}
});
那开端编写咱们的 yaml
name: GenerateJoke
template: |
Tell me a joke about {{$topic}} that is {{$length}} sentences long.
template_format: semantic-kernel
description: A function that generates a joke about a topic.
input_variables:
- name: topic
description: The topic of the joke.
is_required: true
- name: length
description: The number of sentences in the joke.
is_required: true
output_variable:
description: The generated joke.
execution_settings:
default:
temperature: 0.9
max_token: 1024
经过PromptTemplateConfig
目标来了解就能够事半功倍了,写 yaml 彻底没压力,里边的每一个特点细节在上一章节都有介绍,不了解的能够去上一章阅览一下。
SK 创立 prompts functions
//界说kernel 目标
var kernel = Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId: config.ModelId,
apiKey: config.ApiKey,
httpClient: client).Build();
//读取yaml文件地址
var yamlDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins", "Yaml", "joke.yaml");
var promptYaml = await File.ReadAllTextAsync(yamlDirectory);
KernelFunction jokeFunc = kernel.CreateFunctionFromPromptYaml(promptYaml);
KernelArguments kernelArgs = new KernelArguments()
{
{"topic","apple"},
{"length","5"},
};
// 用内核调用函数并供给kernelArguments
FunctionResult results = await jokeFunc.InvokeAsync(kernel, kernelArgs);
Console.WriteLine(results.ToString());
输出
功德圆满!
最终
本章简略的了解了一下用Yaml
文件来创立prompts functions
,用 YAML
提示不只简化了开发进程,还进步了使用程序的可保护性,为今后界说愈加杂乱的prompts
内嵌函数,工作流等又进了一步 😃。
参考文献
yaml-prompts-with-semantic-kernel
本文源代码
😄欢迎重视笔者大众号一同学习沟通,获取更多有用的常识~