前言
在 Semantic Kernel(SK) 可以直接給 Prompt 來執行。
也可以透過 Prompt template
來建立可重覆使用的功能。
建立 Prompt Function
1.透過 CreateFunctionFromPrompt
建立
1 | using Microsoft.SemanticKernel; |
透過CreateFunctionFromPrompt
沒設定PromptTemplateConfig
時,
function 的 name 會用func{GUID}
,Desc 會用Generic function, unknown purpose
所以也可以透過PromptTemplateConfig
設定,如下,
1 | var chat = kernel.CreateFunctionFromPrompt( |
2.透過 CreatePluginFromPromptDirectory
讀取檔案
建立pluigns
目錄後,再建立chat
目錄,在該目錄中建立config.json
及 skprompt.txt
consig.json
設定 function 相關資訊
1 | { |
skprompt.txt 如下,
1 | User: {{$request}} |
透過 CreatePluginFromPromptDirectory
載入
1 | using Microsoft.SemanticKernel; |
3.透過CreateFunctionFromPromptYaml
config.json
及 skprompt.txt
也可以合併成 YAML
檔案,
例如,在 plugins
目錄中建立 chat.yaml
,建置動作設定為內嵌資源
1 | name: chat |
template_format 的值可以為 semantic-kernel
(參數前要加$),或是 handlebars
(參數前要不用加$)
將 chat.yaml
程式要加入 Microsoft.SemanticKernel.Yaml --prerelease
套件,
使用 Handlebars Templae ,要加入 Microsoft.SemanticKernel.PromptTemplates.Handlebars --prerelease
套件, using Microsoft.SemanticKernel.PromptTemplates.Handlebars;
1 | using Microsoft.SemanticKernel; |
呼叫時,使用 kernel.InvokeStreamingAsync
or await kernel.InvokeAsync
Prompt template 語法
變數
Semantic Kernel Prompt Template 中的變數使用 2 個大括號 將 $變數
包起來。
Handlebars Prompt Template 是用 2 個大括號 將 變數
包起來(變數前沒有$)。
如果想要做到多階層 or Loop 的 Template,要用
Handlebars Template
Function Call
呼叫 Function 的話,使用{{namespace.functionName}}
例如使用 ConversationSummaryPlugin.SummarizeConversation
,history
為 SummarizeConversation 所需的參數
Semantic Kernel Prompt Template: {{ConversationSummaryPlugin.SummarizeConversation $history}}
Handlebars Prompt Template: {{ConversationSummaryPlugin.SummarizeConversation history}}
特殊字處理
如果 template 中有大括號就使用雙引號包起來,例如 {{ "{{" }}
那如果 雙引號中要呈現雙引號呢? 就用反邪線,例如 {{ "Quotes' \" example"}}
輸出為 Quotes' " example
那如果要 反邪線 呢? 那就用2個反邪線 ,例如 {{ 'two special chars \\\' here' }}
輸出為 two special chars \' here
註:反邪線 只對
'
,"
及\
有效果
註: C# 中的 $+3 個雙引號+字串內容+3 個雙引號,字串內容可以多行,例如,
1 | var name="rainmaker"; |
參考資源
Semantic Kernel Templatizing your prompts
什么是 Handlebars?
一二三四五,青菜煮豆腐: 比喻農村生活、一年三百六十五天之中,除了千篇一律的豆腐青菜之中,極少吃到其他菜餚,單調清苦。