内容目录
在对话中添加参数
使用 CreateFunctionFromPrompt()
为通过提示模板指定的提示创建 KernelFunction 实例。
KernelFunction 表示可以作为语义内核工作负载的一部分调用的函数。Semantic Kernel 中对 LLM 的调用就叫 KernelFunction。KernelFunction 分为 Semantic Function 、Native Function(本地函数)两种。
private readonly IKernelBuilder _kernelBuilder = Kernel.CreateBuilder();
_kernelBuilder.AddAzureOpenAIChatCompletion(
deploymentName: "aaa",
endpoint: "https://1.openai.azure.com",
apiKey: "1111111");
var kernel = _kernelBuilder.Build();
string translationPrompt = "将这句话翻译为英文\r\n{{$input}}";
var llm = kernel.CreateFunctionFromPrompt(translationPrompt);
KernelArguments args = new KernelArguments();
args.Add("input", input);
var response = await llm.InvokeAsync(kernel, args);
return response.GetValue<string>();
然后使用 KernelArguments,为模板中的 $input
参数替换为具体内容。
输入 “我爱学习”,得出:
The English translation is "I love studying."
调用插件的函数
TextPlugin 是一个插件类,其中有一些函数:
[HttpGet("/get")]
public async Task<string> Get(string input)
{
var kernel = _kernelBuilder.Build();
var textPlugin = kernel.ImportPluginFromType<TextPlugin>();
// 函数参数
var arguments = new KernelArguments()
{
["input"] = input
};
// textPlugin["Uppercase"] 表示要调用的函数名称
string? resultValue = await kernel.InvokeAsync<string>(textPlugin["Uppercase"], arguments);
Console.WriteLine($"string -> {resultValue}");
return "";
}
}
对话配置
代码参考 http://studiogpt.cn/web/#/620853576/285421664
设置聊天背景,并配置聊天的最大 tokens 数量、温度等配置:
var kernel = _kernelBuilder.Build();
string promptTemplate = @"
为给定的事件创造一个创造性的理由或借口。
要有创意,要风趣。让你的想象力天马行空。
事件:我要迟到了。
对不起:我被长颈鹿歹徒勒索了赎金。
事件:我已经一年没去健身房了
对不起:我一直忙于训练我的宠物龙。
事件:{{$input}}
";
var excuseFunction = kernel.CreateFunctionFromPrompt(promptTemplate, new OpenAIPromptExecutionSettings() { MaxTokens = 100, Temperature = 0.4, TopP = 1 });
然后正常聊天并在对话中插入参数:
var result = await kernel.InvokeAsync(excuseFunction, new() { ["input"] = "我错过了F1决赛" });
Console.WriteLine(result.GetValue<string>());
result = await kernel.InvokeAsync(excuseFunction, new() { ["input"] = "对不起,我忘了你的生日" });
Console.WriteLine(result.GetValue<string>());
var fixedFunction = kernel.CreateFunctionFromPrompt($"将此日期{DateTimeOffset.Now:f}转换为法语格式", new OpenAIPromptExecutionSettings() { MaxTokens = 100 });
result = await kernel.InvokeAsync(fixedFunction);
Console.WriteLine(result.GetValue<string>());
文章评论