5.2 AI Enrichment with Skillsets

Key Takeaways

  • Skillsets are ordered arrays of skills that define the AI enrichment pipeline — each skill takes an input, processes it, and produces an output.
  • Built-in skills include OCR, image analysis, entity recognition, key phrase extraction, sentiment analysis, language detection, text translation, and PII detection.
  • Custom skills (Web API skill) allow calling external HTTP endpoints for custom processing logic not covered by built-in skills.
  • The enrichment tree is a hierarchical document structure where each skill reads from and writes to specific paths (e.g., /document/content, /document/organizations).
  • Knowledge stores persist enrichment outputs to Azure Table Storage, Blob Storage, or both for analytics beyond the search index.
Last updated: March 2026

AI Enrichment with Skillsets

Quick Answer: Skillsets define AI enrichment pipelines using built-in skills (OCR, NER, key phrases, sentiment) and custom skills (Web API calls). Skills read from and write to the enrichment tree (hierarchical document structure). Knowledge stores persist enriched data outside the search index.

Skillset Structure

{
    "name": "my-ai-skillset",
    "description": "Extract entities, key phrases, and perform OCR",
    "skills": [
        {
            "@odata.type": "#Microsoft.Skills.Vision.OcrSkill",
            "name": "ocr-skill",
            "context": "/document/normalized_images/*",
            "inputs": [
                {"name": "image", "source": "/document/normalized_images/*"}
            ],
            "outputs": [
                {"name": "text", "targetName": "ocrText"}
            ]
        },
        {
            "@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
            "name": "entity-recognition",
            "context": "/document",
            "categories": ["Organization", "Person", "Location"],
            "inputs": [
                {"name": "text", "source": "/document/content"}
            ],
            "outputs": [
                {"name": "organizations", "targetName": "organizations"},
                {"name": "persons", "targetName": "people"},
                {"name": "locations", "targetName": "locations"}
            ]
        },
        {
            "@odata.type": "#Microsoft.Skills.Text.KeyPhraseExtractionSkill",
            "name": "key-phrase-extraction",
            "context": "/document",
            "inputs": [
                {"name": "text", "source": "/document/content"}
            ],
            "outputs": [
                {"name": "keyPhrases", "targetName": "keyPhrases"}
            ]
        }
    ],
    "knowledgeStore": {
        "storageConnectionString": "<storage-connection-string>",
        "projections": [
            {
                "tables": [
                    {
                        "tableName": "documentsTable",
                        "generatedKeyName": "docId",
                        "source": "/document"
                    }
                ]
            }
        ]
    }
}

Built-in Skills

Text Skills

Skill@odata.typeInputOutput
Entity Recognition#Microsoft.Skills.Text.V3.EntityRecognitionSkilltextorganizations, persons, locations, etc.
Key Phrase Extraction#Microsoft.Skills.Text.KeyPhraseExtractionSkilltextkeyPhrases
Language Detection#Microsoft.Skills.Text.LanguageDetectionSkilltextlanguageCode, languageName
Sentiment Analysis#Microsoft.Skills.Text.V3.SentimentSkilltextsentiment, confidenceScores
PII Detection#Microsoft.Skills.Text.PIIDetectionSkilltextpiiEntities, maskedText
Text Merge#Microsoft.Skills.Text.MergeSkilltext, insertTextmergedText
Text Split#Microsoft.Skills.Text.SplitSkilltexttextItems (chunks)
Translation#Microsoft.Skills.Text.TranslationSkilltexttranslatedText

Vision Skills

Skill@odata.typeInputOutput
OCR#Microsoft.Skills.Vision.OcrSkillimagetext
Image Analysis#Microsoft.Skills.Vision.ImageAnalysisSkillimagetags, description, categories

Utility Skills

Skill@odata.typePurpose
Shaper#Microsoft.Skills.Util.ShaperSkillReshape enrichment tree for knowledge store projections
Conditional#Microsoft.Skills.Util.ConditionalSkillIf-then-else logic in the pipeline

The Enrichment Tree

The enrichment tree is a hierarchical structure representing the document and its enrichments:

/document
├── content                        (original text content)
├── metadata_storage_name          (file name)
├── metadata_storage_path          (file path)
├── normalized_images/             (extracted images)
│   ├── [0]
│   │   ├── ocrText               (OCR output)
│   │   └── imageTags             (image analysis output)
│   └── [1]
│       ├── ocrText
│       └── imageTags
├── organizations                  (NER output)
├── people                         (NER output)
├── locations                      (NER output)
├── keyPhrases                     (key phrase output)
└── language                       (language detection output)

On the Exam: Understanding the enrichment tree path syntax is critical. Skills reference paths like /document/content (text content), /document/normalized_images/* (each image), and /document/organizations (enrichment output). Questions may ask you to fix a skillset by correcting the input/output paths.

Custom Skills (Web API Skill)

Custom skills call external HTTP endpoints for processing not covered by built-in skills:

{
    "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
    "name": "custom-classification",
    "description": "Call a custom classification API",
    "uri": "https://my-function-app.azurewebsites.net/api/classify",
    "httpMethod": "POST",
    "timeout": "PT30S",
    "batchSize": 10,
    "context": "/document",
    "inputs": [
        {"name": "text", "source": "/document/content"}
    ],
    "outputs": [
        {"name": "category", "targetName": "documentCategory"}
    ]
}

Custom Skill Request/Response Contract

The custom endpoint must accept and return data in a specific format:

Request:

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "text": "Document content to classify..."
            }
        }
    ]
}

Response:

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "category": "Legal"
            },
            "errors": [],
            "warnings": []
        }
    ]
}

Knowledge Stores

Knowledge stores persist enriched data outside the search index for analytics and downstream processing:

Projection Types

ProjectionStorageBest For
Table projectionsAzure Table StorageStructured data for Power BI analytics
Object projectionsAzure Blob StorageEnriched JSON documents
File projectionsAzure Blob StorageNormalized images from documents

Use Cases

  • Power BI dashboards: Connect to table projections for business analytics
  • Data science: Use object projections as training data for ML models
  • Document archives: Store enriched documents with extracted metadata
Test Your Knowledge

What is the enrichment tree in Azure AI Search?

A
B
C
D
Test Your Knowledge

When should you use a Custom Web API Skill instead of a built-in skill?

A
B
C
D
Test Your Knowledge

Which knowledge store projection type should you use for Power BI dashboards?

A
B
C
D