首页 > 其他分享 >Semantic Kernel入门系列:利用YAML定义prompts functions

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

时间:2024-05-22 09:32:18浏览次数:18  
标签:Yaml kernel functions Semantic Kernel joke yaml prompts

引言

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

本章的我们将学习利用Yaml的格式来定义prompts functionsYAML 是一种结构化数据格式,通过使用它,我们可以将提示的不同部分集中在一个地方,更好地组织和管理代码。这种方法可以提高代码的可读性和维护性,使得对提示模板的修改和更新变得更加简单和高效。

实战

还是跟之前的章节一样,我们通过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 文件

创建文件

image

接下来 鼠标点击joke.yaml文件右键 点击属性,设置文件输出目录

image

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());

输出

image

大功告成!

最后

本章简单的熟悉了一下用Yaml文件来创建prompts functions,用 YAML提示不仅简化了开发过程,还提高了应用程序的可维护性,为以后定义更加复杂的prompts内嵌函数,工作流等又进了一步

标签:Yaml,kernel,functions,Semantic,Kernel,joke,yaml,prompts
From: https://www.cnblogs.com/ruipeng/p/18205081

相关文章

  • 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......
  • [shell:bash] ubuntu_remove_old_kernel_test
    [shell:bash]  ubuntu_remove_old_kernel_test    一、基本信息 1、os:Linuxubuntu6.5.0-35-generic#35-UbuntuSMPPREEMPT_DYNAMICFriApr2611:23:57UTC2024x86_64x86_64x86_64GNU/Linux 2、bash:GNUbash,version5.2.......
  • RCTF 2019]Nextphp 利用phpFFI来绕过 disable_functions限制
    今天做了一道RCE+反序列化的题目,看看吧。进入题目就给出了源码点击查看代码<?phpif(isset($_GET['a'])){eval($_GET['a']);}else{show_source(__FILE__);}Rce看看,发现许多函数都被dis掉了,试试无参数rce。发现了当前目录的一些文件(1.txt是我弄上去的,......
  • CTFHUB-PHP-bypass_disable_functions
    很多可以蚁剑插件自己做,因为本来就是蚁剑实验室的靶场,这里有些也就用手工方法,方便掌握原理。LD_PRELOAD看题目一眼环境变量劫持。蚁剑可以连,但是终端命令全被ban了。访问/?ant=phpinfo();查看禁用函数:pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,......
  • Polynomial growth harmonic functions
    目录DefinitionsandnotationsIintroductionMainresultsMoreoverDefinitionsandnotations\(M\)isacompleteRiemannianmanifold.\(H^d(M):=\{u\inC^{\infty}(M)|\Deltau=0~\text{and}~u(x)=\Omicron(r^d(x))\,\text{as}\,x\to\infty\}\)......
  • Semantic Kernel-1
    入门SemanticKernel:OneApi集成与HelloWorld  合集-AI(2) 1.一键接入大模型:One-Api本地安装配置实操05-072.入门SemanticKernel:OneApi集成与HelloWorld05-08收起 引言从这一章节开始正式进入我们的 SemanticKernel 的学习之旅了。什么是SemanticKer......