Перейти к содержанию

Prompt Files (.prompt)

.prompt-файлы — это отдельные файлы с расширением .prompt, которые позволяют хранить и переиспользовать промпты вне основного конфигурационного файла. Они поддерживают продвинутый синтаксис, включая YAML-преамбулу, переменные, контекст-провайдеры и ссылки на файлы.

Обзор

Prompt Files предоставляют:

  • Модульность — храните каждый промпт в отдельном файле
  • Повторное использование — один промпт можно использовать в разных проектах
  • Версионирование — легко отслеживать изменения через Git
  • Продвинутый синтаксис — поддержка Handlebars, условий, циклов
  • Контекст — ссылки на файлы, URL, контекст-провайдеры через @

Структура .prompt-файла

Файл состоит из двух частей, разделённых ---:

# YAML-преамбула (опционально)
---
name: my-prompt
description: Описание промпта
version: 2
---

# Тело промпта
Текст инструкции для LLM...

Преамбула (YAML)

Преамбула содержит метаданные промпта:

Поле Тип Обязательность Описание
name string Нет Имя промпта (по умолчанию — имя файла)
description string Нет Описание для UI (по умолчанию — name)
version number Нет Версия формата (1 или 2, по умолчанию — 2)
model string Нет Предпочтительная модель для промпта
temperature number Нет Температура генерации (0.0–2.0)

Пример преамбулы:

---
name: code-review
description: Comprehensive code review
version: 2
model: claude-3-7-sonnet
temperature: 0.3
---

Тело промпта

Тело содержит инструкцию для LLM. Поддерживает:

  • Обычный текст
  • Markdown-разметку
  • Переменные Handlebars ({{ variable }})
  • Специальные переменные ({{ code }}, {{ file }}, {{ input }})
  • Ссылки на контекст через @

Расположение файлов

Папки по умолчанию

Koda ищет .prompt-файлы в следующих папках:

Путь Описание
.koda/prompts/ Основная папка (v2)
.prompts/ Legacy-папка (v1)
~/.koda/.prompts/ Глобальные промпты (все проекты)

Настройка пути

Можно изменить папку для промптов в config.yaml:

experimental:
  promptPath: .koda/custom-prompts

Синтаксис тела промпта

Базовый пример

---
name: explain
description: Explain code
---

Explain the following code in simple terms:

{{ code }}

Include:
- What the code does
- How it works
- Potential improvements

Переменные Handlebars

Prompt Files v2 используют Handlebars для шаблонизации:

Простые переменные

{{ input }}    — пользовательский ввод
{{ code }}     — выделенный код
{{ file }}     — текущий файл

Условия

