Azure AI Content Understanding Domain Knowledge
This skill provides domain knowledge for Azure AI Content Understanding, a multimodal AI service that extracts semantic content from documents, video, audio, and image files.
[COPILOT GUIDANCE]: Always consult the official documentation first before answering user questions. Use fetch_webpage to read the relevant doc page when the reference material below is insufficient or may be outdated.
When a user's question is broad or ambiguous, ask them to clarify:
- "Which modality are you working with — documents, images, audio, or video?"
- "Are you using a prebuilt analyzer, or building a custom one?"
- "Are you asking about the Python SDK specifically, or the service in general?"
Official Documentation
The authoritative source for Content Understanding is: https://learn.microsoft.com/azure/ai-services/content-understanding/
Always read the relevant page (via fetch_webpage) before answering if the reference material below does not cover the topic.
Key Documentation Pages
Search tip: If the above pages don't cover the user's question, search the doc tree at https://learn.microsoft.com/azure/ai-services/content-understanding/.
Python SDK Resources
Field-description rule: the two-stage pipeline
Custom analyzer extraction is a two-stage pipeline:
- Stage 1 — content extraction (OCR + layout). The service reads the
file and produces structured text plus layout metadata (sections, tables,
headings). The original pixels are not what the LLM in stage 2 sees.
- Stage 2 — field extraction (LLM). The LLM reads the stage-1 markdown
and uses your field descriptions to identify values.
Implications for fieldSchema.fields[*].description:
✅ Reference text content and structure: labels ("Invoice #"),
section headings ("Bill To"), adjacent labels, alternative phrasings,
format examples.
❌ Do not reference visual appearance: colour, font, font size, bold or
italic, or "the box at the top-right" without text anchors.
Good description:
"Invoice issue date, found near the 'Invoice #' label at the top right.
May also be labelled 'Invoice Date', 'Date', or 'Issued'. Format is
usually MM/DD/YYYY. Examples: '01/15/2024', 'January 15, 2024'."
Used by cu-sdk-author-analyzer
and cu-sdk-author-analyzer-classify-route.
Choosing baseAnalyzerId
Every custom analyzer extends a built-in prebuilt analyzer via
baseAnalyzerId. Pick the row that matches the modality of the content
you're analyzing (documents, audio, video, image). Typos here are a common
first-time error; the local schema validator (in
_shared/schema_validator.py) rejects any value not in this
table.
| Content type |
baseAnalyzerId |
| Documents (PDF, image of a page) |
prebuilt-document |
| Audio (mp3, wav, m4a) |
prebuilt-audio |
| Video (mp4, mov) |
prebuilt-video |
| Image-only analyzer |
prebuilt-image |
⚠️ Only modality-level prebuilts are valid as baseAnalyzerId for
custom analyzers. *Search variants (prebuilt-documentSearch,
prebuilt-audioSearch, prebuilt-videoSearch), task-specific prebuilts
(prebuilt-invoice, prebuilt-receipt, prebuilt-idDocument), and
prebuilt-layout are not accepted here — the service returns
InvalidBaseAnalyzerId. Those prebuilts can still be called directly as
standalone analyzers via
client.begin_analyze(analyzer_id="prebuilt-invoice", ...). See the
analyzer-reference docs.
Used by cu-sdk-author-analyzer
(custom analyzer) and
cu-sdk-author-analyzer-classify-route
(both inner extractors and the outer classifier).
Classify-and-route rule
When using config.contentCategories to classify and route mixed-document
packets:
- Category descriptions follow the same text-anchored rule as field
descriptions. Describe each category by the text that appears on its
pages (headings, labels), not by visual style.
config.enableSegment must be true so the classifier carves the
packet into segments before routing each one.
- Inner analyzers must already exist before the outer classifier is
created.
- Category fill rate is per-category, not packet-wide. A field that
only appears in invoice segments should be evaluated against the number
of invoice segments, not the total number of segments.
- No top-level
fieldSchema on the outer classifier. The outer
analyzer's job is classification + routing only; field extraction
belongs in the inner analyzers.
Used by cu-sdk-author-analyzer-classify-route.
Related Skills
cu-sdk-setup — Set up Python environment and run samples
cu-sdk-sample-run — Run specific samples interactively
cu-sdk-author-analyzer — Author + test a custom analyzer for one document type
cu-sdk-author-analyzer-classify-route — Author + test a classify-and-route pipeline for mixed-document packets
1---2name: cu-sdk-common-knowledge3description: Domain knowledge for Azure AI Content Understanding. Use this skill to answer questions about Content Understanding concepts, analyzers, field schemas, API operations, and SDK usage. Always consult official documentation before answering.4---56# Azure AI Content Understanding Domain Knowledge78This skill provides domain knowledge for Azure AI Content Understanding, a multimodal AI service that extracts semantic content from documents, video, audio, and image files.910> **[COPILOT GUIDANCE]:** Always consult the official documentation first before answering user questions. Use `fetch_webpage` to read the relevant doc page when the reference material below is insufficient or may be outdated.11>12> When a user's question is broad or ambiguous, ask them to clarify:13> - "Which modality are you working with — documents, images, audio, or video?"14> - "Are you using a prebuilt analyzer, or building a custom one?"15> - "Are you asking about the Python SDK specifically, or the service in general?"1617## Official Documentation1819The authoritative source for Content Understanding is: **https://learn.microsoft.com/azure/ai-services/content-understanding/**2021Always read the relevant page (via `fetch_webpage`) before answering if the reference material below does not cover the topic.2223### Key Documentation Pages2425| Topic | URL |26|-------|-----|27| **Overview** | https://learn.microsoft.com/azure/ai-services/content-understanding/overview |28| **What's new** | https://learn.microsoft.com/azure/ai-services/content-understanding/whats-new |29| **Content Understanding Studio** | https://learn.microsoft.com/azure/ai-services/content-understanding/quickstart/content-understanding-studio?tabs=portal%2Ccu-studio |30| **Service limits** | https://learn.microsoft.com/azure/ai-services/content-understanding/service-limits |31| **Region & language support** | https://learn.microsoft.com/azure/ai-services/content-understanding/language-region-support |32| **Prebuilt analyzers** | https://learn.microsoft.com/azure/ai-services/content-understanding/concepts/prebuilt-analyzers |33| **Create custom analyzer** | https://learn.microsoft.com/azure/ai-services/content-understanding/tutorial/create-custom-analyzer?tabs=portal%2Cdocument&pivots=programming-language-python |34| **Document markdown** | https://learn.microsoft.com/azure/ai-services/content-understanding/document/markdown |35| **Document elements** | https://learn.microsoft.com/azure/ai-services/content-understanding/document/elements |36| **Video overview** | https://learn.microsoft.com/azure/ai-services/content-understanding/video/overview |37| **Video elements** | https://learn.microsoft.com/azure/ai-services/content-understanding/video/elements |38| **Audio overview** | https://learn.microsoft.com/azure/ai-services/content-understanding/audio/overview |39| **Image overview** | https://learn.microsoft.com/azure/ai-services/content-understanding/image/overview |40| **REST API reference** | https://learn.microsoft.com/rest/api/contentunderstanding/operation-groups |4142> **Search tip:** If the above pages don't cover the user's question, search the doc tree at `https://learn.microsoft.com/azure/ai-services/content-understanding/`.4344### Python SDK Resources4546| Resource | Link |47|----------|------|48| **Python package on PyPI** | https://pypi.org/project/azure-ai-contentunderstanding/ |49| **Python SDK README** | https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/contentunderstanding/azure-ai-contentunderstanding/README.md |50| **Python SDK Samples** | https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/contentunderstanding/azure-ai-contentunderstanding/samples |5152## Field-description rule: the two-stage pipeline5354Custom analyzer extraction is a **two-stage pipeline**:55561. **Stage 1 — content extraction (OCR + layout).** The service reads the57 file and produces structured text plus layout metadata (sections, tables,58 headings). The original pixels are *not* what the LLM in stage 2 sees.592. **Stage 2 — field extraction (LLM).** The LLM reads the stage-1 markdown60 and uses your field descriptions to identify values.6162Implications for `fieldSchema.fields[*].description`:6364✅ Reference **text content and structure**: labels (`"Invoice #"`),65section headings (`"Bill To"`), adjacent labels, alternative phrasings,66format examples.6768❌ Do **not** reference visual appearance: colour, font, font size, bold or69italic, or "the box at the top-right" without text anchors.7071Good description:7273> "Invoice issue date, found near the 'Invoice #' label at the top right.74> May also be labelled 'Invoice Date', 'Date', or 'Issued'. Format is75> usually MM/DD/YYYY. Examples: '01/15/2024', 'January 15, 2024'."7677Used by [`cu-sdk-author-analyzer`](../cu-sdk-author-analyzer/SKILL.md)78and [`cu-sdk-author-analyzer-classify-route`](../cu-sdk-author-analyzer-classify-route/SKILL.md).7980## Choosing `baseAnalyzerId`8182Every custom analyzer extends a built-in prebuilt analyzer via83`baseAnalyzerId`. Pick the row that matches the **modality** of the content84you're analyzing (documents, audio, video, image). Typos here are a common85first-time error; the local schema validator (in86[`_shared/schema_validator.py`](../_shared/)) rejects any value not in this87table.8889| Content type | `baseAnalyzerId` |90|---|---|91| Documents (PDF, image of a page) | `prebuilt-document` |92| Audio (mp3, wav, m4a) | `prebuilt-audio` |93| Video (mp4, mov) | `prebuilt-video` |94| Image-only analyzer | `prebuilt-image` |9596> ⚠️ **Only modality-level prebuilts are valid as `baseAnalyzerId` for97> custom analyzers.** `*Search` variants (`prebuilt-documentSearch`,98> `prebuilt-audioSearch`, `prebuilt-videoSearch`), task-specific prebuilts99> (`prebuilt-invoice`, `prebuilt-receipt`, `prebuilt-idDocument`), and100> `prebuilt-layout` are **not** accepted here — the service returns101> `InvalidBaseAnalyzerId`. Those prebuilts can still be called directly as102> standalone analyzers via103> `client.begin_analyze(analyzer_id="prebuilt-invoice", ...)`. See the104> [analyzer-reference docs](https://learn.microsoft.com/azure/ai-services/content-understanding/concepts/analyzer-reference#baseanalyzerid).105106Used by [`cu-sdk-author-analyzer`](../cu-sdk-author-analyzer/SKILL.md)107(custom analyzer) and108[`cu-sdk-author-analyzer-classify-route`](../cu-sdk-author-analyzer-classify-route/SKILL.md)109(both inner extractors and the outer classifier).110111## Classify-and-route rule112113When using `config.contentCategories` to classify and route mixed-document114packets:1151161. **Category descriptions follow the same text-anchored rule** as field117 descriptions. Describe each category by the text that appears on its118 pages (headings, labels), not by visual style.1192. **`config.enableSegment` must be `true`** so the classifier carves the120 packet into segments before routing each one.1213. **Inner analyzers must already exist** before the outer classifier is122 created.1234. **Category fill rate is per-category**, not packet-wide. A field that124 only appears in invoice segments should be evaluated against the number125 of invoice segments, not the total number of segments.1265. **No top-level `fieldSchema`** on the outer classifier. The outer127 analyzer's job is classification + routing only; field extraction128 belongs in the inner analyzers.129130Used by [`cu-sdk-author-analyzer-classify-route`](../cu-sdk-author-analyzer-classify-route/SKILL.md).131132## Related Skills133134- `cu-sdk-setup` — Set up Python environment and run samples135- `cu-sdk-sample-run` — Run specific samples interactively136- `cu-sdk-author-analyzer` — Author + test a custom analyzer for one document type137- `cu-sdk-author-analyzer-classify-route` — Author + test a classify-and-route pipeline for mixed-document packets