语义核心提示模版语法
语义内核提示模板语言是一种使用纯文本定义和撰写 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 模板。