Перейти к содержимому

Шаблоны

Шаблоны позволяют использовать динамический контент в директивах воркфлоу, условиях и других полях. Используйте шаблонные переменные для доступа к контексту выполнения, результатам шагов и параметрам воркфлоу.

Шаблонные переменные используют двойные фигурные скобки:

{{variableName}}

Переменные разрешаются во время выполнения из контекста выполнения.

{{executionId}} - ID текущего выполнения
{{workflowId}} - Выполняемый воркфлоу
{{currentNodeId}} - ID текущего узла

Переменные, установленные во время выполнения:

{{projectName}} - Пользовательская переменная
{{results}} - Вывод предыдущего шага
{{count}} - Числовая переменная

Доступ к результатам предыдущих шагов:

{{input}} - Ввод последнего шага
{{nodeStates.nodeId.result}} - Результат конкретного узла

Переменные могут быть установлены в определениях узлов:

{
"id": "set-vars",
"type": "step",
"directive": "Инициализировать проект",
"completionCondition": "Проект инициализирован",
"setVariables": {
"projectName": "my-project",
"environment": "development"
}
}

Или динамически из ответа агента через inputSchema:

{
"inputSchema": {
"type": "object",
"properties": {
"projectName": { "type": "string" }
}
}
}

Значения ответа агента автоматически добавляются в контекст.

Используйте условные блоки для включения или исключения контента на основе значений контекста:

{{#if variable}}Контент если истина{{else}}Контент если ложь{{/if}}
{{#if variable}}Контент если истина{{/if}}

Ложные значения: null, undefined, false, 0, "", "нет", "no"

{{#if has_file_access}}Сохранить в ./output.md{{else}}Вернуть результат в ответе{{/if}}
{{#if approved}}Продолжаем деплой{{else}}Ожидаем подтверждения{{/if}}

Условные шаблоны обрабатываются в полях directive и completionCondition узлов agent-directive.

Используйте {{#unless}} для обратного условия - контент показывается когда значение ложное:

{{#unless isLoggedIn}}Пожалуйста, войдите{{/unless}}
{{#unless hasError}}Успех!{{else}}Произошла ошибка{{/unless}}

Используйте {{#eq}} для сравнения переменной со строковым значением:

{{#eq variable 'value'}}Контент если равно{{/eq}}
{{#eq variable 'value'}}Контент если равно{{else}}Контент если не равно{{/eq}}

Пример:

{{#eq upload_target 'staging'}}Деплой на staging сервер{{/eq}}
{{#eq upload_target 'production'}}Деплой на production сервер{{/eq}}

Используйте {{#neq}} для показа контента когда переменная НЕ равна значению:

{{#neq variable 'value'}}Контент если не равно{{/neq}}
{{#neq variable 'value'}}Контент если не равно{{else}}Контент если равно{{/neq}}

Пример:

{{#neq test_info 'skip'}}Запусти тесты: {{test_command}}{{/neq}}

Используйте {{#each}} для итерации по массивам:

{{#each items}}{{this}}, {{/each}}
{{#each users}}{{name}} ({{age}})\n{{/each}}
{{#each steps}}{{@index}}: {{action}}{{/each}}

Внутри {{#each}}:

  • {{this}} - текущий элемент (сериализуется для объектов)
  • {{this.fieldName}} - доступ к полю текущего объекта
  • {{this.nested.path}} - доступ к вложенным полям
  • {{@index}} - текущий индекс (начиная с 0)
  • {{fieldName}} - сокращение для {{this.fieldName}}

Поддержка условий внутри циклов:

{{#each tasks}}{{#if done}}[x]{{else}}[ ]{{/if}} {{name}}\n{{/each}}
{
"directive": "Реализуй фичу {{featureName}} в проекте {{projectName}}",
"completionCondition": "Фича {{featureName}} реализована и протестирована"
}
{
"transitions": [
{ "condition": "{{testsPassed}} === true", "target": "deploy" },
{ "condition": "{{retryCount}} < 3", "target": "fix-and-retry" },
{ "target": "escalate" }
]
}
{
"type": "loop",
"directive": "Итерация {{iterationCount}}: Улучши решение",
"loopCondition": "{{qualityScore}} < 8 && {{iterationCount}} < 5"
}

Помогите агентам понять ожидаемый формат:

{
"inputSchema": {
"type": "object",
"properties": {
"implementation": {
"type": "string",
"description": "Код для {{featureName}} на {{language}}"
}
}
}
}

Для вывода литеральных фигурных скобок используйте двойное экранирование:

\\{{notAVariable}} - Выводит: {{notAVariable}}
  1. Описательные имена — Используйте понятные имена переменных
  2. Значения по умолчанию — Предоставляйте fallback для опциональных переменных
  3. Согласованность типов — Сохраняйте согласованность типов переменных при использовании
  4. Документация — Документируйте пользовательские переменные в описании воркфлоу

Проверьте значения переменных в контексте выполнения:

Агент: Какие текущие переменные контекста?
[вызывает get_execution_context]