Найти в Дзене
Павлин Шарит

RAG система: метрики которые реально важны в production

RAG система: метрики которые реально важны в production Когда разрабатываешь RAG систему (что такое рассказывал тут), легко увлечься точностью ответов и забыть про экономику - а потом получить счет за API, который превышает бюджет всего проекта Cost per Query - считаем реальную стоимость Стоимость одного запроса складывается из нескольких компонентов: - Embedding векторизация документов и запросов - Поиск по векторной базе (обычно копейки, но при масштабе имеет значение) - Запросы к LLM (основная статья расходов) Для мониторинга использую Arize Phoenix с LlamaIndex - настройка занимает буквально 3 строчки, а взамен получаешь детальную разбивку затрат по каждому этапу pipeline # Настройка трассировки с Phoenix (один раз) from openinference.instrumentation.llama_index import LlamaIndexInstrumentor from phoenix.otel import register tracer_provider = register() LlamaIndexInstrumentor().instrument(tracer_provider=tracer_provider) # Дальше работаешь как обычно - все метрики собираются а

RAG система: метрики которые реально важны в production

Когда разрабатываешь RAG систему (что такое рассказывал тут), легко увлечься точностью ответов и забыть про экономику - а потом получить счет за API, который превышает бюджет всего проекта

Cost per Query - считаем реальную стоимость

Стоимость одного запроса складывается из нескольких компонентов:

- Embedding векторизация документов и запросов

- Поиск по векторной базе (обычно копейки, но при масштабе имеет значение)

- Запросы к LLM (основная статья расходов)

Для мониторинга использую Arize Phoenix с LlamaIndex - настройка занимает буквально 3 строчки, а взамен получаешь детальную разбивку затрат по каждому этапу pipeline

# Настройка трассировки с Phoenix (один раз)

from openinference.instrumentation.llama_index import LlamaIndexInstrumentor

from phoenix.otel import register

tracer_provider = register()

LlamaIndexInstrumentor().instrument(tracer_provider=tracer_provider)

# Дальше работаешь как обычно - все метрики собираются автоматически

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader("data").load_data()

index = VectorStoreIndex.from_documents(documents)

query_engine = index.as_query_engine()

response = query_engine.query("твой запрос")

# В Phoenix видишь полную картину:

# - сколько токенов потратил на embeddings

# - время выполнения каждого этапа

# - стоимость каждого LLM вызова

После настройки в Phoenix Dashboard сразу видно где "утекают" деньги - часто оказывается, что retrieve этап съедает больше бюджета чем ожидалось, особенно если используешь reranking

Accuracy vs Response Time - вечная дилемма

Технически можно просмотреть весь датасет для каждого запроса и дать максимально точный ответ - но пользователь не будет ждать 30 секунд ответа на простой вопрос

Приходится искать баланс между тремя параметрами:

- Точность ответа

- Время отклика

- Стоимость запроса

Обычно оптимальная точка находится где-то в районе топ-5 документов с response time менее 2 секунд - дальше увеличение accuracy не оправдывает рост затрат

Главное правило production RAG - начинай с простого pipeline, измеряй все метрики и только потом усложняй архитектуру там, где это реально дает бизнес-эффект

Поддержать на Boosty

Посмотреть на Youtube