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

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

Это источники дополнительных данных, которые добавляют релевантную информацию в запросы к AI через символ @. Такими источниками могут быть файлы, директории, терминал и пр.

Пример:

@src/utils.ts проведи код-ревью

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

Встроенные провайдеры

Koda поставляется с набором встроенных провайдеров:

Провайдер Команда Описание
File @file Добавить файл проекта
Code @code Выделенный код из редактора
Codebase @codebase Поиск по кодовой базе
Diff @diff Изменения git
Terminal @terminal Содержимое терминала
Problems @problems Ошибки и предупреждения
Folder @folder Файлы в папке
URL @url Контент веб-страницы
Search @search Поиск по проекту

File — добавление файла

Как использовать:

  1. Введите @ в чате
  2. Начните вводить files или имя файла
  3. Выберите файл из списка нажатием ⏎ Enter или кликом мыши
  4. Допишите вопрос

Примеры:

@src/utils/auth.ts Проверь на уязвимости
@package.json Какие зависимости устарели?
@README.md Улучши документацию

К одному запросу можно добавлять множество файлов!

Например, если спросить:

@src/auth.ts @src/types.ts Как они связаны?
то модель проанализирует импорты, зависимости между этими файлами и общие типы.


Code — выделенный в редакторе код

  1. Выделите код в редакторе
  2. Нажмите Ctrl/⌘ + L — выделение добавится к запросу
  3. Перейдите в панель Koda и допишите вопрос

Как использовать:

  1. Введите @codebase
  2. Добавьте поисковый запрос
  3. Koda найдёт релевантный код и добавит в контекст
  4. Ответит на вопрос

Примеры:

@codebase Где используется аутентификация?
@codebase Как обрабатываются ошибки API?
@codebase Найди все GraphQL мутации

Индексация кодовой базы

Koda автоматически индексирует файлы проекта в фоновом режиме и при изменениях. Это индекс используется для @Codebase.

Увидеть статус индексации можно так:

  1. Открыть Настройки
  2. Перейти на вкладку Индексация

Настройка индексации

Какие директории и файлы индексируются:

Индексация уважает .gitignore и .kodaignore — исключённые там директории и файлы не попадают в индекс. Подробнее — на странице .kodaignore.

Отключение индексации:

~/.koda/config.yaml
disableIndexing: true

Тонкая настройка (производительность):

~/.koda/config.yaml
indexingOptions:
  concurrency: 4            # параллельные запросы эмбеддингов
  batchSize: 100            # файлов в одном батче
  chunksPerIteration: 50    # чанков на итерацию эмбеддингов
  disabledIndexes:          # какие индексы не строить
    - sqliteFts

Полный список параметров — в разделе indexingOptions справочника конфигурации.


Diff Provider

Изменения git

Синтаксис:

@diff <вопрос>

Автоматическое добавление:

  1. Сделайте изменения в файлах
  2. Введите @diff в чате
  3. Текущие изменения добавятся

Примеры:

@diff Напиши сообщение для коммита
@diff Какие файлы изменились?
@diff Проверь изменения на ошибки

Когда использовать:

  • Анализ изменений
  • Генерация commit message
  • Код-ревью
  • Проверка перед коммитом

Статус изменений

Diff provider показывает:

  • Изменённые файлы
  • Добавленные строки
  • Удалённые строки
  • Несогласованности

Пример вывода:

Изменения в 3 файлах:
+ 45 строк
- 12 строк

Файлы:
- src/auth.ts (+20, -5)
- src/types.ts (+15, -3)
- src/utils.ts (+10, -4)

Terminal Provider

Содержимое терминала

Синтаксис:

@terminal <вопрос>

Автоматическое добавление:

  1. Выполните команду в терминале
  2. Введите @terminal в чате
  3. Последняя команда и вывод добавятся

Примеры:

@terminal Почему эта команда не работает?
@terminal Как исправить эту ошибку?
@terminal Что означает этот вывод?

Когда использовать:

  • Отладка команд
  • Анализ ошибок
  • Объяснение вывода
  • Поиск решения проблем

В JetBrains IntelliJ (OpenIDE, GigaIDE) провайдер читает встроенный терминал IDE, включая новый терминал с вкладками.

Если открытых терминалов несколько, берётся выбранный, а если терминалов нет вовсе — контекст будет пустым.


Несколько команд

Можно запросить историю команд:

@terminal history

Покажет:

  • Последние 10 команд
  • Их вывод
  • Статус выполнения

Problems Provider

Ошибки и предупреждения

Синтаксис:

@problems <вопрос>

Автоматическое добавление:

  1. Откройте файл с ошибками
  2. Введите @problems в чате
  3. Проблемы из редактора добавятся

Примеры:

@problems Как исправить эти ошибки TypeScript?
@problems Почему здесь предупреждение?
@problems Какие проблемы в файле?

Когда использовать:

  • Исправление ошибок компиляции
  • Анализ предупреждений линтера
  • Типизация кода
  • Рефакторинг

Типы проблем

Problems provider показывает:

  • Errors — ошибки компиляции
  • Warnings — предупреждения
  • Info — информационные сообщения
  • Hints — подсказки

