О чём урок
В этом блокноте реализован трехэтапный агентский рабочий процесс с использованием 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 — Исполнитель OCR
- Этап 2 — Исполнитель индекса знаний
- Этап 3 — Исполнитель ответов с расширенным поиском
- Запуск рабочего процесса
Урок входит в полный доступ. Полный текст и видео открываются после оплаты. Первые уроки каждого курса бесплатны.