经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » 人工智能基础 » 查看文章
Semantic Kernel入门系列:利用YAML定义prompts functions
来源:cnblogs  作者:董瑞鹏  时间:2024/5/22 9:36:05  对本文有异议

引言

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

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

实战

还是跟之前的章节一样,我们通过OneApi+星火讯飞v3.5进行我们的Semantic Kernel的学习,具体配置可以翻翻我前几章内容。

创建项目

VS 创建控制台应用程序,右键管理用户机密,添加我们大模型的应用配置

  1. {
  2. "OneApiSpark": {
  3. "Endpoint": "http://localhost:3000",
  4. "ModelId": "SparkDesk-v3.5",
  5. "ApiKey": "sk-LAYzQaWssCYYEVHP1d6a3fFa111745249e94F0364a0cF37c"
  6. }
  7. }

安装 Nuget 依赖

  1. PM> NuGet\Install-Package Microsoft.SemanticKernel -Version 1.13.0
  1. PM> NuGet\Install-Package Microsoft.SemanticKernel.Yaml -Version 1.13.0

创建 Yaml 文件

创建文件

image

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

image

Yaml 文件编写

我们将编写一个简单的提示函数,目的是生成笑话。
yaml文件的内容其实就是我们上一篇讲解的PromptTemplateConfig函数的 yaml 的表达形式。找到我们上一章节的PromptTemplateConfig的创建加深理解

  1. var kernelFunctions = kernel.CreateFunctionFromPrompt(new PromptTemplateConfig()
  2. {
  3. Name = "intent",
  4. Description = "use assistant to understand user input intent.",
  5. TemplateFormat = PromptTemplateConfig.SemanticKernelTemplateFormat,//此处可以省略默认就是"semantic-kernel"
  6. Template = "What is the intent of this request? {{$request}}",
  7. InputVariables = [new() { Name = "request", Description = "The user's request.", IsRequired = true }],
  8. ExecutionSettings = new Dictionary<string, PromptExecutionSettings>() {
  9. {
  10. OpenAIPromptExecutionSettings.DefaultServiceId ,//"default"
  11. new OpenAIPromptExecutionSettings()
  12. {
  13. MaxTokens = 1024,
  14. Temperature = 0
  15. }
  16. },
  17. }
  18. });

那开始编写我们的 yaml

  1. name: GenerateJoke
  2. template: |
  3. Tell me a joke about {{$topic}} that is {{$length}} sentences long.
  4. template_format: semantic-kernel
  5. description: A function that generates a joke about a topic.
  6. input_variables:
  7. - name: topic
  8. description: The topic of the joke.
  9. is_required: true
  10. - name: length
  11. description: The number of sentences in the joke.
  12. is_required: true
  13. output_variable:
  14. description: The generated joke.
  15. execution_settings:
  16. default:
  17. temperature: 0.9
  18. max_token: 1024

通过PromptTemplateConfig对象来理解就可以事半功倍了,写 yaml 完全没压力,里面的每一个属性细节在上一章节都有介绍,不熟悉的可以去上一章阅读一下。

SK 创建 prompts functions

  1. //定义kernel 对象
  2. var kernel = Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId: config.ModelId,
  3. apiKey: config.ApiKey,
  4. httpClient: client).Build();
  5. //读取yaml文件地址
  6. var yamlDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins", "Yaml", "joke.yaml");
  7. var promptYaml = await File.ReadAllTextAsync(yamlDirectory);
  8. KernelFunction jokeFunc = kernel.CreateFunctionFromPromptYaml(promptYaml);
  9. KernelArguments kernelArgs = new KernelArguments()
  10. {
  11. {"topic","apple"},
  12. {"length","5"},
  13. };
  14. // 用内核调用函数并提供kernelArguments
  15. FunctionResult results = await jokeFunc.InvokeAsync(kernel, kernelArgs);
  16. Console.WriteLine(results.ToString());

输出

image

大功告成!

最后

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

参考文献

yaml-prompts-with-semantic-kernel

本文源代码

??欢迎关注笔者公众号一起学习交流,获取更多有用的知识~
image

原文链接:https://www.cnblogs.com/ruipeng/p/18205081

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号