当前位置: 首页 > news >正文

Name 不支持中文和特殊字符

Name = "chat", Description = "给出一段对话记录,总结这部分对话.", Template = SummarizeConversationDefinition, TemplateFormat = "semantic-kernel", InputVariables = new List<InputVariable> { new InputVariable{Name = "request", Description = "用户的问题", IsRequired = true } }, ExecutionSettings = new Dictionary<string, PromptExecutionSettings> { { "default", new OpenAIPromptExecutionSettings() { MaxTokens = 1000, Temperature = 0 } }, { "gpt-3.5-turbo", new OpenAIPromptExecutionSettings() { ModelId = "gpt-3.5-turbo-0613", MaxTokens = 4000, Temperature = 0.2 } }, { "gpt-4", new OpenAIPromptExecutionSettings() { ModelId = "gpt-4-1106-preview", MaxTokens = 8000, Temperature = 0.3 } } }
提示模板语法

目前,我们已经有两个地方使用到提示模板的语法,即变量和函数调用,因为前面已经介绍过相关的用法,因此这里再简单提及一下。

变量

变量的使用很简单,在提示工程中使用{{$变量名称}}标识即可,如{{$name}}

然后在对话中有多种方法插入值,如使用 KernelArguments 存储变量值:

new KernelArguments { { "name", "工良" } });
函数调用

在 实现总结 一节提到过,在提示模板中可以明确调用一个函数,比如定义一个函数如下:

// 没有 Kernel kernel [KernelFunction, Description("给你一份很长的谈话记录,总结一下谈话内容.")] public async Task<string> SummarizeConversationAsync( [Description("长对话记录\r\n.")] string input) { await Task.CompletedTask; return input; } // 有 Kernel kernel [KernelFunction, Description("给你一份很长的谈话记录,总结一下谈话内容.")] public async Task<string> SummarizeConversationAsync( [Description("长对话记录\r\n.")] string input, Kernel kernel) { await Task.CompletedTask; return input; } [KernelFunction] [Description("Sends an email to a recipient.")] public async Task SendEmailAsync( Kernel kernel, string recipientEmails, string subject, string body ) { // Add logic to send an email using the recipientEmails, subject, and body // For now, we'll just print out a success message to the console Console.WriteLine("Email sent!"); }

函数一定需要使用[KernelFunction]标识,[Description]描述函数的作用。函数可以一个或多个参数,每个参数最好都使用[Description]描述作用。

函数参数中,可以带一个Kernel kernel,可以放到开头或末尾 ,也可以不带,主要作用是注入Kernel对象。

在 prompt 中使用函数时,需要传递函数参数:

总结如下:{{AAA.SummarizeConversationAsync $input}}.

其它一些特殊字符的转义方法等,详见官方文档:https://learn.microsoft.com/en-us/semantic-kernel/prompts/prompt-template-syntax

文本生成

前面劈里啪啦写了一堆东西,都是说聊天对话的,本节来聊一下文本生成的应用。

文本生成和聊天对话模型主要有以下模型:

Model typeModel
Text generationtext-ada-001
Text generationtext-babbage-001
Text generationtext-curie-001
Text generationtext-davinci-001
Text generationtext-davinci-002
Text generationtext-davinci-003
Chat Completiongpt-3.5-turbo
Chat Completiongpt-4

当然,文本生成不一定只能用这么几个模型,使用 gpt-4 设定好背景提示,也可以达到相应效果。

文本生成可以有以下场景:

使用文本生成的示例如下,让 AI 总结文本:

按照这个示例,我们先在 Env.cs 中编写扩展函数,配置使用.AddAzureOpenAITextGeneration()文本生成,而不是聊天对话。

