Udostępnij za pośrednictwem


Składnia szablonu monitu jądra semantycznego

Język szablonów jądra semantycznego to prosty sposób definiowania i tworzenia funkcji sztucznej inteligencji za pomocą zwykłego tekstu. Można go użyć do tworzenia monitów języka naturalnego, generowania odpowiedzi, wyodrębniania informacji, wywoływania innych monitów lub wykonywania dowolnego innego zadania, które można wyrazić za pomocą tekstu.

Język obsługuje trzy podstawowe cechy, które umożliwiają 1) włączanie zmiennych, 2) wywoływanie funkcji zewnętrznych i 3) przekazywanie parametrów do funkcji.

Nie musisz pisać żadnego kodu ani importować żadnych bibliotek zewnętrznych, wystarczy użyć nawiasów klamrowych {{...}} do osadzania wyrażeń w monitach. Semantic Kernel przeanalizuje szablon i wykona logikę powiązaną z nim. Dzięki temu można łatwo zintegrować sztuczną inteligencję z aplikacjami z minimalnym nakładem pracy i maksymalną elastycznością.

Napiwek

Jeśli potrzebujesz więcej możliwości, zapewniamy również wsparcie dla: Handlebars i silników szablonów Liquid, które umożliwiają korzystanie z pętli, instrukcji warunkowych i innych zaawansowanych funkcji.

Zmienne

Aby uwzględnić wartość zmiennej w wierszu polecenia, użyj składni {{$variableName}}. Jeśli na przykład masz zmienną o nazwie name, która zawiera nazwę użytkownika, możesz napisać:

Hello {{$name}}, welcome to Semantic Kernel!

Spowoduje to wygenerowanie powitania z nazwą użytkownika.

Spacje są ignorowane, więc jeśli uznasz tekst za bardziej czytelny, możesz także napisać:

Hello {{ $name }}, welcome to Semantic Kernel!

Wywołania funkcji

Aby wywołać funkcję zewnętrzną i osadzić wynik w wierszu polecenia, użyj składni {{namespace.functionName}}. Jeśli na przykład masz funkcję o nazwie weather.getForecast, która zwraca prognozę pogody dla danej lokalizacji, możesz napisać:

The weather today is {{weather.getForecast}}.

Spowoduje to wygenerowanie zdania z prognozą pogody dla domyślnej lokalizacji przechowywanej w zmiennej input. Zmienna input jest ustawiana automatycznie przez jądro podczas wywoływania funkcji. Na przykład powyższy kod jest odpowiednikiem:

The weather today is {{weather.getForecast $input}}.

Parametry funkcji

Aby wywołać funkcję zewnętrzną i przekazać do niej parametr, użyj składni {{namespace.functionName $varName}} i {{namespace.functionName "value"}}. Jeśli na przykład chcesz przekazać inne dane wejściowe do funkcji prognozy pogody, możesz napisać:

The weather today in {{$city}} is {{weather.getForecast $city}}.
The weather today in Schio is {{weather.getForecast "Schio"}}.

Spowoduje to wygenerowanie dwóch zdań z prognozą pogody dla dwóch różnych lokalizacji, przy użyciu miasta przechowywanego w zmiennej city i wartości "Schio" wartości lokalizacji zakodowanej na stałe w szablonie monitu.

Uwagi dotyczące znaków specjalnych

Szablony funkcji semantycznych to pliki tekstowe, więc nie ma potrzeby ucieczki znaków specjalnych, takich jak nowe wiersze i karty. Istnieją jednak dwa przypadki wymagające specjalnej składni:

  1. Dołączanie podwójnych nawiasów klamrowych w szablonach promptów
  2. Przekazywanie do funkcji stałych, zakodowanych wartości, które zawierają cudzysłowia

Komunikaty wymagające podwójnych nawiasów klamrowych

Podwójne nawiasy klamrowe mają specjalny przypadek użycia, są używane do wstrzykiwania zmiennych, wartości i funkcji do szablonów.

Jeśli musisz uwzględnić sekwencje {{ i }} w monitach, co może wyzwolić specjalną logikę renderowania, najlepszym rozwiązaniem jest użycie wartości ciągów ujęta w cudzysłów, takich jak {{ "{{" }} i {{ "}}" }}

Na przykład:

{{ "{{" }} and {{ "}}" }} are special SK sequences.

zostanie przetworzony na:

{{ and }} are special SK sequences.

Wartości zawierające cudzysłów i ucieczki

Wartości można ująć przy użyciu pojedynczych cudzysłowów i podwójnych cudzysłowów.

Aby uniknąć potrzeby specjalnej składni, pracując z wartością zawierającą pojedyncze cudzysłowy, zalecamy otaczanie wartości za pomocą podwójnych cudzysłowów . Podobnie, gdy używasz wartości zawierającej podwójne cudzysłowy, oprawiaj wartość za pomocą pojedynczych cudzysłowów.

Na przykład:

...text... {{ functionName "one 'quoted' word" }} ...text...
...text... {{ functionName 'one "quoted" word' }} ...text...

W takich przypadkach, w których wartość zawiera zarówno pojedyncze, jak i podwójne cudzysłowy, należy ucieczki, używając specjalnego symbolu «\».

W przypadku używania cudzysłowów podwójnych wokół wartości użyj «\"», aby uwzględnić symbol podwójnego cudzysłowu wewnątrz wartości:

... {{ "quotes' \"escaping\" example" }} ...

podobnie, w przypadku korzystania z pojedynczych cudzysłowów użyj «\'», aby uwzględnić pojedynczy cudzysłów wewnątrz wartości:

... {{ 'quotes\' "escaping" example' }} ...

Oba są renderowane w następujący sposób:

... quotes' "escaping" example ...

Należy pamiętać, że w celu zapewnienia spójności sekwencje «\'» i «\"» zawsze renderować «'» i «"», nawet jeśli ucieczka może nie być wymagana.

Na przykład:

... {{ 'no need to \"escape" ' }} ...

jest odpowiednikiem:

... {{ 'no need to "escape" ' }} ...

a oba renderują się do:

... no need to "escape" ...

W przypadku, gdy konieczne jest wstawienie ukośnika odwrotnego przed cudzysłowem, ponieważ «\» jest specjalnym znakiem, musisz także go zeskapeować i użyć specjalnych sekwencji «\\\'» oraz «\\\"».

Na przykład:

{{ 'two special chars \\\' here' }}

jest renderowany na:

two special chars \' here

Podobnie jak w przypadku cudzysłowów pojedynczych i podwójnych, symbol «\» nie zawsze musi być uniknięty. Jednak w celu zapewnienia spójności można go uniknąć nawet wtedy, gdy nie jest to wymagane.

Na przykład:

... {{ 'c:\\documents\\ai' }} ...

jest odpowiednikiem:

... {{ 'c:\documents\ai' }} ...

i oba są renderowane jako:

... c:\documents\ai ...

Wreszcie ukośniki odwrotne mają specjalne znaczenie tylko wtedy, gdy są używane przed «'», «"» i «\».

We wszystkich innych przypadkach znak backslash nie ma wpływu i jest wyświetlany w niezmienionej formie. Na przykład:

{{ "nothing special about these sequences: \0 \n \t \r \foo" }}

jest renderowany na:

nothing special about these sequences: \0 \n \t \r \foo

Następne kroki

Semantyczne jądro obsługuje inne popularne formaty szablonów oprócz własnego wbudowanego formatu. W następnych sekcjach przyjrzymy się dodatkowym formatom, Handlebars i szablony Liquid.