向蓝 发表于 2024-4-15 16:14:54

提示模板语法

语义内核提示模板语言是一种简单的方法 使用纯文本定义和编写 AI 函数。 您可以使用它来创建自然语言提示、生成响应、提取 信息,调用其他提示或执行任何其他可以执行的任务 用文字表达。该语言支持三个基本功能,允许您 1) 包括 变量,2) 调用外部函数,以及 3) 将参数传递给函数。您无需编写任何代码或导入任何外部库,只需使用 大括号用于在提示中嵌入表达式。 语义内核将解析您的模板并执行其背后的逻辑。 这样,您可以轻松地将 AI 集成到您的应用程序中,并且 最大的灵活性。{{...}}提示如果您需要更多功能,我们还支持 Handlebars 模板引擎,它允许您使用循环、条件和其他高级 特征。在此处了解如何使用 Handlebars 模板引擎。
变量
若要在提示中包含变量值,请使用以下语法。 例如,如果有一个名为 (用于保存用户名) 的变量, 你可以这样写:{{$variableName}}nameHello {{$name}}, welcome to Semantic Kernel!这将生成带有用户名的问候语。空格被忽略,所以如果你觉得它更易读,你也可以写:Hello {{ $name }}, welcome to Semantic Kernel!函数调用
若要调用外部函数并将结果嵌入到提示符中,请使用以下语法。 例如,如果有一个名为 给定位置的天气预报,您可以写:{{namespace.functionName}}weather.getForecastThe weather today is {{weather.getForecast}}.这将生成一个句子,其中包含默认位置的天气预报 存储在变量中。 该变量由内核在调用函数时自动设置。 例如,上面的代码等效于:inputinputThe weather today is {{weather.getForecast $input}}.函数参数
若要调用外部函数并向其传递参数,请使用 and 语法。 例如,如果要将不同的输入传递给天气预报 函数,可以写成:{{namespace.functionName $varName}}{{namespace.functionName "value"}}复制

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.包含引号和转义的值
可以使用单引号和双引号将值括起来。为了避免需要特殊语法,在使用包含单引号的值时,建议用双引号换行值。同样地 使用包含双引号的值时,请用单引号换行该值。例如:复制

...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
页: [1]
查看完整版本: 提示模板语法