OCR-RAG Agentic Workflow

Урок 154 из 154 курса «Mistral AI Cookbook»: официальный курс Mistral AI Cookbook (Мистраль) на русском языке. Урок входит в платный доступ; первые уроки курса бесплатно.

О чём урок

В этом блокноте реализован трехэтапный агентский рабочий процесс с использованием Microsoft Agent Framework:

Почему рабочий процесс? Каждый этап имеет одну обязанность. Фреймворк автоматически маршрутизирует состояние между исполнителями — добавление или замена этапа позже требует лишь одного изменения add_edge().

Предварительные условия: Файл .env и table.png.pdf в этом каталоге.

Ключевые пакеты:

  • base64 / httpx — кодирование PDF и отправка его на конечную точку Mistral OCR REST.
  • SearchClient / SearchIndexClient — асинхронные клиенты Azure Search для загрузки документов и управления схемой индекса.
  • AzureKeyCredential — аутентификация с помощью ключа API, если он предоставлен; в противном случае используется AzureCliCredential (вход через Azure CLI).
  • Примитивы Agent Framework — Executor, handler, WorkflowBuilder, WorkflowContext.

VECTOR_DIMENSIONS = 1024 соответствует размеру вывода mistral-embed.

Mistral OCR принимает URL-адрес данных, закодированный в base64, поэтому PDF никогда не нужно загружать в отдельное общедоступное место.

  • mistral_ocr_url — нормализует URL-адрес конечной точки; развертывание Foundry может включать или не включать суффикс /ocr.
  • run_mistral_ocr — кодирует PDF, отправляет его на конечную точку и объединяет Markdown каждой страницы в одну строку.
  • OcrExecutor — метод @handler сохраняет ocr_text в состоянии рабочего процесса и вызывает ctx.send_message(state) для передачи управления следующему этапу.

Azure AI Search хранит встроенный текст OCR как документ с поисковым вектором. Индекс создается при первом запуске и повторно используется при последующих запусках.

  • build_search_index — определяет схему: ключевое поле, полнотекстовое поле content и 1024-мерное поле HNSW contentVector.
  • get_embedding_client — повторно использует ключ Mistral API для mistral-embed.
  • index_ocr_text — встраивает текст, создает индекс, если он отсутствует, и загружает один документ. Фиксированный ID invoice-doc-1 означает, что повторные запуски перезаписывают, а не дублируют.

KnowledgeIndexExecutor — это тонкая обертка исполнителя: он делегирует всю работу с индексом index_ocr_text и вызывает ctx.send_message(state) для продвижения рабочего процесса к этапу ответа.

  • AzureAISearchContextProvider — выполняет векторный поиск сходства перед каждым вызовом LLM и вставляет 3 лучших отрывка в качестве контекста для…

План урока

  1. Зависимости
  2. Импорт
  3. Конфигурация
  4. Этап 1 — Исполнитель OCR
  5. Этап 2 — Исполнитель индекса знаний
  6. Этап 3 — Исполнитель ответов с расширенным поиском
  7. Запуск рабочего процесса

Урок входит в полный доступ. Полный текст и видео открываются после оплаты. Первые уроки каждого курса бесплатны.

Полезные гиды