在人工智能和大型语言模型(LLM)的世界中,提示词(Prompts)扮演着至关重要的角色。它们是我们与AI沟通的桥梁,决定了AI输出的质量和相关性。本文将深入探讨Microsoft Semantic Kernel中的提示词工程,帮助您理解如何有效地利用提示词来提升AI应用的效果。
提示词是我们提供给模型的输入或查询,以期获取特定的响应。在Microsoft Semantic Kernel中,提示词工程(Prompt Engineering)已成为一个新兴的专业领域,它需要创造力和对细节的关注。
有效的提示词设计对于从LLM AI模型中获得预期结果至关重要。通过精心选择正确的词语、短语、符号和格式,可以引导模型生成高质量且相关的文本。
例如,考虑以下两个提示词:
text请给我讲述人类的历史。 请用3句话给我讲述人类的历史。
第一个提示词可能会产生一个冗长的报告,而第二个提示词则会产生一个简洁的回应。如果您正在构建空间有限的用户界面,第二个提示词会更适合您的需求。
Microsoft Semantic Kernel提供了一种简单的方式来使用纯文本定义和组合AI函数。它支持三种基本功能:包含变量、调用外部函数和向函数传递参数。
Semantic Kernel的提示词模板语言使用花括号{{...}}来嵌入表达式。以下是基本语法:
包含变量使用{{$variableName}}语法:
text你好,{{$name}}!今天天气怎么样?
当提示词被执行时,{{$name}}将被替换为实际的名字值。
调用外部函数使用{{namespace.functionName}}语法:
text当前的日期和时间是:{{time.now}}
这将调用time命名空间中的now函数,并将其结果插入到提示词中。
向函数传递参数使用{{namespace.functionName $parameterName}}语法:
text将以下文本翻译成中文:{{translator.translate $text language="中文"}}
C#
#pragma warning disable SKEXP0010
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using System.Text.Json;
namespace AppDeepSeekPrompt
{
internal class Program
{
// 定义提示词模板类
public class PromptTemplate
{
public string Name { get; set; }
public string Description { get; set; }
public string Template { get; set; }
public Dictionary<string, string> InputVariables { get; set; }
}
static async Task Main(string[] args)
{
// 创建更安全的Semantic Kernel配置
var kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAIChatCompletion(
modelId: "deepseek-chat",
apiKey: Environment.GetEnvironmentVariable("DEEPSEEK_API_KEY") ?? "sk-xxxx",
endpoint: new Uri("https://api.deepseek.com/v1")
);
// 构建内核
var kernel = kernelBuilder.Build();
// 定义高级提示词模板
var microservicesPromptTemplate = new PromptTemplate
{
Name = "微服务架构解析",
Description = "专业解释微服务架构的关键设计原则",
Template = @"
作为一个专业的软件架构专家,请详细解释微服务架构的关键设计原则:
1. 上下文: {{$context}}
2. 具体要求: {{$requirement}}
请提供:
- 架构原则的深入解析
- 实践中的具体应用示例
- 潜在的挑战和解决策略
- 对现代软件开发的影响",
InputVariables = new Dictionary<string, string>
{
{ "context", "软件工程企业级应用" },
{ "requirement", "全面阐述微服务架构设计原则" }
}
};
try
{
// 方法1:使用高级模板引擎
var promptConfig = new KernelArguments
{
["context"] = microservicesPromptTemplate.InputVariables["context"],
["requirement"] = microservicesPromptTemplate.InputVariables["requirement"]
};
var result = await kernel.InvokePromptAsync(
microservicesPromptTemplate.Template,
promptConfig
);
Console.WriteLine("微服务架构解析结果:");
Console.WriteLine(result);
// 方法2:使用聊天完成服务
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
var chatResult = await chatCompletionService.GetChatMessageContentsAsync(
new ChatHistory
{
new ChatMessageContent(AuthorRole.System, "你是一个专业的技术架构咨询专家"),
new ChatMessageContent(AuthorRole.User, microservicesPromptTemplate.Template)
},
new OpenAIPromptExecutionSettings
{
MaxTokens = 800,
Temperature = 0.6,
TopP = 0.9
}
);
Console.WriteLine("\n聊天模式输出:");
foreach (var content in chatResult)
{
Console.WriteLine(content.Content);
}
}
catch (Exception ex)
{
Console.WriteLine($"发生错误: {ex.Message}");
Console.WriteLine($"详细异常: {ex}");
}
Console.ReadKey();
}
}
}

成为一名熟练的提示词工程师需要技术知识、创造力和实验精神的结合。以下是一些提示词工程的最佳实践:
提示词工程是一个动态且不断发展的领域,熟练的提示词工程师在有效利用LLM AI模型的能力方面发挥着至关重要的作用。通过Microsoft Semantic Kernel提供的工具和技术,开发人员可以创建强大的AI驱动应用程序,实现个性化交互和高质量的输出。
希望本文能帮助您更好地理解提示词工程的重要性,并在您的AI项目中有效地应用这些技术。
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!