Compartilhar via


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:

  1. Incluindo chaves duplas nos modelos de prompt
  2. 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.