- BrainTools - https://www.braintools.ru -

Как мы сделали AI code review через Ollama без облака?

TL;DR: Собрали CLI, который гоняет ревью кода на локальной LLM (Ollama): никаких API-ключей в облаке, код не уходит из машины, один diff – одна команда. В статье – зачем это нужно, как устроено и как попробовать за пять минут.

Проблема

Ревью кода вручную отнимает время, а статический анализ (линтеры, SAST) ловит только то, что зашито в правила. Контекст проекта, типичные баги и «запахи» кода они не видят. Облачные AI-ревью (типа CodeRabbit) удобны, но код уходит в чужое API – для внутренних репозиториев или строгого комплаенса это не всегда ок.

Хотелось чего-то среднего: умное ревью с контекстом, но полностью локально, без облака и без привязки к PR.

Почему Ollama

Ollama [1] даёт запускать открытые LLM (Llama, Qwen, CodeLlama и др.) на своей машине одной командой. Плюсы для ревью:

  • код никуда не уходит;

  • нет лимитов и подписок;

  • можно выбрать модель под задачу (например, qwen3-coder для кода);

  • подходит для воздушных и онпрем-сред.

Мы решили сделать инструмент, который берёт git diff, при необходимости подтягивает контекст из репозитория (RAG) и отправляет всё в Ollama. На выходе – структурированный отчёт: что не так, насколько серьёзно, что поменять (с готовыми правками, где возможно).

Как устроено

Схема простая:

  1. Сбор изменений – читаем git diff (или весь scope, если нужно).

  2. Контекст – при необходимости загружаем файлы проекта, чанкуем, строим эмбеддинги (через модель из Ollama) и по запросу подмешиваем релевантные куски в промпт.

  3. Промпт – отправляем в Ollama diff + контекст + системный промпт с правилами (безопасность, производительность, стиль).

  4. Ответ – парсим структурированный отчёт: файл, строка, severity, описание, рекомендация, при возможности – патч (auto-fix).

Всё это упаковано в одну команду в терминале, без веб-интерфейса и без интеграции с GitHub/GitLab (хотя при желании вывод можно пушить в CI).

Установка и первый запуск

Нужны Python 3.11+ и запущенная Ollama с хотя бы одной моделью (например, qwen3-coder:7b или codellama).

# Установка (pip)
pip install git+https://github.com/URLbug/CodeFox-CLI.git@main

# или через uv
uv tool install git+https://github.com/URLbug/CodeFox-CLI.git@main
Как мы сделали AI code review через Ollama без облака? - 1 [2]

В каталоге проекта:

codefox --command init   # создаст .codefox.yml, .codefoxenv и .codefoxignore
codefox --command scan   # ревью по текущему git diff
Как мы сделали AI code review через Ollama без облака? - 2 [2]

При первом init создаётся конфиг по умолчанию. Для Ollama его нужно явно указать.

Конфиг под Ollama

В .codefox.yml задаём провайдер и модель:

provider: ollama
model:
  name: qwen3-coder:7b          # или codellama, deepseek-coder и т.д.
  base_url: http://localhost:11434
  temperature: 0.2
  max_tokens: 4000
  embedding: BAAI/bge-small-en-v1.5   # для RAG, если нужен контекст по файлам

review:
  severity: high
  suggest_fixes: true
  diff_only: true

baseline:
  enable: true

ruler:
  security: true
  performance: true
  style: true
Как мы сделали AI code review через Ollama без облака? - 3 [2]
  • diff_only: true — анализируем только изменения (удобно для повседневного ревью).

  • baseline.enable: true — не ругаемся на старый долг, только на новое.

  • ruler — включаем/выключаем категории (безопасность, перф, стиль).

Список доступных моделей в вашей Ollama:

codefox --command list
Как мы сделали AI code review через Ollama без облака? - 4 [2]

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

После codefox --command scan в терминале появляется что-то вроде:

─── CodeFox Audit Report ───
- Location: assets/js/script.js : Line 84
- Issue: Visual Glitch from Global Style Mutation
- Severity: Medium
- Confidence: High
- Regression Risk: Applying `transition: all 0.3s` globally affects every element's animation behavior, potentially breaking existing transitions or 
causing unwanted visual side-effects.
- Evidence:
When toggling dark mode, the code applies a global transition style (`document.querySelectorAll("*")`) which overrides component-specific animations 
unpredictably.

- Auto-Fix:

// Apply transition only where necessary instead of globally
// document.querySelectorAll("*").forEach(function(el){
//     el.style.transition="all 0.3s";
// });


- Senior Tip:
Target styles precisely using CSS classes rather than blanket selectors. Prefer declarative CSS over imperative JavaScript styling for maintainability.
─── CodeFox Audit Report ───
...
Как мы сделали AI code review через Ollama без облака? - 5 [2]

Пример использования:

CodeFox scan demo

CodeFox scan demo

То есть не просто «здесь плохо», а конкретное место, риск, доказательство и совет, как поправить. Для части замечаний даётся готовый фрагмент кода (auto-fix).

Что в итоге

  • Локально – весь анализ на вашей машине, Ollama + Python.

  • Без облака – не нужны API-ключи Gemini/OpenAI, код не уходит из репо.

  • Один diff – одна команда — привычный workflow: правишь код, делаешь codefox --command scan, смотришь отчёт.

  • Гибко – та же тулза умеет работать с Gemini и OpenRouter (через .codefox.yml), если захочешь сравнить качество или снять нагрузку с железа.

Проект открыт: CodeFox-CLI [3]. Документация по всем опциям – в WIKI [4] репозитория. Если зайдёте, поставьте звезду и напишите в комментариях, на каких моделях в Ollama вам зашло ревью сильнее всего. Мы буем очень благодарны :-)

Автор: CodeFoxAI

Источник [5]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/26544

URLs in this post:

[1] Ollama: https://ollama.com/

[2] Image: https://sourcecraft.dev/

[3] CodeFox-CLI: https://github.com/URLbug/CodeFox-CLI

[4] WIKI: https://github.com/URLbug/CodeFox-CLI/blob/main/WIKI.md

[5] Источник: https://habr.com/ru/articles/1006258/?utm_campaign=1006258&utm_source=habrahabr&utm_medium=rss

www.BrainTools.ru

Rambler's Top100