Главная / Статьи

Практический вопрос-ответ по PDF к Azure AI Search и агентам Foundry

Создайте индекс PDF-файлов приватных курсов с использованием эмбеддингов, подключите агента Foundry к векторному индексу и устраните проблемы с аутентификацией и инструкциями, из-за которых RAG работает некорректно.

Издатель: REACTAPP.TOP9 мин чтения2147 слов

Источники: Building a Grounded RAG Agent on Azure AI Search and Azure AI Foundry

Введение

Организация, занимающаяся обучением в области цифровой криминалистики, располагает годами накопленных учебных материалов в формате PDF — слайдами, практическими заданиями, справочными главами. Аналитикам необходимо найти определенную концепцию, распространенную среди десятков таких материалов. Поиск по ключевым словам среди разрозненных файлов происходит медленно и нестабильно. Необходимым продуктом являются вопросы и ответы простым языком, основанные на этих материалах, а не перефразирование из общего учебника.

Именно это и представляет собой подход RAG: извлечение релевантных фрагментов из частной коллекции документов и использование их в процессе генерации ответов. В данном решении этот подход реализован полностью на платформе Azure — Azure AI Search индексирует реальные PDF-файлы с использованием эмбеддингов, а агент Azure AI Foundry отвечает на вопросы на основе этого индекса, а не на основе общих знаний.

Это также превратилось в описание процесса отладки. Почти ничего не ломалось из-за ошибочной идеи; сбои возникали из-за незначительных несоответствий между ресурсами, моделями аутентификации и стандартным поведением агента. Эти проблемные моменты документировались, а не устранялись.

Понимание архитектуры

Четыре сервиса Azure отвечают за четыре задачи.

Blob Storage хранит исходные документы — здесь это PDF-файлы для судебной экспертизы; любой корпус данных из частного домена соответствует той же структуре.

Azure AI Search индексирует и восстанавливает данные. Набор функций разбивает документы на фрагменты, вызывает модель генерации векторов и сохраняет текст вместе с векторами. При поиске система возвращает семантически похожие фрагменты, а не только результаты на основе ключевых слов.

Azure AI Foundry хранит модели и агента: реализацию для векторизации индексов/запросов с использованием эмбеддингов и реализацию для чатов с генерацией ответов. Агент оборачивает модель чата в источник знаний и инструкции.

Управляемая идентичность и RBAC определяют, кто может выполнять какие запросы. При подключениях (Search→Blob, Search→embeddings, agent→index) следует предпочитать роли с ограниченными правами ключам, встроенным в систему. В данной версии не удалось достичь полностью безключевой структуры; этот недостаток указан ниже.

Этап первый: исходные документы

В частный контейнер типа blob (knowledge-docs) были загружены PDF-файлы курса. Доступ к ним оставался закрытым — без возможности анонимного просмотра, что соответствует подходу к обработке конфиденциальных материалов.

Этап второй: развертывание моделей в Azure AI Foundry

