Контекст-провайдеры¶
Контекст-провайдеры добавляют к вашему сообщению данные из проекта, IDE и внешних сервисов: файлы, фрагменты кода, изменения git, вывод терминала, ошибки и другое. Чтобы выбрать провайдер, введите @ в поле ввода.
Важно писать их вручную и выбирать из выпадающего меню!
Например, если вы скопируете @diff в поле ввода, то он не отработает и отправится текстом как есть.
Нужно написать @, чтобы Koda стала предлагать варианты для добавления в сообщение.
Продолжайте набирать текст, чтобы подсказки были точнее.
Для добавления выбранного элемента в контекст, нажмите Enter.
Провайдеры и инструменты агента¶
Добавить содержимое файла в контекст модели можно двумя способами: упомянуть его через @ или попросить агента прочитать файл инструментом read_file.
Результат похож, но принцип работы разный.
| Контекст-провайдер | Инструмент агента | |
|---|---|---|
| Кто решает | Вы — выбираете провайдер через @ | Модель — сама решает, какой инструмент вызвать |
| Когда собираются данные | Один раз, при отправке сообщения, до ответа модели | В процессе работы, столько раз, сколько нужно модели |
| Что видит модель | Готовые данные прямо в вашем сообщении | Результат каждого вызова, после которого она решает, что делать дальше |
| Подтверждение | Не требуется: провайдеры только читают данные | Зависит от политики инструмента |
| В каких режимах работает | Во всех режимах: чате, агенте и планировании | В чате — только читающие, в планировании — читающие и терминал, в агенте — все |
| Где настраивается | Секция context файла config.yaml |
Настройки инструментов в интерфейсе |
Главное отличие: провайдер — это снимок данных на момент отправки. Он сохраняется в истории диалога и не обновляется сам. Если вы исправили файл или снова запустили тесты, упомяните провайдер ещё раз в новом сообщении.
Инструменты, наоборот, позволяют модели исследовать проект пошагово: найти файл, прочитать его, проверить догадку и вернуться к поиску.
Многие провайдеры имеют близкий по смыслу инструмент:
| Провайдер | Инструмент | В чём разница |
|---|---|---|
@file |
read_file |
Провайдер добавляет файл целиком, инструмент может читать его по частям |
@codebase |
codebase_tool |
Провайдер ищет по тексту всего сообщения, модель формулирует запрос сама |
@search |
grep_search |
Провайдер ищет по вашему запросу, модель может искать многократно |
@tree |
ls, file_glob_search |
Провайдер добавляет всё дерево сразу, модель смотрит только нужные папки |
@terminal |
run_terminal_command |
Провайдер берёт вывод уже выполненной вами команды, инструмент запускает новую |
@url |
fetch_url_content |
Провайдер загружает страницу до отправки, модель — по ходу работы |
Когда что выбирать
Используйте провайдеры, когда вы точно знаете, какие данные нужны: конкретный файл, текущие изменения, вывод упавшей команды. Так модель сразу получает нужное и не тратит шаги на поиск.
Если неясно, где искать, опишите задачу словами и дайте агенту найти нужное самостоятельно. О том, как выбирать объём контекста, — на странице «Управление контекстом».
Как добавить контекст¶
- Введите @ в поле ввода — откроется список провайдеров и недавних файлов.
- Начните вводить название, чтобы отфильтровать список.
- Выберите пункт клавишей Enter или мышью.
- Допишите сообщение и отправьте его.
Провайдеры различаются способом выбора данных:
- сразу — например,
@diffили@terminal: данные собираются при отправке без дополнительных шагов; - из списка — например,
@folder: после выбора провайдера открывается подменю, в котором нужно выбрать папку, функцию или другой объект; - по запросу — например,
@search: после выбора провайдера нужно ввести текст запроса.
В одном сообщении можно упомянуть несколько провайдеров, в том числе несколько файлов. Добавленные данные отображаются в диалоге: их можно развернуть и проверить, что именно получила модель.
Кроме @, есть быстрые способы добавить контекст:
- Alt + Enter (на macOS — ⌥⏎) отправляет сообщение вместе с файлом, активным в редакторе;
- ⌘⏎ на macOS отправляет сообщение вместе с результатами
@codebase; - Ctrl/⌘ + L добавляет к сообщению код, выделенный в редакторе.
Ошибки провайдеров
Если провайдер не смог получить данные, Koda покажет уведомление, а сообщение будет отправлено без этих данных.
Провайдеры по умолчанию¶
При первом запуске Koda создаёт файл config.yaml с набором провайдеров, который зависит от IDE.
Провайдеры @file и @codebase доступны всегда, даже если их нет в файле.
| Провайдер | VS Code | JetBrains |
|---|---|---|
@file |
||
@codebase |
||
@code |
— | |
@folder |
||
@diff |
||
@terminal |
— | |
@problems |
— |
В JetBrains провайдеры @terminal и @problems работают, но их нужно добавить в конфигурацию вручную.
Файл¶
Добавляет содержимое выбранного файла целиком.
В списке после @ сразу видны недавно открытые файлы.
Чтобы найти другой файл, начните вводить его имя.
Файлы, исключённые через .gitignore и .kodaignore, в списке не показываются.
Если файл не помещается в окно контекста выбранной модели, Koda покажет предупреждение и не добавит его. В этом случае выделите нужный фрагмент и нажмите Ctrl/⌘ + L или попросите агента найти нужное место в файле.
Кодовая база¶
@codebase ищет в индексе проекта фрагменты кода, которые относятся к вашему сообщению, и добавляет найденное.
Запросом служит весь текст сообщения, поэтому формулируйте его конкретно: упоминайте названия функций, модулей и термины из кода.
Для работы провайдера нужна индексация кодовой базы.
По умолчанию она выключена: включите её в настройках плагина.
Без индекса @codebase находит только фрагменты недавно изменённых файлов.
Статус индексации отображается на вкладке Индексация в настройках.
Какие файлы попадают в индекс, задаётся файлами .gitignore и .kodaignore.
Количество фрагментов в результате задаётся параметром nFinal.
Тонкая настройка индексации описана в разделе indexingOptions, а решение проблем — на странице «Проблемы с индексацией».
Инструмент codebase_tool
В режимах агента и планирования модель может искать по тому же индексу сама с помощью инструмента codebase_tool, подбирая запросы по ходу работы.
Код¶
@code добавляет код конкретной функции, класса или метода.
После выбора провайдера начните вводить имя — в подменю появятся подходящие объявления из проекта.
Список объявлений строится по индексу кодовой базы, поэтому без индексации он пустой.
Провайдер доступен только в VS Code.
Папка¶
@folder ищет фрагменты кода, которые относятся к вашему сообщению, только внутри выбранной папки.
Он работает так же, как @codebase, но с ограничением по папке.
Учтите, что в контекст попадают не все файлы папки, а только найденные фрагменты.
Как и @codebase, провайдер полноценно работает только при включённой индексации.
Чтобы показать модели структуру папки, используйте @tree или попросите агента изучить её.
Изменения git¶
@diff добавляет текущие изменения git во всех репозиториях рабочей области.
Новые файлы, ещё не добавленные в git, в результат не попадают.
По умолчанию в VS Code провайдер добавляет и подготовленные к коммиту, и неподготовленные изменения, а в JetBrains — только неподготовленные.
Чтобы видеть только подготовленные изменения, установите параметр includeUnstaged в false.
Сообщение коммита
Если вы часто генерируете сообщения коммитов, создайте пользовательскую слеш-команду с переменной {{diff}}.
Терминал¶
@terminal добавляет последнюю команду, выполненную в терминале IDE, и её вывод.
В VS Code используется активный терминал, а в JetBrains — выбранная вкладка встроенного терминала. Если терминалов нет, контекст будет пустым.
Провайдер видит только уже выполненную команду.
Если нужно запустить команду и разобрать результат, поручите это агенту: он выполнит её инструментом run_terminal_command.
Проблемы¶
@problems добавляет диагностику активного в редакторе файла: текст каждой ошибки или предупреждения и фрагмент кода вокруг неё.
В VS Code учитываются все сообщения панели Problems для этого файла, в JetBrains — только ошибки и предупреждения. Если проблем нет, модель получит сообщение об их отсутствии.
Другие провайдеры¶
Остальные провайдеры по умолчанию выключены.
Чтобы включить провайдер, добавьте его в секцию context файла config.yaml, сохранив уже перечисленные:
context:
- provider: code
- provider: diff
- provider: terminal
- provider: problems
- provider: folder
- provider: codebase
# новые провайдеры
- provider: open
- provider: tree
- provider: url
- provider: search
Провайдеры для работы с проектом и IDE:
currentFile— активный в редакторе файл;open— все открытые файлы;tree— дерево файлов рабочей области;repo-map— карта проекта: файлы и сигнатуры функций и классов;search— текстовый поиск по проекту;commit— коммиты git вместе с изменениями;os— операционная система и архитектура процессора;clipboard— недавно скопированный в редакторе текст (только VS Code);debugger— переменные и стек вызовов при отладке (только VS Code).
Провайдеры для внешних источников:
url— содержимое веб-страницы;http— данные от вашего HTTP-сервера;google— результаты поиска Google;issue— задачи GitHub;gitlab-mr— merge request GitLab для текущей ветки;jira— задачи Jira;postgresиdatabase— структура таблиц баз данных;discord— сообщения из канала Discord.
Подробное описание и параметры каждого провайдера — в разделе provider справочника конфигурации.
Ресурсы MCP-серверов
Если подключённый MCP-сервер предоставляет ресурсы, они появляются в меню @ отдельным пунктом с именем сервера.
Добавлять такой провайдер в секцию context не нужно.
Если провайдер не работает¶
Провайдера нет в меню¶
- Проверьте, что провайдер перечислен в секции
contextфайлаconfig.yamlили проектного.kodarc.json. - Проверьте, что провайдер поддерживается вашей IDE: например,
@code,@debuggerи@clipboardработают только в VS Code. - Проверьте написание значения
provider: провайдеры с неизвестным именем не загружаются.
Провайдер ничего не находит¶
- Для
@codebase,@folderи@codeвключите индексацию и дождитесь её завершения. - Если индекс устарел, запустите переиндексацию на вкладке Индексация или командой Koda: Codebase Force Re-Index.
- Для
@codebaseуточните сообщение: добавьте названия функций, классов и модулей. - Для
@terminalпроверьте, что команда выполнялась в терминале IDE, а не во внешнем окне. - Для
@problemsоткройте нужный файл в редакторе и сделайте его активным.
Слишком много контекста¶
Данные провайдеров занимают место в окне контекста модели и остаются в истории диалога.
Большие файлы, @tree или @open в крупном проекте могут вытеснить важную информацию.
Добавляйте только то, что действительно нужно для задачи, а в длинных диалогах полагайтесь на сжатие контекста.