Гайд · TNWS AI
Как настроить semantic ranker Azure AI Search для RAG с k=50
Вторичное семантическое ранжирование, конфигурация текстовых полей, k=50 и проверка citations без генеративных обещаний.
Задача и применимость
Актуальный русскоязычный запрос: «как настроить semantic ranker Azure AI Search hybrid RAG». Официальная документация Microsoft проверена 19 сентября 2026 года. Azure AI Search REST API 2026-04-01 при включённой возможности semantic ranking и существующей semanticConfiguration; hybrid search с текстовыми полями и vectorizer.
Задача здесь — выполнить и проверить конкретную операцию в Azure AI Search. Образцовые значения вроде ru-kb, p1 и policy-2026-01 принадлежат тестовому корпусу, а не обязательным именам в вашем сервисе. У вас должны быть полномочия на указанную операцию; для теста можно использовать административный ключ на доверенном сервере, но в пользовательском браузере нужен защищённый серверный посредник. Сначала снимите baseline по контрольному запросу и набору документов, затем меняйте только одну настройку за раз.
Что подтверждает документация
Semantic ranker повторно сортирует до 50 предварительно найденных результатов по тексту. Для hybrid с vectors Microsoft рекомендует k=50. Semantic captions и answers извлекают текст дословно из индекса, а не генерируют новые факты. Поля title, keywords и content в semantic configuration имеют приоритет и ограничения длины.
Это не обещание одинакового ранжирования для любого русского корпуса. Результат embedding зависит от deployment, подготовки текста, chunking, обновлений модели и состава индекса. Доступность предварительных функций и ограничения сверяйте с документацией и настройками собственного сервиса; цена и длительность операций здесь намеренно не указаны, потому что они не следуют из поискового ответа. Отделяйте успешный HTTP-запрос от оценки полезности найденного фрагмента.
Пошаговое выполнение
- Определите semanticConfiguration для осмысленных searchable текстовых полей заголовка и content; не выбирайте embedding как текст.
- Обеспечьте предварительный recall: hybrid search с search и vectorQueries k=50.
- Отправьте queryType=semantic и semanticConfiguration в запросе, задайте select для ID и исходных текстов.
- Проверьте rerankerScore и исходные цитаты для нескольких контрольных вопросов.
- Сравните без и с reranking на одинаковой candidate выборке; если нужный документ не был в первых 50, улучшайте retrieval.
После каждого шага сохраняйте версию схемы, идентификатор тестового документа и ответ сервиса. При ошибке сначала установите, на каком слое она возникла: полномочия, схема, несовместимый vector, индексирование или собственно ранжирование. Не обновляйте рабочую схему, если не умеете вернуться к старому индексу. Для тестов доступа всегда предусмотрите документ другого tenant и отрицательный запрос.
Готовый REST-шаблон
POST /indexes/ru-kb/docs/search?api-version=2026-04-01
{"search":"как вернуть покупку","queryType":"semantic",
"semanticConfiguration":"ru-semantic","select":"id,title,content",
"top":5,"vectorQueries":[{"kind":"text","text":"как вернуть покупку",
"fields":"contentVector","k":50}]}
Подставьте своё имя сервиса в https://<service>.search.windows.net, передайте Content-Type: application/json и авторизацию выбранным поддерживаемым способом. Демонстрационный массив из трёх чисел или строка <embedding массива> — только описание формы; они не являются реальным embedding для поля с 1536 измерениями. Перед отправкой проверьте JSON, размерность и отсутствие ключа в клиентском коде.
Входные данные и ожидаемый результат
Вход: вопрос о возврате, policy-2026-01 содержит явный ответ «14 дней», запись marketing-2 говорит лишь об удобстве покупок. Ожидаемый результат теста: документ с ответом остаётся в кандидатах и после ранжирования находится выше маркетингового текста. Если запись policy отсутствовала в top-50 до semantic ranker, результат не может появиться магически.
Ожидаемый ID — проверяемая гипотеза на подготовленном тестовом наборе. При другом корпусе и другом embedding нельзя честно обещать конкретный score и порядок результатов. Сохраняйте как входное содержимое, так и текст возвращённого фрагмента: найденный ID без исходного подтверждения не годится для публикации ответа от имени компании.
Разбор и границы применения
Два разных компонента отвечают на два разных вопроса: retrieval решает, какие фрагменты вообще станут кандидатами, reranker — какие из этих фрагментов важнее. Поэтому плохой recall нельзя лечить только включением queryType=semantic. Убедитесь, что выбранные текстовые поля реально содержат ответ и связаны с тем же ID, что embedding; неправильно построенные chunks могут ранжироваться по заголовку другой страницы. Проверяйте число кандидатов до и после, а также долю случаев, когда нужный документ вообще доступен для сортировки. Captions полезны как короткая цитата, но если исходник изменился, переиндексируйте материал; извлечённый текст не является проверкой актуальности политики. В чувствительных сценариях сравните цитату с каноническим документом. Semantic ranking — отдельная платная возможность с лимитами, которые следует сверять с вашим аккаунтом, а не обещать фиксированную цену. Если rerankerScore меняется при обновлении внутренних моделей, не ставьте предельно тонкие пороги без калибровки. При отсутствии подходящего passage отсутствие answer лучше ложной уверенности LLM. Логи сохраняют ID источника и статус возможности, но не пользовательские персональные данные без нужды.
Практический контроль именно этой задачи
Постройте два набора: вопросы, где искомый документ входит в первоначальные 50, и вопросы, где он отсутствует. Во второй группе никакая перемена semanticConfiguration не создаст отсутствующего кандидата; эта группа измеряет retrieval, не reranking. В первой сравнивайте позицию полезного фрагмента до и после вторичной сортировки. Учитывайте приоритет text fields: если важное исключение находится в конце длинного content, часть текста может быть отброшена при подготовке к semantic ranking. Лучшее исправление часто состоит в более осмысленном chunking, а не в простом удвоении длины поля. Если вы показываете semantic answer как готовый ответ на сайте, укажите исходный документ и дату политики; это извлечённая цитата, а не юридически подтверждённая истина. Для сравнения версий храните два показателя отдельно: долю правильных документов в top-50 и долю правильных первых цитат после rerank. Так становятся заметны ошибки каждого этапа.
Критерии проверки
- Конфигурация указывает человекочитаемые поля.
- k=50 перед вторичным ранжированием.
- Контрольный ответ присутствовал в исходных кандидатах.
- Цитата содержится в source content дословно.
Если хотя бы один критерий провален, не маскируйте проблему красивым ответом генеративной модели: возвращайте человеку найденные документы или явное сообщение о недостаточности данных. Сравнение версий проводите на одних и тех же контрольных вопросах, фиксируя документные ID и дату наблюдения.
Типичные ошибки и что не делать
- Думать, что reranker ищет весь корпус заново.
- Подача только vector field в semantic configuration.
- Использовать k=5 и ожидать полноценной выборки до 50.
- Выдавать caption за сгенерированную независимую проверку.
Не обучайте и не оценивайте систему только на запросах, скопированных из заголовков: нужна и перефразировка, и отрицательные тесты. Не называйте близость векторов гарантом правдивости: источник может устареть, противоречить другому документу или оказаться недоступным данному пользователю. При внедрении RAG передавайте генератору текст, ID и разрешённую ссылку на первоисточник, а неподтверждённые утверждения не включайте в итоговый ответ.
FAQ
Сколько документов reranker рассматривает?
До 50 предварительных кандидатов.
Генерирует ли он новый ответ?
Нет, semantic captions/answers извлекаются из текста индекса.
Что проверять при пропаже нужного ID?
Попал ли документ в исходный retrieval top-50.
Официальные источники
Частые вопросы
Сколько документов reranker рассматривает?
До 50 предварительных кандидатов.
Генерирует ли он новый ответ?
Нет, semantic captions/answers извлекаются из текста индекса.
Что проверять при пропаже нужного ID?
Попал ли документ в исходный retrieval top-50.
Читайте также
Как фильтровать векторный поиск Azure AI Search по tenant без утечки данных
OData filter и vectorFilterMode preFilter для tenant, негативный тест изоляции и сравнение с postFilter.
Как искать текстом через vectorizer Azure AI Search без передачи массива чисел
Настройка vectorizer и REST kind:text для русских вопросов: связка profile, модели и проверка результатов.
Как измерить recall HNSW в Azure AI Search через exhaustive KNN
Точный baseline exhaustive:true, Recall@k, стабильный набор запросов и диагностика trade-off качества и задержки.
Комментарии
Пока тихо. Скажите первое слово