Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
ContentUnderstandingContextProvideranalyse les pièces jointes de fichiers avec Azure Content Understanding et injecte des résultats structurés dans le contexte de l’agent. Il prend en charge les documents, les images, l’audio et la vidéo, notamment l’OCR, les tables, les champs structurés, la transcription, la diarisation et les résumés de segments.
Cette intégration utilise le modèle de prétraitement : il transforme le contenu entrant avant l’appel de modèle et peut conserver l’état traité pour les tours ultérieurs.
Pour les documents volumineux, le fournisseur peut téléverser du markdown extrait dans une base vectorielle de recherche de fichiers au lieu de placer l’intégralité du résultat dans le contexte du modèle.
Prerequisites
- Un abonnement Azure.
- Azure Content Understanding dans une région prise en charge.
- Déploiements de modèles requis par le service.
- Accès à la ressource via l’identité Azure.
Installer le package
pip install agent-framework-azure-contentunderstanding --pre
Analyser un document
Joignez ContentUnderstandingContextProvider à l’agent et envoyez une pièce jointe binaire prise en charge. Le fournisseur supprime l’entrée binaire après analyse et fournit le contenu extrait au modèle.
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")
Options de traitement
- Laissez
analyzer_idnon défini pour sélectionner un analyseur de recherche de document, audio ou vidéo en fonction du type de média. - Définissez
max_wait=Nonele moment où l’exécution doit attendre la fin de l’analyse. - Utilisez
FileSearchConfigpour une récupération économe en jetons dans de grands documents extraits. - Réutilisez
AgentSessionpour préserver l’état du document analysé d’un tour à l’autre.
Étapes suivantes
Aller plus loin :