Sintaxe de modelo de prompt do Semântico-Kernel
A linguagem de modelo de prompt do Kernel Semântico é uma maneira simples de definir e compor funções de IA usando texto sem formatação. Você pode usá-lo para criar prompts de linguagem natural, gerar respostas, extrair informações, invocar outros prompts ou executar qualquer outra tarefa que possa ser expressa com texto.
O idioma dá suporte a três recursos básicos que permitem 1) incluir variáveis, 2) chamar funções externas e 3) passar parâmetros para funções.
Você não precisa escrever nenhum código ou importar bibliotecas externas, basta usar as chaves {{...}}
para inserir expressões em seus prompts.
O Kernel Semântico analisará seu modelo e executará a lógica por trás dele.
Dessa forma, você pode integrar facilmente a IA em seus aplicativos com o mínimo de esforço e flexibilidade máxima.
Dica
Se você precisar de mais recursos, também oferecemos suporte aos mecanismos de template Handlebars e Liquid, o que permite que você use loops, condicionais e outros recursos avançados.
Variáveis
Para incluir um valor variável no prompt, use a sintaxe {{$variableName}}
.
Por exemplo, se você tiver uma variável chamada name
que contém o nome do usuário, você poderá escrever:
Hello {{$name}}, welcome to Semantic Kernel!
Isso produzirá uma saudação com o nome do usuário.
Os espaços são ignorados, portanto, se você o achar mais legível, você também poderá escrever:
Hello {{ $name }}, welcome to Semantic Kernel!
Chamadas de função
Para chamar uma função externa e inserir o resultado em seu prompt, use a sintaxe {{namespace.functionName}}
.
Por exemplo, se você tiver uma função chamada weather.getForecast
que retorna a previsão do tempo para um determinado local, você poderá escrever:
The weather today is {{weather.getForecast}}.
Isso produzirá uma frase com a previsão do tempo para o local padrão armazenado na variável input
.
A variável input
é definida automaticamente pelo kernel ao invocar uma função.
Por exemplo, o código acima é equivalente a:
The weather today is {{weather.getForecast $input}}.
Parâmetros de função
Para chamar uma função externa e passar um parâmetro para ela, use a sintaxe {{namespace.functionName $varName}}
e {{namespace.functionName "value"}}
.
Por exemplo, se você quiser passar uma entrada diferente para a função de previsão do tempo, poderá escrever:
The weather today in {{$city}} is {{weather.getForecast $city}}.
The weather today in Schio is {{weather.getForecast "Schio"}}.
Isso produzirá duas frases com a previsão do tempo para dois locais diferentes, usando a cidade armazenada na variável city
e o "Schio" valor de local codificado no modelo de prompt.
Anotações sobre chars especiais
Modelos de função semântica são arquivos de texto, portanto, não é necessário escapar de caracteres especiais, como novas linhas e guias. No entanto, há dois casos que exigem uma sintaxe especial:
- Incluindo chaves duplas nos modelos de prompt
- Passando para funções com valores codificados que incluem aspas
Prompts que precisam de chaves duplas
Chaves duplas têm um caso de uso especial, são usadas para injetar variáveis, valores e funções em modelos.
Se você precisar incluir as sequências {{
e }}
em seus prompts, o que pode disparar uma lógica de renderização especial, a melhor solução é usar valores de cadeia de caracteres entre aspas, como {{ "{{" }}
e {{ "}}" }}
Por exemplo:
{{ "{{" }} and {{ "}}" }} are special SK sequences.
renderizará para:
{{ and }} are special SK sequences.
Valores que incluem aspas e caracteres de escape
Os valores podem ser colocados entre aspas simples e aspas duplas.
Para evitar a necessidade de sintaxe especial, ao trabalhar com um valor que contenha aspas simples, recomendamos encapsular o valor com aspas duplas . Da mesma forma, ao usar um valor que contém aspas duplas, encapsule o valor com aspas simples.
Por exemplo:
...text... {{ functionName "one 'quoted' word" }} ...text...
...text... {{ functionName 'one "quoted" word' }} ...text...
Para os casos em que o valor contém aspas simples e duplas, você precisará usar escapamento , usando o símbolo especial «\
».
Ao usar aspas duplas em torno de um valor, use «\"
» para incluir um símbolo de aspa dupla dentro do valor:
... {{ "quotes' \"escaping\" example" }} ...
e da mesma forma, ao usar aspas simples, use «\'
» para incluir uma única aspa dentro do valor:
... {{ 'quotes\' "escaping" example' }} ...
Ambos são renderizados para:
... quotes' "escaping" example ...
Observe que, para consistência, as sequências «\'
» e «\"
» sempre renderizam para «'
» e «"
», mesmo quando a fuga pode não ser necessária.
Por exemplo:
... {{ 'no need to \"escape" ' }} ...
é equivalente a:
... {{ 'no need to "escape" ' }} ...
e ambos são exibidos como:
... no need to "escape" ...
Caso seja necessário renderizar uma barra invertida na frente de uma citação, já que «\
» é um char especial, você precisará escapar dela também e usar as sequências especiais «\\\'
» e «\\\"
».
Por exemplo:
{{ 'two special chars \\\' here' }}
é transformado em:
two special chars \' here
Da mesma forma que as aspas simples e duplas, o símbolo «\
» nem sempre precisa ser escapado. No entanto, para consistência, ele pode ser escapado mesmo quando não necessário.
Por exemplo:
... {{ 'c:\\documents\\ai' }} ...
é equivalente a:
... {{ 'c:\documents\ai' }} ...
e ambos são renderizados para:
... c:\documents\ai ...
Por fim, as barras invertidas têm um significado especial somente quando usadas antes de «'
», «"
» e «\
».
Em todos os outros casos, o caractere de barra invertida não tem impacto e é renderizado como está. Por exemplo:
{{ "nothing special about these sequences: \0 \n \t \r \foo" }}
é renderizado para:
nothing special about these sequences: \0 \n \t \r \foo
Próximas etapas
O Kernel Semântico dá suporte a outros formatos de modelo populares, além de seu próprio formato interno. Nas próximas seções, examinaremos formatos adicionais, de Barras de Identificadores e modelos Liquid.
modelos de prompt de barras de modelos de prompt líquidoprotegendo contra ataques de injeção de prompt