语义内核提示模板语言是一种简单的方法 使用纯文本定义和编写 AI 函数。 您可以使用它来创建自然语言提示、生成响应、提取 信息,调用其他提示或执行任何其他可以执行的任务 用文字表达。 该语言支持三个基本功能,允许您 1) 包括 变量,2) 调用外部函数,以及 3) 将参数传递给函数。 您无需编写任何代码或导入任何外部库,只需使用 大括号用于在提示中嵌入表达式。 语义内核将解析您的模板并执行其背后的逻辑。 这样,您可以轻松地将 AI 集成到您的应用程序中,并且 最大的灵活性。{{...}} 提示 如果您需要更多功能,我们还支持 [color=var(--theme-success-dark)]Handlebars 模板引擎,它允许您使用循环、条件和其他高级 特征。在此处了解如何使用 [color=var(--theme-success-dark)]Handlebars 模板引擎。
变量
若要在提示中包含变量值,请使用以下语法。 例如,如果有一个名为 (用于保存用户名) 的变量, 你可以这样写:{{$variableName}}name Hello {{$name}}, welcome to Semantic Kernel! 这将生成带有用户名的问候语。 空格被忽略,所以如果你觉得它更易读,你也可以写: Hello {{ $name }}, welcome to Semantic Kernel! 函数调用
若要调用外部函数并将结果嵌入到提示符中,请使用以下语法。 例如,如果有一个名为 给定位置的天气预报,您可以写:{{namespace.functionName}}weather.getForecast The weather today is {{weather.getForecast}}. 这将生成一个句子,其中包含默认位置的天气预报 存储在变量中。 该变量由内核在调用函数时自动设置。 例如,上面的代码等效于:inputinput The weather today is {{weather.getForecast $input}}. 函数参数
若要调用外部函数并向其传递参数,请使用 and 语法。 例如,如果要将不同的输入传递给天气预报 函数,可以写成:{{namespace.functionName $varName}}{{namespace.functionName "value"}} [backcolor=var(--theme-code-header)][size=0.8]复制[color=var(--theme-success-invert) !important][backcolor=var(--theme-success-base) !important][size=1.125]
The weather today in {{$city}} is {{weather.getForecast $city}}.The weather today in Schio is {{weather.getForecast "Schio"}}.这将产生两个句子,其中包含两个不同的天气预报 locations,使用变量中存储的城市和提示模板中硬编码的“Schio”位置值。city 有关特殊字符的说明
语义函数模板是文本文件,因此无需转义特殊字符 比如新的行和标签。但是,有两种情况需要特殊语法: - 在提示模板中包含双大括号
- 将包含引号的硬编码值传递给函数
需要双大括号的提示
双大括号有一个特殊的用例,它们用于注入变量, 值和函数转换为模板。 如果您需要在提示中包含 {{ 和 }} 序列,则 可以触发特殊的渲染逻辑,最好的解决方案是使用字符串值 用引号括起来,比如 和{{ "{{" }}{{ "}}" }} 例如: {{ "{{" }} and {{ "}}" }} are special SK sequences. 将呈现为: {{ and }} are special SK sequences. 包含引号和转义的值
可以使用单引号和双引号将值括起来。 为了避免需要特殊语法,在使用包含单引号的值时,建议用双引号换行值。同样地 使用包含双引号的值时,请用单引号换行该值。 例如: [backcolor=var(--theme-code-header)][size=0.8]复制[color=var(--theme-success-invert) !important][backcolor=var(--theme-success-base) !important][size=1.125]
...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
|