Azure innehållsförståelse

ContentUnderstandingContextProvideranalyserar filbilagor med Azure Content Understanding och matar in strukturerade resultat i agentkontexten. Den stöder dokument, bilder, ljud och video, inklusive OCR, tabeller, strukturerade fält, transkription, diarisering och segmentsammanfattningar.

Den här integreringen använder förbearbetningsmönstret: det transformerar inkommande innehåll före modellanrop och kan behålla bearbetat tillstånd för senare svängar.

För stora dokument kan providern ladda upp extraherad markdown till ett filsökningsvektorlager i stället för att placera hela resultatet i modellkontexten.

Förutsättningar

  • Ett Azure-abonnemang.
  • Azure Content Understanding i en region som stöds.
  • Tjänstens nödvändiga modelldistributioner.
  • Azure identitetsåtkomst till resursen.

Installera paketet

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

Analysera ett dokument

Koppla ContentUnderstandingContextProvider till agenten och skicka en binär bifogad fil som stöds. Providern tar bort binära indata efter analys och levererar det extraherade innehållet till modellen.

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")

Bearbetningsalternativ

  • Lämna analyzer_id oinställt för att välja en sökanalysator för dokument-, ljud- eller videosökning utifrån medietypen.
  • Ange max_wait=None när körningen måste vänta tills analysen har slutförts.
  • Använd FileSearchConfig för tokeneffektiv hämtning i stora extraherade dokument.
  • Återanvänd ett AgentSession för att bevara tillståndet för det analyserade dokumentet mellan interaktioner.

Nästa steg

Gå djupare: