385 lines
12 KiB
Markdown
385 lines
12 KiB
Markdown
# 🔍 Руководство по отладке AI ревьювера
|
||
|
||
## Что добавлено
|
||
|
||
### 1. **Детальное логирование всего процесса** 📊
|
||
|
||
Теперь в терминале backend вы увидите ВЕСЬ процесс работы агента:
|
||
|
||
#### **Этап 0: Информация о PR** ⭐ НОВОЕ!
|
||
```
|
||
📋📋📋📋📋 ИНФОРМАЦИЯ О PR 📋📋📋📋📋
|
||
|
||
📝 Название: Добавление функционала редактирования аватара
|
||
👤 Автор: primakov
|
||
🔀 Ветки: feature/avatar → main
|
||
📄 Описание:
|
||
--------------------------------------------------------------------------------
|
||
Реализована возможность загрузки и изменения пользовательского аватара.
|
||
Добавлен предпросмотр перед сохранением.
|
||
--------------------------------------------------------------------------------
|
||
📋📋📋📋📋📋📋📋📋📋📋📋📋📋📋📋📋📋
|
||
```
|
||
|
||
#### **Этап 1: Получение файлов из PR**
|
||
```
|
||
📥📥📥📥📥📥📥📥📥📥 ПОЛУЧЕНИЕ ФАЙЛОВ ИЗ PR 📥📥📥📥📥📥📥📥📥📥
|
||
|
||
📊 Получено файлов из API: 1
|
||
|
||
1. src/pages/SearchCharacterPage.tsx
|
||
Status: modified
|
||
+4 -4
|
||
Patch: ДА (1234 символов)
|
||
Первые 200 символов patch:
|
||
@@ -55,7 +55,7 @@ export const SearchCharacterPage = ...
|
||
|
||
✅ Файлов для ревью: 1
|
||
- src/pages/SearchCharacterPage.tsx (typescript)
|
||
```
|
||
|
||
#### **Этап 2: Анализ каждого файла**
|
||
```
|
||
🔬🔬🔬🔬🔬 НАЧАЛО АНАЛИЗА ФАЙЛОВ 🔬🔬🔬🔬🔬
|
||
Файлов для анализа: 1
|
||
|
||
📂 Файл 1/1: src/pages/SearchCharacterPage.tsx
|
||
Язык: typescript
|
||
Размер patch: 1234 символов
|
||
Additions: 4, Deletions: 4
|
||
```
|
||
|
||
#### **Этап 3: Детали анализа LLM**
|
||
```
|
||
================================================================================
|
||
🔍 АНАЛИЗ ФАЙЛА: src/pages/SearchCharacterPage.tsx
|
||
================================================================================
|
||
|
||
📋 КОНТЕКСТ PR: ⭐ НОВОЕ!
|
||
--------------------------------------------------------------------------------
|
||
Название: Добавление функционала редактирования аватара
|
||
Описание: Реализована возможность загрузки и изменения аватара...
|
||
--------------------------------------------------------------------------------
|
||
|
||
📝 DIFF (1234 символов):
|
||
--------------------------------------------------------------------------------
|
||
@@ -55,7 +55,7 @@ export const SearchCharacterPage = () => {
|
||
search: searchValue
|
||
}),
|
||
headers: {
|
||
- 'Content-Type': 'application/json'
|
||
+ 'Content-Type': 'shmapplication/json' // <-- ОШИБКА!
|
||
}
|
||
--------------------------------------------------------------------------------
|
||
|
||
💭 ПРОМПТ (2500 символов):
|
||
--------------------------------------------------------------------------------
|
||
Ты СТРОГИЙ code reviewer. Твоя задача - найти ВСЕ ошибки в коде...
|
||
--------------------------------------------------------------------------------
|
||
|
||
⏳ Отправка запроса к Ollama (codellama:7b)...
|
||
|
||
🤖 ОТВЕТ AI (500 символов):
|
||
--------------------------------------------------------------------------------
|
||
{
|
||
"comments": [
|
||
{
|
||
"line": 58,
|
||
"severity": "ERROR",
|
||
"message": "Опечатка в Content-Type..."
|
||
}
|
||
]
|
||
}
|
||
--------------------------------------------------------------------------------
|
||
|
||
✅ Найдено комментариев: 1
|
||
|
||
1. Строка 58:
|
||
Severity: ERROR
|
||
Message: Опечатка в Content-Type: 'shmapplication/json'...
|
||
================================================================================
|
||
```
|
||
|
||
### 2. **Улучшенные промпты** 🎯
|
||
|
||
Промпт теперь **пошаговый** с конкретными примерами:
|
||
|
||
```
|
||
ПОШАГОВЫЙ АНАЛИЗ каждой строки с +:
|
||
|
||
Шаг 1: ЧИТАЙ КАЖДУЮ СТРОКУ с + внимательно
|
||
Шаг 2: ПРОВЕРЬ каждую строку на:
|
||
a) ОПЕЧАТКИ - неправильные слова, typos
|
||
b) СИНТАКСИС - скобки, кавычки, запятые
|
||
c) ЛОГИКА - правильность кода
|
||
d) REACT ПРАВИЛА - key, hooks, JSX
|
||
|
||
КОНКРЕТНЫЕ ПРИМЕРЫ ОШИБОК:
|
||
❌ 'shmapplication/json' вместо 'application/json'
|
||
❌ {condition && (<div>text</div>} - пропущена )
|
||
❌ key на неправильном элементе
|
||
```
|
||
|
||
### 3. **Увеличена temperature** 🌡️
|
||
|
||
- **Было:** `temperature=0.1` (очень консервативно)
|
||
- **Стало:** `temperature=0.3` (более внимательный анализ)
|
||
|
||
---
|
||
|
||
## Как использовать
|
||
|
||
### Шаг 1: Запустите ревью
|
||
|
||
1. Откройте http://localhost:5173
|
||
2. Перейдите в **Репозитории**
|
||
3. Нажмите **🔍 Проверить сейчас** или **🔄 Повторить ревью**
|
||
|
||
### Шаг 2: Смотрите логи в терминале backend
|
||
|
||
В терминале где запущен backend (`uvicorn app.main:app`) вы увидите **весь процесс**:
|
||
|
||
1. **Какие файлы получены** из Gitea API
|
||
2. **Какой patch** для каждого файла
|
||
3. **Какой промпт** отправлен в Ollama
|
||
4. **Что ответила AI** (полный ответ)
|
||
5. **Сколько комментариев** найдено
|
||
6. **Детали каждого комментария**
|
||
|
||
### Шаг 3: Анализируйте
|
||
|
||
#### Если AI не находит ошибки:
|
||
|
||
**Проверьте логи:**
|
||
|
||
1. **Patch приходит?**
|
||
```
|
||
Patch: ДА (1234 символов)
|
||
```
|
||
- Если **НЕТ** - проблема с Gitea API
|
||
- Если **ДА** - идем дальше
|
||
|
||
2. **Patch содержит ошибки?**
|
||
```
|
||
Первые 200 символов patch:
|
||
+ 'Content-Type': 'shmapplication/json'
|
||
```
|
||
- Проверьте что опечатка видна в patch
|
||
|
||
3. **Что ответила AI?**
|
||
```
|
||
🤖 ОТВЕТ AI:
|
||
{"comments": []}
|
||
```
|
||
- Если `[]` - AI не увидела проблему
|
||
- **Причина:** модель `codellama:7b` может быть недостаточно хороша
|
||
|
||
#### Возможные проблемы:
|
||
|
||
**1. Модель codellama:7b не видит ошибки**
|
||
|
||
CodeLlama оптимизирована для генерации кода, а не для ревью.
|
||
|
||
**Решения:**
|
||
```bash
|
||
# Попробуйте другую модель:
|
||
|
||
# Вариант 1: Mistral (лучше для анализа)
|
||
ollama pull mistral:7b
|
||
|
||
# Вариант 2: Llama 3 (самая умная)
|
||
ollama pull llama3:8b
|
||
|
||
# Вариант 3: DeepSeek Coder (специально для кода)
|
||
ollama pull deepseek-coder:6.7b
|
||
```
|
||
|
||
Затем в `backend/.env`:
|
||
```bash
|
||
OLLAMA_MODEL=mistral:7b
|
||
# или
|
||
OLLAMA_MODEL=llama3:8b
|
||
# или
|
||
OLLAMA_MODEL=deepseek-coder:6.7b
|
||
```
|
||
|
||
**2. Patch не содержит нужных строк**
|
||
|
||
Gitea может не давать полный patch для больших файлов.
|
||
|
||
**Решение:** Проверьте в логах что именно в patch.
|
||
|
||
**3. AI отвечает не в JSON формате**
|
||
|
||
Бывает модель пишет текст вместо JSON.
|
||
|
||
**Решение:** В логах вы увидите:
|
||
```
|
||
⚠️ Комментариев не найдено! AI не нашел проблем.
|
||
```
|
||
|
||
Смотрите полный ответ AI и меняйте модель.
|
||
|
||
---
|
||
|
||
## Рекомендуемые модели
|
||
|
||
### Для code review (от лучшей к худшей):
|
||
|
||
1. **mistral:7b** ⭐⭐⭐⭐⭐ **РЕКОМЕНДУЕТСЯ!**
|
||
- ✅ Лучше всего следует инструкциям
|
||
- ✅ Правильный JSON формат
|
||
- ✅ Хороший анализ кода
|
||
- ⚡ Быстрая (~4GB RAM)
|
||
|
||
2. **llama3:8b** ⭐⭐⭐⭐⭐
|
||
- ✅ Самая умная модель
|
||
- ✅ Лучший анализ кода
|
||
- ⚠️ Требует ~5GB RAM
|
||
|
||
3. **deepseek-coder:6.7b** ⭐⭐⭐⭐
|
||
- ✅ Специально для кода
|
||
- ✅ Понимает много языков
|
||
- ⚠️ Требует ~4GB RAM
|
||
|
||
4. **codellama:7b** ⭐⭐ **НЕ РЕКОМЕНДУЕТСЯ**
|
||
- ❌ Отвечает текстом вместо JSON
|
||
- ❌ Не подходит для code review
|
||
- ⚠️ Для генерации кода, а не анализа
|
||
|
||
### Как сменить модель:
|
||
|
||
```bash
|
||
# 1. Скачайте Mistral (РЕКОМЕНДУЕТСЯ)
|
||
ollama pull mistral:7b
|
||
|
||
# 2. Обновите .env
|
||
echo "OLLAMA_MODEL=mistral:7b" >> backend/.env
|
||
|
||
# 3. Перезапустите backend
|
||
# Ctrl+C в терминале backend
|
||
# Затем снова: python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
|
||
|
||
# Или для самой умной:
|
||
ollama pull llama3:8b
|
||
# И обновите: OLLAMA_MODEL=llama3:8b
|
||
```
|
||
|
||
---
|
||
|
||
## Пример полного лога успешного ревью
|
||
|
||
```
|
||
📥📥📥📥📥 ПОЛУЧЕНИЕ ФАЙЛОВ ИЗ PR 📥📥📥📥📥
|
||
|
||
📊 Получено файлов из API: 1
|
||
1. src/file.tsx
|
||
Status: modified
|
||
+2 -2
|
||
Patch: ДА (500 символов)
|
||
|
||
✅ Файлов для ревью: 1
|
||
|
||
🔬🔬🔬 НАЧАЛО АНАЛИЗА ФАЙЛОВ 🔬🔬🔬
|
||
|
||
📂 Файл 1/1: src/file.tsx
|
||
|
||
================================================================================
|
||
🔍 АНАЛИЗ ФАЙЛА: src/file.tsx
|
||
================================================================================
|
||
|
||
📝 DIFF (500 символов):
|
||
+ 'Content-Type': 'shmapplication/json'
|
||
|
||
⏳ Отправка запроса к Ollama (llama3:8b)...
|
||
|
||
🤖 ОТВЕТ AI:
|
||
{
|
||
"comments": [
|
||
{
|
||
"line": 58,
|
||
"severity": "ERROR",
|
||
"message": "Опечатка: 'shmapplication/json' должно быть 'application/json'"
|
||
}
|
||
]
|
||
}
|
||
|
||
✅ Найдено комментариев: 1
|
||
1. Строка 58: ERROR - Опечатка...
|
||
|
||
✅ ИТОГО комментариев: 1
|
||
|
||
🤖 AI Code Review завершен
|
||
|
||
Найдено проблем: 1
|
||
- ❌ Критичных: 1
|
||
|
||
Проанализировано файлов: 1
|
||
```
|
||
|
||
---
|
||
|
||
## Чеклист отладки
|
||
|
||
- [ ] Backend логи показывают получение файлов?
|
||
- [ ] Patch содержит изменения?
|
||
- [ ] Ошибки видны в patch?
|
||
- [ ] AI получает правильный промпт?
|
||
- [ ] AI отвечает в JSON формате?
|
||
- [ ] AI находит очевидные ошибки?
|
||
- [ ] Попробовали другую модель?
|
||
- [ ] Temperature = 0.3?
|
||
|
||
---
|
||
|
||
## Быстрая диагностика
|
||
|
||
### ❌ "AI не находит ошибки"
|
||
|
||
**Действия:**
|
||
1. Смотрите логи backend - что в patch?
|
||
2. Если patch пустой - проблема с Gitea API
|
||
3. Если patch хороший, но AI не видит - меняйте модель на `llama3:8b`
|
||
|
||
### ❌ "Ревью падает с ошибкой"
|
||
|
||
**Действия:**
|
||
1. Смотрите traceback в логах
|
||
2. Проверьте что Ollama запущен: `ollama list`
|
||
3. Проверьте что модель скачана
|
||
|
||
### ❌ "AI отвечает не в JSON"
|
||
|
||
**Пример:**
|
||
```
|
||
🤖 ОТВЕТ AI:
|
||
Thank you for the detailed analysis...
|
||
⚠️ Комментариев не найдено!
|
||
```
|
||
|
||
**Причина:** codellama:7b не подходит для code review!
|
||
|
||
**Действия:**
|
||
1. **Смените модель на mistral:7b** (РЕКОМЕНДУЕТСЯ!)
|
||
```bash
|
||
ollama pull mistral:7b
|
||
echo "OLLAMA_MODEL=mistral:7b" >> backend/.env
|
||
```
|
||
2. Перезапустите backend
|
||
3. Попробуйте снова
|
||
|
||
См. `MODEL_RECOMMENDATION.md` для деталей
|
||
|
||
---
|
||
|
||
## Результат
|
||
|
||
Теперь вы видите **весь процесс работы** AI ревьювера:
|
||
- ✅ Что получено из API
|
||
- ✅ Что отправлено в AI
|
||
- ✅ Что AI ответила
|
||
- ✅ Какие комментарии созданы
|
||
|
||
**Это позволяет понять ПОЧЕМУ AI не находит ошибки и КАК это исправить!**
|
||
|