这是我在C#中调用提示的方式:
var result = await kernel.InvokePromptAsync(prompt, new(executionSettings));
这个方法运行得很好,除了当提示中包含类似下面的内容时:
{ bla } {{ bla }} { $bla } {{ bla }} {{request}} {{choices.[0]}}
我会遇到以下错误:
Unhandled exception. Microsoft.SemanticKernel.KernelException: The function identifier is empty
显然这是因为{{}}
被用来注入值或函数。
这份文档建议转义大括号https://learn.microsoft.com/en-us/semantic-kernel/concepts/prompts/prompt-template-syntax#prompts-needing-double-curly-braces,这里还有一些关于单引号和双引号的内容https://learn.microsoft.com/en-us/semantic-kernel/concepts/prompts/prompt-template-syntax#values-that-include-quotes-and-escaping
Semantic Kernel中有没有内置的方法来进行字符转义,这样我就不需要自己编写代码了?我更希望不自己编写,因为我可能做错。
回答:
我还没有找到“开箱即用”的解决方案,所以我目前是这样做的,直到找到更好的方法。
prompt = prompt .Replace("{{", "{{ \"{{\" }}") .Replace("}}", "{{ \"}}\" }}");