語意核心提示範本語言是一種使用純文本定義和組合 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 範本。