Omówienie zawartości platformy Azure

ContentUnderstandingContextProvideranalizuje załączniki plików za pomocą Azure Content Understanding i wprowadza wyniki ustrukturyzowane do kontekstu agenta. Obsługuje dokumenty, obrazy, dźwięk i wideo, w tym OCR, tabele, pola strukturalne, transkrypcję, diaryzacja i podsumowania segmentów.

Ta integracja wykorzystuje wzorzec wstępnego przetwarzania: przekształca przychodzące treści przed wywołaniem modelu i może zachować przetworzony stan na potrzeby kolejnych tur.

W przypadku dużych dokumentów dostawca może przesłać wyodrębnioną treść w formacie Markdown do wektorowego magazynu danych funkcji File Search zamiast umieszczać cały wynik w kontekście modelu.

Wymagania wstępne

  • Subskrypcja platformy Azure.
  • Azure Content Understanding w obsługiwanym regionie.
  • Wymagane wdrożenia modelu usługi.
  • Dostęp tożsamości platformy Azure do zasobu.

Instalowanie pakietu

pip install agent-framework-azure-contentunderstanding --pre

Analizowanie dokumentu

Dołącz ContentUnderstandingContextProvider do agenta i wyślij obsługiwany załącznik binarny. Dostawca usuwa dane wejściowe binarne po analizie i dostarcza wyodrębnionej zawartości do modelu.

async def main() -> None:
    credential = AzureCliCredential()

    # Set up Azure Content Understanding context provider
    cu = ContentUnderstandingContextProvider(
        endpoint=os.environ["AZURE_CONTENTUNDERSTANDING_ENDPOINT"],
        credential=credential,
        analyzer_id="prebuilt-documentSearch",  # RAG-optimized document analyzer
        max_wait=None,  # wait until CU analysis finishes (no background deferral)
    )

    # Set up the LLM client
    client = FoundryChatClient(
        project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
        model=os.environ["FOUNDRY_MODEL"],
        credential=credential,
    )

    # Create agent with CU context provider.
    # The provider extracts document content via CU and injects it into the
    # LLM context so the agent can answer questions about the document.
    async with credential, cu:
        agent = Agent(
            client=client,
            name="DocumentQA",
            instructions=(
                "You are a helpful document analyst. Use the analyzed document "
                "content and extracted fields to answer questions precisely."
            ),
            context_providers=[cu],
        )

        # --- Turn 1: Upload PDF and ask a question ---
        # 4. Upload PDF and ask questions
        # The CU provider extracts markdown + fields from the PDF and injects
        # the full content into context so the agent can answer precisely.
        print("--- Upload PDF and ask questions ---")

        pdf_bytes = SAMPLE_PDF_PATH.read_bytes()

        response = await agent.run(
            Message(
                role="user",
                contents=[
                    Content.from_text(
                        "What is this document about? Who is the vendor, and what is the total amount due?"
                    ),
                    Content.from_data(
                        pdf_bytes,
                        "application/pdf",
                        # Always provide filename — used as the document key
                        additional_properties={"filename": SAMPLE_PDF_PATH.name},
                    ),
                ],
            )
        )
        usage = response.usage_details or {}
        print(f"Agent: {response}")
        print(f"  [Input tokens: {usage.get('input_token_count', 'N/A')}]\n")

Opcje przetwarzania

  • Pozostaw analyzer_id opcję niezastawioną, aby wybrać analizator wyszukiwania dokumentów, dźwięku lub wideo z typu nośnika.
  • Ustaw max_wait=None, gdy uruchomienie musi czekać na ukończenie analizy.
  • Użyj FileSearchConfig, aby efektywnie pod względem tokenów wyszukiwać w dużych wyodrębnionych dokumentach. Określ zakres magazynu wektorów i odpowiedniego narzędzia file_search dla docelowego użytkownika, dzierżawcy lub grupy udostępniania.
  • Użyj ponownie elementu AgentSession, aby zachować stan analizowanego dokumentu między turami. Sesja nie izoluje pobierania z udostępnionego magazynu wektorów.

Następne kroki

Głębiej: