Контекст-провайдеры¶
Это источники дополнительных данных, которые добавляют релевантную информацию в запросы к AI через символ @. Такими источниками могут быть файлы, директории, терминал и пр.
Пример:
Типы контекст-провайдеров¶
Встроенные провайдеры¶
Koda поставляется с набором встроенных провайдеров:
| Провайдер | Команда | Описание |
|---|---|---|
| File | @file |
Добавить файл проекта |
| Code | @code |
Выделенный код из редактора |
| Codebase | @codebase |
Поиск по кодовой базе |
| Diff | @diff |
Изменения git |
| Terminal | @terminal |
Содержимое терминала |
| Problems | @problems |
Ошибки и предупреждения |
| Folder | @folder |
Файлы в папке |
| URL | @url |
Контент веб-страницы |
| Search | @search |
Поиск по проекту |
File — добавление файла¶
Как использовать:
- Введите @ в чате
- Начните вводить
filesили имя файла - Выберите файл из списка нажатием ⏎ Enter или кликом мыши
- Допишите вопрос
Примеры:
@src/utils/auth.ts Проверь на уязвимости
@package.json Какие зависимости устарели?
@README.md Улучши документацию
К одному запросу можно добавлять множество файлов!
Например, если спросить:
то модель проанализирует импорты, зависимости между этими файлами и общие типы.Code — выделенный в редакторе код¶
- Выделите код в редакторе
- Нажмите Ctrl/⌘ + L — выделение добавится к запросу
- Перейдите в панель Koda и допишите вопрос
Codebase — поиск по кодовой базе¶
Как использовать:
- Введите
@codebase - Добавьте поисковый запрос
- Koda найдёт релевантный код и добавит в контекст
- Ответит на вопрос
Примеры:
@codebase Где используется аутентификация?
@codebase Как обрабатываются ошибки API?
@codebase Найди все GraphQL мутации
Индексация кодовой базы¶
Koda автоматически индексирует файлы проекта в фоновом режиме и при изменениях.
Это индекс используется для @Codebase.
Увидеть статус индексации можно так:
- Открыть Настройки
- Перейти на вкладку Индексация
Настройка индексации¶
Исключения:
Включённые типы файлов:
Diff Provider¶
Изменения git¶
Синтаксис:
Автоматическое добавление:
- Сделайте изменения в файлах
- Введите
@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в чате - Последняя команда и вывод добавятся
Примеры:
@terminal Почему эта команда не работает?
@terminal Как исправить эту ошибку?
@terminal Что означает этот вывод?
Когда использовать: - Отладка команд - Анализ ошибок - Объяснение вывода - Поиск решения проблем
Несколько команд¶
Можно запросить историю команд:
Покажет: - Последние 10 команд - Их вывод - Статус выполнения
Problems Provider¶
Ошибки и предупреждения¶
Синтаксис:
Автоматическое добавление:
- Откройте файл с ошибками
- Введите
@problemsв чате - Проблемы из редактора добавятся
Примеры:
@problems Как исправить эти ошибки TypeScript?
@problems Почему здесь предупреждение?
@problems Какие проблемы в файле?
Когда использовать: - Исправление ошибок компиляции - Анализ предупреждений линтера - Типизация кода - Рефакторинг
Типы проблем¶
Problems provider показывает: - Errors — ошибки компиляции - Warnings — предупреждения - Info — информационные сообщения - Hints — подсказки
Пример вывода:
Проблемы в src/auth.ts:
❌ Ошибка 2345: Тип 'string' не assignable to 'number'
⚠️ Предупреждение 6133: Переменная 'x' не используется
ℹ️ Info: Файл не отформатирован
Folder Provider¶
Файлы в папке¶
Синтаксис:
Как использовать:
- Введите
@folder - Укажите путь к папке
- Добавьте вопрос
Примеры:
@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 страницы
- Добавьте вопрос
Примеры:
@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 - Добавьте поисковый запрос
- Добавьте вопрос
Примеры:
@search authenticate Где используется аутентификация?
@search useEffect Найди все хуки useEffect
@search API endpoints Найди все API endpoints
Когда использовать: - Поиск по тексту - Поиск функций/классов - Поиск паттернов - Анализ кодовой базы
Типы поиска¶
Полнотекстовый поиск: - Поиск по содержимому файлов - Регистрозависимый - Поддержка regex
Семантический поиск: - Поиск по смыслу - Векторные эмбеддинги - Более релевантные результаты
Комбинирование провайдеров¶
Несколько провайдеров в одном запросе¶
Можно использовать несколько провайдеров одновременно:
Примеры:
@code @diff Проверь изменения на ошибки
@folder src/components @problems Найди проблемы в компонентах
Цепочки провайдеров¶
Используйте провайдеры последовательно:
1. @codebase Где используется аутентификация?
2. @file src/auth.ts Покажи эту функцию
3. @code Как оптимизировать?
Преимущество: - Постепенное углубление в тему - Контекст сохраняется между запросами - Более точные ответы
Пользовательские провайдеры¶
Создание своего провайдера¶
Файл: .koda/context-providers/my-provider.ts
import { ContextProvider } from "core";
const MyProvider: ContextProvider = {
name: "my-provider",
description: "Мой контекст-провайдер",
getContextItems: async (query, ide) => {
// Логика получения контекста
const items = await getMyContext(query);
return items.map(item => ({
name: item.name,
description: item.description,
content: item.content,
uri: item.uri,
}));
},
};
export default MyProvider;
Регистрация провайдера¶
Файл: config.yaml
contextProviders:
- name: "my-provider"
params:
apiKey: "your-api-key"
endpoint: "https://api.example.com"
Использование:
Примеры пользовательских провайдеров¶
1. Jira Issues¶
const JiraProvider: ContextProvider = {
name: "jira",
description: "Jira задачи",
getContextItems: async (query, ide) => {
const issues = await fetchJiraIssues(query);
return issues.map(issue => ({
name: issue.key,
description: issue.summary,
content: issue.description,
uri: issue.url,
}));
},
};
2. Database Schema¶
const DatabaseProvider: ContextProvider = {
name: "db",
description: "Схема базы данных",
getContextItems: async (query, ide) => {
const tables = await fetchDatabaseSchema(query);
return tables.map(table => ({
name: table.name,
description: `Таблица: ${table.name}`,
content: table.schema,
uri: `db://${table.name}`,
}));
},
};
3. API Documentation¶
const APIProvider: ContextProvider = {
name: "api",
description: "API документация",
getContextItems: async (query, ide) => {
const endpoints = await fetchAPIEndpoints(query);
return endpoints.map(endpoint => ({
name: endpoint.path,
description: endpoint.method,
content: endpoint.documentation,
uri: endpoint.url,
}));
},
};
Настройка провайдеров¶
Включение/выключение¶
Файл: config.yaml
contextProviders:
- name: "file"
enabled: true
- name: "code"
enabled: true
- name: "docs"
enabled: false # Отключить
Параметры провайдеров¶
Некоторые провайдеры поддерживают параметры:
contextProviders:
- name: "docs"
params:
maxResults: 5
includeExamples: true
- name: "codebase"
params:
maxResults: 10
useSemanticSearch: true
Приоритет провайдеров¶
Порядок в конфигурации определяет приоритет:
contextProviders:
- name: "file" # Высший приоритет
- name: "code"
- name: "docs"
- name: "codebase" # Низший приоритет
Решение проблем¶
Провайдер не работает¶
Причины: - Провайдер отключен - Ошибка в конфигурации - Нет доступа к ресурсам
Решения:
-
Проверьте конфигурацию:
-
Перезагрузите конфигурацию:
- Нажмите Reload Config
-
Или перезапустите IDE
-
Проверьте логи:
- Откройте Developer Tools
- Ищите ошибки провайдеров
Недостаточно контекста¶
Причины:
- Провайдер не нашёл данные
- Неправильный запрос
- Ограничения провайдера
Решения:
- Уточните запрос
-
Используйте другой провайдер:
-
Комбинируйте провайдеры:
Лучшие практики¶
1. Используйте правильный провайдер¶
✅ Хорошо:
❌ Плохо:
2. Комбинируйте провайдеры¶
✅ Хорошо:
❌ Плохо:
3. Уточняйте запросы¶
✅ Хорошо: @codebase authentication JWT token
❌ Плохо: @codebase auth
4. Следите за размером контекста¶
Ограничения:
- Файлы: ~100 KB
- Код: ~10 KB
- Документы: ~50 KB
При больших файлах:
- Используйте
@codeдля участков - Разбейте на части
- Суммаризуйте
Интеграция с другими функциями¶
С суммаризацией¶
Контекст учитывается при суммаризации:
С навыками¶
Навыки могут использовать контекст:
С MCP¶
MCP серверы могут быть контекст-провайдерами:
Регистрация провайдера¶
В коде:
В конфигурации: