Шаблоны¶
Аргумент template_format фабрики задаёт способ подстановки переменных в сообщения; его значение
по умолчанию, langfuse, совпадает с playground. Промпт может нести свой формат в ключе
конфигурации template_format, который действует, когда allowed_config_keys его перечисляет или
равен "any" (см. раздел Модели и ключи конфигурации).
В модель этот ключ не передаётся.
{"provider": "openai", "model": "gpt-5.5", "template_format": "jinja2"}
| Формат | Синтаксис | Чем рендерится |
|---|---|---|
langfuse (по умолчанию) |
{{ name }} |
TemplateParser из Langfuse SDK |
f-string |
{name} |
str.format, как в шаблонах промптов LangChain |
mustache |
{{ name }}, {{{ name }}}, {{#flag}}...{{/flag}} |
Mustache-рендерер LangChain |
jinja2 |
{{ name \| upper }}, {% if %} |
Jinja2 в изолированном окружении, как в LangChain; требуется pip install "langfuse-hotswap[jinja2]" |
Формат действует на все сообщения промпта. В любом формате переменные обязательны: входные данные
проверяет шаблон LangChain, поэтому отсутствующая переменная вызывает KeyError с её именем.
Формат langfuse¶
Сообщения рендерит TemplateParser из Langfuse SDK, поэтому результат совпадает с playground.
Его правила закреплены контрактным тестом:
- Переменная — это всё, что находится между
{{и ближайшим}}, без пробелов по краям. Значения подставляются черезstr()без экранирования;Noneпревращается в пустую строку. - Одиночные фигурные скобки и HTML остаются без изменений. Секций нет:
{{#flag}}— это переменная с именем#flag, а{{a.b}}— переменная с именемa.b. - В отличие от
prompt.compile(), отсутствующая переменная — это ошибка, а не оставленный как есть текст.
Форматы LangChain¶
f-string, mustache и jinja2 рендерятся теми же функциями, что стоят за ChatPromptTemplate
с соответствующим template_format, и по их правилам: f-string считает одиночные скобки полями,
mustache экранирует HTML в {{ }}, поддерживает секции и трактует a.b как вложенный доступ,
jinja2 вычисляет выражения и фильтры. Используйте их для промптов с условиями и циклами и
помните, что playground Langfuse понимает только {{ name }}.
Сообщения¶
- Текстовый промпт превращается в одно сообщение с ролью
human. Роли, неизвестные LangChain, напримерdeveloper, сохраняются какChatMessageс соответствующей ролью. - Плейсхолдеры заполняются из входной переменной с тем же именем; она должна содержать список сообщений. Переменные внутри этих сообщений не подставляются.
- Переменные с именами
stopиselfотклоняются LangChain.