语义内核提示模板语言是一种使用纯文本定义和撰写 AI 函数的简单方法。 可以使用它创建自然语言提示、生成响应、提取信息、调用其他提示或执行可使用文本表达的任何其他任务。
该语言支持三个基本功能,允许你 1) 包括变量,2) 调用外部函数,3) 将参数传递给函数。
无需编写任何代码或导入任何外部库,只需使用大括号 {{...}} 在提示中嵌入表达式。
语义内核将分析模板并执行其背后的逻辑。
这样,即可轻松地将 AI 集成到应用中,只需最少的努力和最大的灵活性。
提示
如果需要更多功能,我们还支持:Handlebars 和 Liquid 模板引擎,这使你可以使用循环、条件和其他高级功能。
变量
若要在提示中包含变量值,请使用 {{$variableName}} 语法。
例如,如果你有一个名为 name 的变量,该变量保存用户名,则可以编写:
Hello {{$name}}, welcome to Semantic Kernel!
这将生成具有用户名的问候语。
将忽略空格,因此,如果发现它更具可读性,还可以编写:
Hello {{ $name }}, welcome to Semantic Kernel!
函数调用
若要调用外部函数并在提示中嵌入结果,请使用 {{namespace.functionName}} 语法。
例如,如果有一个名为 weather.getForecast 的函数返回给定位置的天气预报,则可以编写:
The weather today is {{weather.getForecast}}.
这将生成一个句子,其中包含存储在 input 变量中的默认位置的天气预报。
调用函数时,内核会自动设置 input 变量。
例如,上述代码等效于:
The weather today is {{weather.getForecast $input}}.
函数参数
若要调用外部函数并向其传递参数,请使用 {{namespace.functionName $varName}} 和 {{namespace.functionName "value"}} 语法。
例如,如果要将其他输入传递给天气预报函数,可以编写:
The weather today in {{$city}} is {{weather.getForecast $city}}.
The weather today in Schio is {{weather.getForecast "Schio"}}.
这将生成两个关于不同地点天气预报的句子,使用存储在city变量中的城市及在提示模板中硬编码的“Schio”位置值。
关于特殊字符的注释
语义函数模板是文本文件,因此无需转义特殊字符(如换行符和制表符)。 但是,有两种情况需要特殊语法:
- 在提示模板中包含双大括号
- 将包含引号的硬编码值传递给函数
提示需要双大括号
双大括号具有特殊的用例,它们用于将变量、值和函数注入模板。
如果需要在提示中包含 {{ 和 }} 序列,这可能会触发特殊的呈现逻辑,最佳解决方案是使用用引号括起来的字符串值,例如 {{ "{{" }} 和 {{ "}}" }}
例如:
{{ "{{" }} and {{ "}}" }} are special SK sequences.
将呈现为:
{{ and }} are special SK sequences.
包含引号和转义字符的值
可以使用 单引号 和 双引号括起来。
为了避免需要特殊语法,在使用包含 单引号的值时,建议用 双引号将值括起来。 同样,使用包含 双引号的值时,将值用 单引号括起来。
例如:
...text... {{ functionName "one 'quoted' word" }} ...text...
...text... {{ functionName 'one "quoted" word' }} ...text...
对于值包含单引号和双引号的情况,您将需要使用特殊 «\» 符号进行转义。
在值周围使用双引号时,请使用 «\"» 在值中包含双引号符号:
... {{ "quotes' \"escaping\" example" }} ...
同样,使用单引号时,请使用 «\'» 在值中包含单引号:
... {{ 'quotes\' "escaping" example' }} ...
两者都呈现为:
... quotes' "escaping" example ...
请注意,为了一致性,序列 «\'» 和 «\"» 始终呈现为 «'» 和 «"»,即使在可能不需要转义的情况下也是如此。
例如:
... {{ 'no need to \"escape" ' }} ...
等效于:
... {{ 'no need to "escape" ' }} ...
两者都呈现为:
... no need to "escape" ...
如果您需要在引号前添加反斜杠,由于 «\» 是特殊字符,因此您也需要对其进行转义,并且使用特殊序列 «\\\'» 和 «\\\"»。
例如:
{{ 'two special chars \\\' here' }}
呈现为:
two special chars \' here
与单引号和双引号类似,这个符号 «\» 并不总是需要转义。 但是,为了一致性,即使没有必要,也可以进行转义。
例如:
... {{ 'c:\\documents\\ai' }} ...
等效于:
... {{ 'c:\documents\ai' }} ...
两者都被呈现为:
... c:\documents\ai ...
最后,反斜杠仅在用于 «'»、«"» 和 «\»前时具有特殊意义。
在所有其他情况下,反斜杠字符没有影响,并按原样呈现。 例如:
{{ "nothing special about these sequences: \0 \n \t \r \foo" }}
呈现为:
nothing special about these sequences: \0 \n \t \r \foo
后续步骤
语义内核除了支持自己的内置格式外,还支持其他常用的模板格式。 在下一部分中,我们将介绍其他格式、Handlebars 和 Liquid 模板。