От гадания к расследованию: как работает DuckTective
Пользователь GitHub Pavel Shaura представил DuckTective — платформу для самохостинга, которая решает главную проблему AI-ревьюеров: галлюцинации и поверхностный анализ. В отличие от стандартных подходов, где модель просто читает дифф, DuckTective запускает агентный цикл. ИИ не просто смотрит на измененные строки, он «расследует» их: находит функции, которые вызывают измененный код, изучает соседние файлы, проверяет зависимости и даже анализирует комментарии предыдущих ревьюеров.
Ключевая особенность — grounding (заземление). Каждое найденное нарушение должно быть подтверждено прямой цитатой из исходного кода. Если модель не может найти доказательство в графе вызовов или диффе, вывод отбрасывается. Это снижает уровень ложных срабатываний и делает отчеты пригодными для продакшена.
Технический стек: RAG, графы и локальность
Архитектура проекта построена вокруг глубокой интеграции с кодовой базой. Вместо простого поиска по ключевым словам используется парсинг AST через tree-sitter для Python, JavaScript и TypeScript. Это позволяет модели понимать структуру кода, а не только текст.
Все вычисления, включая эмбеддинги (модель nomic-embed-text с 768 измерениями), выполняются локально. Поиск гибридный: объединяется лексический поиск (tsvector) и семантический (pgvector) через алгоритм Reciprocal Rank Fusion. Это критично для кода, где точные имена переменных важнее смыслового сходства.
Безопасность и контроль данных
Проект позиционируется как решение для компаний с жесткими требованиями к безопасности. Репозиторий может быть помечен флагом local_only, что гарантирует отсутствие исходящих запросов к внешним API. При использовании облачных моделей выбор происходит на уровне конкретного репозитория или даже отдельного запуска, а не глобально.
Для управления доступом используется Keycloak (OpenID Connect), а безопасность данных на уровне строк обеспечивается через Row-Level Security в PostgreSQL.
Сравнение подходов: DuckTective vs Стандартные LLM-ревьюеры
| Критерий | Стандартный LLM-ревьюер | DuckTective |
|---|---|---|
| Анализ контекста | Только предоставленный дифф (diff) | Построение графа вызовов (call graph) и зависимостей |
| Доказательная база | Текстовое описание проблемы | Прямая цитата из кода (evidence gate) |
| Обработка ошибок | Частые галлюцинации (false positives) | Дедупликация дефектов и проверка фактов |
| Инфраструктура | Часто требует внешних API | Полный локальный стек (Ollama/LM Studio + Postgres) |
| Интеграция с агентами | Редко | Встроенный MCP-сервер для Claude Code, Cursor и др. |
Для кого этот инструмент
DuckTective — это не просто «еще один бот для GitHub». Это инженерное решение для команд, которые устали от шума в code review. Благодаря встроенному evaluation harness, разработчики могут измерять recall (полноту) и уровень ложных тревог, а обратная связь от людей (human verdicts) автоматически дообучает модель через инструменты, без необходимости переобучения (fine-tuning).
Проект поддерживает стриминг токенов через WebSocket, кеширование ответов в Redis и маршрутизацию запросов через LiteLLM, что делает его масштабируемым и гибким решением для enterprise-среды.
Источник: Github ↗