В проекте Foundry выполнено два развертывания:

  • Чат (chat-deploy) для генерации ответов
  • Эмбеддинги (embed-deploy, text-embedding-3-small) для векторов документов и запросов
  • Убедитесь, что оба компонента существуют, прежде чем подключать наборы навыков поиска или агентов; отсутствие необходимых компонентов приводит к непонятным ошибкам индексации позже.

    Третий этап: Azure AI Search и векторизованный индекс

    Создайте сервис поиска, затем индекс, поля которого будут содержать фрагменты текста, векторы и метаданные документов. Прикрепите набор навыков, который:

    1. Загружает данные из knowledge-docs
    2. Разделяет их на перекрывающиеся фрагменты
    3. Вызывает службу генерации эмбеддингов
    4. Записывает векторы в индекс

    Индексаторам необходимы разрешения на чтение данных и вызов конечной точки генерации эмбеддингов. Даже если назначение ролей кажется «почти правильным», оно может не сработать во время выполнения — проверьте точные идентификаторы ресурсов.

    Web Api response status: 'NotFound'
    DeploymentNotFound: The API deployment for this resource does not exist.
    
    Web Api response status: 'Unauthorized' (401)
    Access denied due to invalid subscription key or wrong API endpoint.
    
    Access denied when connecting to the MCP server ... HTTP 403 Forbidden
    
    You are an assistant that answers questions about digital forensics course material.
    For every user question, you MUST first search the connected knowledge base before answering.
    Only answer using information retrieved from the knowledge base.
    If the knowledge base returns no relevant results, say so explicitly rather than answering from general knowledge.
    

    Четвертый этап: сбои индексации и их причины

    Сбои индексации редко возникают из-за одного четкого фактора. Частые причины в этой ситуации:

    • Набор навыков не может быть использован в процессе развертывания (ошибки аутентификации или неправильный конечный пункт)
    • Задание индексатора выполняется, но количество документов остается равным нулю (проблемы с путем контейнера или ссылкой на набор навыков)
    • Векторы записываются с неверными размерами (несоответствие модели структуре индекса и условиям развертывания)

    Рассматривайте каждую проблему как ошибку конфигурации, а не сбой в работе концепции RAG. Сохраняйте историю выполнения индексатора перед тем, как одновременно изменять три настройки.

    Пятый этап: подключение индекса к агенту

    В Foundry необходимо привязать индекс поиска в качестве источника знаний для агента. В инструкциях должно быть указано, что требуется цитировать найденные фрагменты текста, а также отказываться от ответов, когда индекс не возвращает ничего релевантного. Протестируйте с вопросом, на который есть ответ только на одной странице PDF — успех означает наличие обоснованной цитаты, а не простого угадывания.

    Шестой этап: две проблемы с поведением

    Помимо настроек, выявились две проблемы с поведением:

    1. Чрезмерная готовность помогать — модель чата отвечала на основе предыдущих знаний, когда результат поиска был пуст. Необходимо ужесточить инструкции и, при наличии возможности, добавить проверки обоснованности ответов, чтобы при пустом результате поиска выводилось «нет в корпусе».
    2. Несоответствие авторизации — некоторые ссылки по-прежнему использовали ключи, в то время как другие — управляемую идентичность. Смешанная авторизация затрудняет смену учетных данных и маскирует информацию о том, какой принципал фактически добился успеха.

    Ни то, ни другое не являются флажком портала; оба представляют собой решения по продукту, закодированные в инструкциях и дизайне идентичности.

    Что на самом деле происходит за кулисами

    Вводится вопрос пользователя, система поиска возвращает основные фрагменты информации, промпт агента получает эти фрагменты вместе с инструкциями, а модель чата генерирует ответ, ограниченный (в идеале) данным контекстом. Хранилище блобов никогда не взаимодействует напрямую с агентом; поисковая система служит границей для получения данных. Foundry отвечает за оркестрацию и хостинг моделей.

    Проблемы и уроки, извлеченные из опыта

    • Перед созданием ресурсов необходимо проверять доступность региона и моделей.
    • Размер векторных представлений в схеме индекса должен полностью соответствовать выбранной модели представлений.
    • Ошибки RBAC выглядят как пустые индексы, пока не прочитаешь детали индексатора.
    • Инструкции для агента являются частью корректности работы, а не декоративным элементом.
  • Задокументируйте модель аутентификации, которая фактически используется в продукте, включая временные ключи.
  • Основные выводы

    Azure RAG представляет собой цепочку небольших компонентов: защита конфиденциальности данных в виде блобов, разрешения на использование наборов навыков для встраивания контента, соответствие схемы индекса размерностям модели, привязка знаний агента и политика формирования ответов. Если все эти элементы настроены правильно, архитектура становится простой — и это к лучшему. Если что-то упущено, придётся тратить дни на отладку, продолжая считать, что «RAG не работает».

    Практический совет: ведите одностраничный руководство, в котором перечислены точные имена ресурсов, названия версий развертываний (не имена базовых моделей), имя индекса, название набора навыков, а также управляемые идентификаторы или ключи, используемые на каждом этапе. Когда индексатор выходит из строя в 02:00, эта страница поможет быстрее разобраться с проблемой, чем поиск информации через скриншоты портала. Добавьте еженедельную задачу, которая задаёт три ключевых вопроса, на которые есть ответы на определённых страницах, и прерывает процесс сборки, если ухудшается качество ответов.

    Совет по эксплуатации: ведите одностраничный руководство, в котором перечислены точные имена ресурсов, названия развертываний (а не имена базовых моделей), имя индекса, название набора навыков, а также управляемые идентичности или ключи, используемые на каждом этапе. Когда индексатор выходит из строя в 02:00, эта страница позволяет быстро разобраться в ситуации благодаря скриншотам из портала. Добавьте еженедельную задачу, которая задает три ключевых вопроса, на которые есть ответы на известных страницах, и прерывает процесс сборки, если уровень надежности снижается.

    Совет по эксплуатации: ведите одностраничный руководство, в котором перечислены точные имена ресурсов, названия развертываний (а не имена базовых моделей), имя индекса, название набора навыков, а также управляемые идентичности или ключи, используемые на каждом этапе. Когда индексатор выходит из строя в 02:00, эта страница позволяет быстро разобраться в ситуации благодаря скриншотам из портала. Добавьте еженедельную задачу, которая задает три ключевых вопроса, на которые есть ответы на известных страницах, и прерывает процесс сборки, если уровень надежности снижается.

    Совет по эксплуатации: ведите одностраничный руководство, в котором перечислены точные имена ресурсов, названия развертываний (а не имена базовых моделей), имя индекса, название набора навыков, а также управляемые идентичности или ключи, используемые на каждом этапе. Когда индексатор выходит из строя в 02:00, эта страница позволяет быстро разобраться в ситуации благодаря скриншотам из портала. Добавьте еженедельную задачу, которая задает три ключевых вопроса, на которые есть ответы на известных страницах, и прерывает процесс сборки, если уровень надежности снижается.

    Совет по эксплуатации: ведите одностраничный руководство, в котором перечислены точные имена ресурсов, названия развертываний (а не имена базовых моделей), имя индекса, название набора навыков, а также управляемые идентичности или ключи, используемые на каждом этапе. Когда индексатор выходит из строя в 02:00, эта страница позволяет быстро разобраться в ситуации благодаря скриншотам из портала. Добавьте еженедельную задачу, которая задает три ключевых вопроса, на которые есть ответы на известных страницах, и прерывает процесс сборки, если уровень надежности снижается.

    Совет по эксплуатации: ведите одностраничный руководство, в котором перечислены точные имена ресурсов, названия развертываний (а не имена базовых моделей), имя индекса, название набора навыков, а также управляемые идентичности или ключи, используемые на каждом этапе. Когда индексатор выходит из строя в 02:00, эта страница позволяет быстро разобраться в ситуации благодаря скриншотам из портала. Добавьте еженедельную задачу, которая задает три ключевых вопроса, на которые есть ответы на известных страницах, и прерывает процесс сборки, если уровень надежности снижается.

    Совет по эксплуатации: ведите одностраничный руководство, в котором перечислены точные имена ресурсов, названия развертываний (а не имена базовых моделей), имя индекса, название набора навыков, а также управляемые идентичности или ключи, используемые на каждом этапе. Когда индексатор выходит из строя в 02:00, эта страница позволяет быстро разобраться в ситуации благодаря скриншотам из портала. Добавьте еженедельную задачу, которая задает три ключевых вопроса, на которые есть ответы на известных страницах, и прерывает процесс сборки, если уровень надежности снижается.

    Совет по эксплуатации: ведите одностраничный руководство, в котором перечислены точные имена ресурсов, названия развертываний (не имена базовых моделей), имя индекса, название набора навыков, а также управляемые идентичности или ключи, используемые на каждом этапе. Когда индексатор выходит из строя в 02:00, эта страница позволяет быстро разобраться в ситуации благодаря скриншотам из портала. Добавьте еженедельную задачу, которая задает три ключевых вопроса, на которые есть ответы на известных страницах, и прерывает процесс сборки, если уровень надежности снижается.

    Совет по эксплуатации: ведите одностраничный руководство, в котором перечислены точные имена ресурсов, названия развертываний (не имена базовых моделей), имя индекса, название набора навыков, а также управляемые идентичности или ключи, используемые на каждом этапе. Когда индексатор выходит из строя в 02:00, эта страница позволяет быстро разобраться в ситуации благодаря скриншотам из портала. Добавьте еженедельную задачу, которая задает три ключевых вопроса, на которые есть ответы на известных страницах, и прерывает процесс сборки, если уровень надежности снижается.

    Совет по эксплуатации: ведите одностраничный руководство, в котором перечислены точные имена ресурсов, названия развертываний (а не имена базовых моделей), имя индекса, название набора навыков, а также управляемые идентичности или ключи, используемые на каждом этапе. Когда индексатор выходит из строя в 02:00, эта страница позволяет быстро разобраться в ситуации благодаря скриншотам из портала. Добавьте еженедельную задачу, которая задает три ключевых вопроса, на которые есть ответы на известных страницах, и прерывает процесс сборки, если уровень надежности снижается.

    Совет по эксплуатации: ведите одностраничный руководство, в котором перечислены точные имена ресурсов, названия развертываний (а не имена базовых моделей), имя индекса, название набора навыков, а также управляемые идентичности или ключи, используемые на каждом этапе. Когда индексатор выходит из строя в 02:00, эта страница позволяет быстро разобраться в ситуации благодаря скриншотам из портала. Добавьте еженедельную задачу, которая задает три ключевых вопроса, на которые есть ответы на известных страницах, и прерывает процесс сборки, если уровень надежности снижается.

    Совет по эксплуатации: ведите одностраничный руководство, в котором перечислены точные имена ресурсов, названия развертываний (не имена базовых моделей), имя индекса, название набора навыков, а также управляемые идентичности или ключи, используемые на каждом этапе. Когда индексатор выходит из строя в 02:00, эта страница позволяет быстро разобраться в ситуации благодаря скриншотам из портала. Добавьте еженедельную задачу, которая задает три ключевых вопроса, на которые есть ответы на известных страницах, и прерывает процесс сборки, если уровень надежности снижается.

    Совет по эксплуатации: ведите одностраничный руководство, в котором перечислены точные имена ресурсов, названия развертываний (не имена базовых моделей), имя индекса, название набора навыков, а также управляемые идентичности или ключи, используемые на каждом этапе. Когда индексатор выходит из строя в 02:00, эта страница позволяет быстро разобраться в ситуации благодаря скриншотам из портала. Добавьте еженедельную задачу, которая задает три ключевых вопроса, на которые есть ответы на известных страницах, и прерывает процесс сборки, если уровень надежности снижается.

    Совет по эксплуатации: ведите одностраничный руководство, в котором перечислены точные имена ресурсов, названия развертываний (а не имена базовых моделей), имя индекса, название набора навыков, а также управляемые идентичности или ключи, используемые на каждом этапе. Когда индексатор выходит из строя в 02:00, эта страница позволяет быстро разобраться в ситуации благодаря скриншотам из портала. Добавьте еженедельную задачу, которая задаёт три ключевых вопроса, на которые есть ответы на известных страницах, и прерывает процесс сборки, если уровень надёжности снижается.

    Совет по эксплуатации: ведите одностраничный руководство, в котором перечислены точные имена ресурсов, названия развертываний (а не имена базовых моделей), имя индекса, название набора навыков, а также управляемые идентичности или ключи, используемые на каждом этапе. Когда индексатор выходит из строя в 02:00, эта страница позволяет быстро разобраться в ситуации благодаря скриншотам из портала. Добавьте еженедельную задачу, которая задаёт три ключевых вопроса, на которые есть ответы на известных страницах, и прерывает процесс сборки, если уровень надёжности снижается.