Пример вывода:

Проблемы в src/auth.ts:

❌ Ошибка 2345: Тип 'string' не assignable to 'number'
⚠️ Предупреждение 6133: Переменная 'x' не используется
ℹ️ Info: Файл не отформатирован

Folder Provider

Файлы в папке

Синтаксис:

@folder <путь> <вопрос>

Как использовать:

  1. Введите @folder
  2. Укажите путь к папке
  3. Добавьте вопрос

Примеры:

@folder src/components Какие компоненты здесь есть?
@folder src/api Как организованы API вызовы?
@folder tests Какие тесты написаны?

Когда использовать:

  • Обзор структуры папки
  • Поиск файлов в директории
  • Анализ организации кода
  • Онбординг в проекте

Структура папки

Вывод:

Папка: src/components/

├── Button/
│   ├── Button.tsx
│   ├── Button.test.tsx
│   └── index.ts
├── Input/
│   ├── Input.tsx
│   └── Input.test.tsx
└── Form/
    ├── Form.tsx
    ├── Form.test.tsx
    └── types.ts

Всего: 3 компонента, 8 файлов

URL Provider

Контент веб-страниц

Синтаксис:

@url <URL> <вопрос>

Как использовать:

  1. Введите @url
  2. Добавьте URL страницы
  3. Добавьте вопрос

Примеры:

@url https://react.dev/reference/react/useEffect Как использовать useEffect?
@url https://docs.python.org/3/library/asyncio.html Объясни async/await

Когда использовать:

  • Вопросы по документации
  • Анализ статей
  • Извлечение информации
  • Ссылки на ресурсы

Ограничения

Параметр Значение
Макс. размер страницы ~1 MB
Поддержка JavaScript ❌ Нет
Требуется интернет ✅ Да

Search Provider

Синтаксис:

@search <запрос> <вопрос>

Как использовать:

  1. Введите @search
  2. Добавьте поисковый запрос
  3. Добавьте вопрос

Примеры:

@search authenticate Где используется аутентификация?
@search useEffect Найди все хуки useEffect
@search API endpoints Найди все API endpoints

Когда использовать:

  • Поиск по тексту
  • Поиск функций/классов
  • Поиск паттернов
  • Анализ кодовой базы

Типы поиска

Полнотекстовый поиск:

  • Поиск по содержимому файлов
  • Регистрозависимый
  • Поддержка regex

Семантический поиск:

  • Поиск по смыслу
  • Векторные эмбеддинги
  • Более релевантные результаты

Комбинирование провайдеров

Несколько провайдеров в одном запросе

Можно использовать несколько провайдеров одновременно:

@file src/auth.ts @code Как улучшить эту функцию?

Примеры:

@code @diff Проверь изменения на ошибки
@folder src/components @problems Найди проблемы в компонентах

Цепочки провайдеров

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

1. @codebase Где используется аутентификация?
2. @file src/auth.ts Покажи эту функцию
3. @code Как оптимизировать?

Преимущество:

  • Постепенное углубление в тему
  • Контекст сохраняется между запросами
  • Более точные ответы

Настройка провайдеров

Параметры провайдеров

Некоторые провайдеры поддерживают параметры в секции context файла config.yaml. Полный список провайдеров и их параметров приведён в разделе context справочника конфигурации.

context:
  - provider: codebase
    params:
      nFinal: 10
  - provider: open
    params:
      onlyPinned: true

Решение проблем

Провайдер не работает

Причины:

  • Провайдер отключен
  • Ошибка в конфигурации
  • Нет доступа к ресурсам

Решения:

  1. Проверьте конфигурацию:
    contextProviders:
      - name: "file"
        enabled: true  # Должно быть true
    
  2. Перезагрузите конфигурацию:
  3. Нажмите Reload Config
  4. Или перезапустите IDE
  5. Проверьте логи:
  6. Откройте Developer Tools
  7. Ищите ошибки провайдеров

Недостаточно контекста

Причины:

  • Провайдер не нашёл данные
  • Неправильный запрос
  • Ограничения провайдера

Решения:

  1. Уточните запрос
  2. Используйте другой провайдер:
    @file src/file.ts  # Вместо @codebase
    
  3. Комбинируйте провайдеры:
    @file src/file.ts @code Как улучшить?
    

Лучшие практики

1. Используйте правильный провайдер

✅ Хорошо:

@file src/auth.ts  # Для конкретного файла
@codebase auth     # Для поиска по проекту

❌ Плохо:

@codebase src/auth.ts  # Медленнее чем @file
@file auth             # Не найдёт без пути

2. Комбинируйте провайдеры

✅ Хорошо:

@file src/auth.ts @code Как улучшить эту функцию?

❌ Плохо:

@file src/auth.ts  # Без вопроса

3. Уточняйте запросы

✅ Хорошо: @codebase authentication JWT token

❌ Плохо: @codebase auth


4. Следите за размером контекста

Ограничения:

  • Файлы: ~100 KB
  • Код: ~10 KB
  • Документы: ~50 KB

При больших файлах:

  • Используйте @code для участков
  • Разбейте на части
  • Суммаризуйте