{{#if input}}
Additional requirements: {{ input }}
{{else}}
No additional requirements provided.
{{/if}}

Отрицательные условия

{{#unless framework}}
No specific framework requested.
{{/unless}}

Циклы

{{#each items}}
- {{ this }}
{{/each}}

Специальные переменные

{{ code }} — выделенный код

Автоматически подставляет выделенный пользователем код:

---
name: refactor
description: Refactor code
---

Refactor the following code to improve readability:

{{ code }}

Provide the refactored version with explanations.

{{ file }} — текущий файл

Подставляет содержимое текущего файла:

---
name: analyze
description: Analyze file
---

Analyze the structure and quality of this file:

{{ file }}

Suggest improvements for:
- Code organization
- Naming conventions
- Error handling
- Performance

{{ input }} — пользовательский ввод

Текст, введённый после команды /name:

---
name: improve
description: Improve code
---

Improve the code based on these requirements:

**Requirements:** {{ input }}

**Code:**
{{ code }}

Контекст через @

Можно ссылаться на файлы, URL и контекст-провайдеры с помощью @:

Ссылки на файлы

---
name: full-review
description: Full project review
---

Review the code considering the project structure:

@README.md
@src/main.py
@package.json

Focus on consistency and best practices.

Относительные пути

@src/utils/helper.py           # Относительно корня workspace
@../shared/types.ts            # Относительно текущей папки
@/Users/me/project/config.yaml # Абсолютный путь

URL

@https://docs.example.com/api  # Веб-страница
@https://github.com/repo/file  # GitHub файл

Контекст-провайдеры

@currentFile    # Текущий файл
@terminal       # Вывод терминала
@os             # Информация об ОС
@repo-map       # Карта репозитория
@diff           # Текущие изменения

Системное сообщение

Можно задать системное сообщение внутри промпта:

---
name: expert-coder
description: Expert coding assistant
---

<system>
You are an expert software engineer with deep knowledge of:
- Software architecture
- Design patterns
- Best practices
- Security considerations

Always provide clear, well-structured answers with code examples.
</system>

{{ code }}

Подключение в config.yaml

Базовое подключение

prompts:
  - uses: ./.koda/prompts/my-prompt

Несколько промптов

prompts:
  - uses: ./.koda/prompts/code-review
  - uses: ./.koda/prompts/unit-tests
  - uses: ./.koda/prompts/documentation

С переопределениями

prompts:
  - uses: ./.koda/prompts/review
    override:
      description: Custom review description

Практические примеры

Код-ревью

---
name: review
description: Comprehensive code review
version: 2
---

<system>
You are a senior code reviewer with expertise in:
- Code quality
- Security
- Performance
- Maintainability
</system>

Review the following code:

{{ code }}

{{#if input}}
Focus especially on: {{ input }}
{{/if}}

Provide feedback on:
1. **Bugs and errors** - Identify any potential issues
2. **Security** - Check for vulnerabilities
3. **Performance** - Suggest optimizations
4. **Style** - Code consistency and readability
5. **Best practices** - Industry standards adherence

For each issue, provide:
- Severity (Critical/High/Medium/Low)
- Description
- Suggested fix

Генерация тестов

---
name: test
description: Generate unit tests
version: 2
---

Generate comprehensive unit tests for the following code:

{{ code }}

{{#if framework}}
Use {{ framework }} testing framework.
{{else}}
Use appropriate testing framework for the language.
{{/if}}

{{#if input}}
Additional requirements:
{{ input }}
{{/if}}

Include:
- Happy path tests
- Edge cases
- Error handling
- Mock external dependencies

Provide tests ready to run.

Документирование

---
name: document
description: Add documentation
version: 2
---

Add comprehensive documentation to the code:

{{ code }}

{{#if language}}
Use {{ language }} documentation conventions.
{{else}}
Use standard documentation conventions.
{{/if}}

Include:
- Module/file-level docstring
- Function/method docstrings
- Parameter descriptions (@param)
- Return value descriptions (@returns)
- Exception documentation (@throws)
- Usage examples

@README.md

Рефакторинг

---
name: refactor
description: Refactor code
version: 2
---

Refactor the following code to improve:

{{ code }}

{{#if input}}
Focus areas:
{{ input }}
{{else}}
Focus areas:
- Readability
- Maintainability
- Performance
- SOLID principles
{{/if}}

Provide:
1. Analysis of current issues
2. Refactored code
3. Explanation of changes
4. Migration notes if breaking changes

@src/**/*.py

Генерация кода

---
name: generate
description: Generate code from specification
version: 2
---

Generate code based on the specification:

{{#if input}}
**Specification:**
{{ input }}
{{else}}
**Specification:** (not provided - ask for clarification)
{{/if}}

{{#if language}}
**Target language:** {{ language }}
{{/if}}

{{#if framework}}
**Framework:** {{ framework }}
{{/if}}

Requirements:
- Follow best practices
- Include error handling
- Add type hints
- Write self-documenting code
- Include usage examples

@package.json

Отладка

---
name: debug
description: Debug an issue
version: 2
---

Help debug the following issue:

{{#if input}}
**Problem description:**
{{ input }}
{{/if}}

**Code:**
{{ code }}

{{#if error}}
**Error message:**
{{ error }}
{{/if}}

@terminal

Steps to diagnose:
1. Analyze the error message
2. Identify root cause
3. Suggest potential fixes
4. Provide corrected code

Оптимизация

---
name: optimize
description: Optimize performance
version: 2
---

Analyze and optimize the performance of:

{{ code }}

{{#if input}}
**Specific concerns:**
{{ input }}
{{/if}}

Focus on:
- Time complexity
- Space complexity
- Memory usage
- Unnecessary operations
- Caching opportunities
- Algorithm improvements

Provide:
1. Performance analysis
2. Bottleneck identification
3. Optimized code
4. Benchmarking suggestions

Продвинутые возможности

Вложенные промпты

Можно ссылаться на другие .prompt-файлы:

---
name: full-analysis
description: Complete code analysis
---

@./.koda/prompts/review.prompt
@./.koda/prompts/security.prompt
@./.koda/prompts/performance.prompt

Provide a consolidated report.

Частичные шаблоны

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

{{> common-instructions }}

{{ code }}

Динамический контекст

Комбинируйте多个 контекст-провайдеров:

---
name: pr-review
description: Pull request review
---

Review this pull request:

@diff
@currentFile
@README.md

{{#if input}}
**PR description:**
{{ input }}
{{/if}}

Check for:
- Code quality
- Test coverage
- Documentation updates
- Breaking changes

Рекомендации

Хорошие практики

1. Модульность:

# ✅ Хорошо: отдельные файлы для разных задач
.koda/prompts/
  review.prompt
  test.prompt
  document.prompt
  refactor.prompt

2. Документирование:

# ✅ Хорошо: понятное имя и описание
---
name: security-audit
description: Security-focused code audit
---

3. Структурирование:

# ✅ Хорошо: чёткая структура
<system>Role definition</system>

Context:
{{ code }}

Task:
{{ input }}

Output format:
- Analysis
- Findings
- Recommendations

4. Переиспользование:

# ✅ Хорошо: переиспользование через @
@./.koda/prompts/common-review-section.prompt

Чего избегать

1. Слишком большие файлы:

# ❌ Плохо: огромный промпт
# Разбейте на несколько файлов

2. Жёстко заданные пути:

# ❌ Плохо: абсолютные пути
@/Users/username/specific/path/file.py

# ✅ Хорошо: относительные пути
@src/file.py

3. Избыточная информация:

# ❌ Плохо: дублирование контекста
{{ code }}
{{ code }}
{{ file }}  # если file == code

# ✅ Хорошо: только необходимый контекст
{{ code }}

Производительность

Оптимизация размера:

  • Избегайте дублирования контекста
  • Используйте точечные ссылки на файлы
  • Очищайте неиспользуемые промпты

Кэширование:

  • Koda кэширует рендеринг промптов
  • Изменения в .prompt-файлах требуют перезагрузки конфига

Отладка

Проверка синтаксиса

# Проверка YAML-преамбулы
yamllint .koda/prompts/example.prompt

Тестирование промпта

  1. Создайте файл .koda/prompts/test.prompt
  2. Добавьте отладочный вывод:
---
name: test-debug
description: Debug test
---

**Debug info:**
- Input: {{ input }}
- Code length: {{ code.length }}
- Available context: {{ this }}

{{ code }}
  1. Вызовите через /test-debug

Логирование

Для сложных промптов добавьте вывод промежуточных значений:

---
name: debug-vars
description: Debug variable substitution
---

**Variables:**
{{#if input}}
- input: {{ input }}
{{/if}}

{{#if code}}
- code: [{{ code.length }} chars]
{{/if}}

{{#if file}}
- file: {{ file }}
{{/if}}

Интеграция с другими функциями

С правилами (rules)

Промпты работают совместно с правилами:

~/.koda/config.yaml
rules:
  - Always use TypeScript
  - Write tests for new code
  - Follow company style guide

prompts:
  - uses: ./.koda/prompts/implement

С моделями

Можно указать предпочтительную модель:

---
name: complex-task
description: Complex analysis
model: claude-3-7-sonnet
temperature: 0.3
---

Perform detailed analysis...

С контекст-провайдерами

Используйте контекст-провайдеры в промптах:

---
name: terminal-debug
description: Debug with terminal
---

Analyze the terminal output:

@terminal

{{ code }}

Identify the issue and suggest fixes.

Миграция с v1 на v2

Изменения в синтаксисе

v1:

name: Example
---

Explain: {{{ input }}}

v2:

---
name: Example
version: 2
---

Explain: {{ input }}

Автоматическая миграция

Koda автоматически определяет версию по наличию version: 2 в преамбуле.

Совместимость

  • v1 промпты продолжают работать
  • v2 функции недоступны в v1
  • Рекомендуется миграция на v2

См. также