public static IKernelBuilder WithAzureOpenAIText(this IKernelBuilder builder) { var configuration = GetConfiguration(); // 需要换一个模型,比如 gpt-35-turbo-instruct var AzureOpenAIDeploymentName = "ca"; var AzureOpenAIModelId = "gpt-35-turbo-instruct"; var AzureOpenAIEndpoint = configuration["AzureOpenAI:Endpoint"]!; var AzureOpenAIApiKey = configuration["AzureOpenAI:ApiKey"]!; builder.Services.AddLogging(c => { c.AddDebug() .SetMinimumLevel(LogLevel.Trace) .AddSimpleConsole(options => { options.IncludeScopes = true; options.SingleLine = true; options.TimestampFormat = "yyyy-MM-dd HH:mm:ss "; }); }); // 使用 Chat ,即大语言模型聊天 builder.Services.AddAzureOpenAITextGeneration( AzureOpenAIDeploymentName, AzureOpenAIEndpoint, AzureOpenAIApiKey, modelId: AzureOpenAIModelId ); return builder; }

然后编写提问代码,用户可以多行输入文本,最后使用000结束输入,将文本提交给 AI 进行总结。进行总结时,为了避免 AI 废话太多,因此这里使用ExecutionSettings配置相关参数。

代码示例如下:

builder = builder.WithAzureOpenAIText(); var kernel = builder.Build(); Console.WriteLine("输入文本:"); var request = ""; while (true) { var input = Console.ReadLine(); if (input == "000") { break; } request += Environment.NewLine; request += input; } var func = kernel.CreateFunctionFromPrompt(new PromptTemplateConfig { Name = "chat", Description = "给出一段对话记录,总结这部分对话.", // 用户的文本 Template = request, TemplateFormat = "semantic-kernel", ExecutionSettings = new Dictionary<string, PromptExecutionSettings> { { "default", new OpenAIPromptExecutionSettings() { MaxTokens = 100, Temperature = (float)0.3, TopP = (float)1, FrequencyPenalty = (float)0, PresencePenalty = (float)0 } } } }); var result = await func.InvokeAsync(kernel); Console.WriteLine($""" 总结如下: {string.Join("\n", result)} """);

http://www.jsqmd.com/news/1107084/

相关文章:

  • 【计算机毕业设计】宠物丧葬用品选购网站的设计与实现
  • CXO Wisdom智羚荟:一家企业的成长,离不开另一些优秀企业
  • 反向海淘代购独立站系统,海外创业低成本建站方案全解析
  • 《可靠传输的快递专线 ——TCP 协议深度趣味精讲》
  • 新背景下,我们需要怎样的硬盘接口规范
  • 身体护理的顺序感
  • 2026年儿童口腔运营学习费用大揭秘,你想知道吗?
  • 在饰品、珠宝这类通常被认为由女性主导的赛道上,一个来自荷兰的品牌却独辟蹊径,专注做男性手串
  • 卡特加特是一家人工智能公司吗?
  • 深度学习图像数据集构建:从采集到标注的工程化实践
  • 从“ELK 捞针”到结构化归因:基于 Grok 4.3 的分布式并发 Bug 排查实战
  • zephyr实现ADC方式有那些?
  • CNN端到端2D路径规划:从图像直觉到嵌入式实时导航
  • 工业防爆监控系统选型技术方案|北京易燃易爆场景落地参考
  • 联合疗法新突破 | tDCS协同针刺重塑膝骨关节炎患者脑网络连接,镇痛效果优于单一疗法
  • U535992 J-C 小梦的宝石收集
  • 自动售货机总是卡货?教你几招轻松搞定~YH
  • 什么是联盟营销(Affiliate Marketing)?2026海内外创作者商业化指南
  • 从Markdown到PDF:前端Canvas排版优化实践
  • 基于STM32单片机智能窨井盖井报警系统 倾斜角度水位气体WIFI 2(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)
  • navicat执行事务操作,不小心关闭session窗口后事务结果如何?
  • 销售讲不清产品内部结构?3D展示让客户一眼看透
  • Cognee — 开源 AI 记忆知识库平台
  • 上就是代码的解析,相信很多人疑惑的地方就是Vector128.Max做了什么,我们可以构造一个代码,让大家简单的看出来发生了什么。代码和运行结果如下所示:
  • AI驱动的销售商机管理工具DingTalkA1实战解析
  • API 服务端数据库全表设计与 SQL 实现
  • QQ群聊天记录分析终极指南:三分钟解锁你的群聊数据洞察力
  • 计算机毕业设计之基于大数据加护的国产美妆行业发展状况研究
  • 多款远程桌面工具实测分享,谁才是打工人心中 TOP1?
  • AI Agent 开发实战:用LangChain4j构建你的第一个Java智能体