Оценка качества RAG-систем — задача, для которой существуют готовые библиотеки вроде RAGAS, но они редко работают «из коробки» и требуют навыков программирования. Инженер, проходивший курс по Claude Code на Stepik, решил поручить эту рутинную работу ИИ-ассистенту. В качестве подопытного использовался собственный бенчмарк в формате CSV с вопросами, эталонными ответами и контекстами.

Первая попытка с регулярными выражениями провалилась: они подходят только для извлечения шаблонных фрагментов, а для оценки семантики нужен LLM-судья. Автор выбрал gpt-4o-mini от прокси-провайдера — модель, часто применяемую в примерах RAGAS. Из множества метрик он отобрал три: Context Precision (точность ранжирования полезных чанков), Context Relevance (релевантность чанков вопросу) и Context Recall (доля фактов из эталонного ответа, подтверждённых контекстом). Первые две — из библиотеки RAGAS, третья — авторская.

Для подачи контекста в модель понадобилось исправить бенчмарк: вместо заранее склеенных чанков контекст начал подтягиваться из RAG-системы на каждом кейсе. Это упростило подготовку данных и позволило менять количество чанков. Далее инженер собрал простую RAG-систему на FastAPI, LangChain и ChromaDB, а затем попытался подключить к ней Claude Code через Model Context Protocol (MCP).

Собрана RAG-система на FastAPI, LangChain и ChromaDB с интеграцией через MCP.

Интеграция с MCP поначалу не удалась: Claude не находил MCP-сервер. С помощью MCP Inspector выяснилось, что проблема в транспорте. Решение нашлось в документации: нужно добавить CORS-мидлварь в FastAPI и использовать метод mcp.mount() вместо устаревших mount_sse() или mount_http(). После этого Claude Code успешно вызывал внешнюю LLM для оценки каждой метрики.

Хотя полностью избавиться от программирования не удалось — пришлось создавать виртуальное окружение Python и править код — в итоге получился рабочий ИИ-ассистент. Он автоматически прогоняет бенчмарк, вычисляет метрики качества контекста и выдаёт результаты. Подход можно тиражировать на другие RAG-системы, а код решения опубликован в репозитории автора.