[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XEF9K6EP73VE9F39B0QBGD":3,"skill-same:01M6XEF9K6EP73VE9F39B0QBGD":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":14,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M6XEF9K6EP73VE9F39B0QBGD","azure-ai-document-intelligence-dotnet",null,"Azure AI Document Intelligence SDK for .NET. Extract text, tables, and structured data from documents using prebuilt and custom models.","sapsapshen\u002Fai-memory-router","sapsapshen","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F20347959?v=4","01M6XDQEF1DP50DKF37H81J3J5","shenmian","01M6XDQEJPE41Y3DT2763X8ZJN",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Fazure-ai-document-intelligence-dotnet\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"dotnet","azure ai","azure","azure ai document intelligence dotnet","document","intelligence","models","2026","custom","unknown","for","tables","structured","community","structured data","extract","text","data","documents","sdk","2026-11-10 10:12:30",false,"---\nname: azure-ai-document-intelligence-dotnet\ndescription: Azure AI Document Intelligence SDK for .NET. Extract text, tables, and structured data from documents using prebuilt and custom models.\nrisk: unknown\nsource: community\ndate_added: '2026-02-27'\n---\n\n# Azure.AI.DocumentIntelligence (.NET)\n\nExtract text, tables, and structured data from documents using prebuilt and custom models.\n\n## Installation\n\n```bash\ndotnet add package Azure.AI.DocumentIntelligence\ndotnet add package Azure.Identity\n```\n\n**Current Version**: v1.0.0 (GA)\n\n## Environment Variables\n\n```bash\nDOCUMENT_INTELLIGENCE_ENDPOINT=https:\u002F\u002F\u003Cresource-name>.cognitiveservices.azure.com\u002F\nDOCUMENT_INTELLIGENCE_API_KEY=\u003Cyour-api-key>\nBLOB_CONTAINER_SAS_URL=https:\u002F\u002F\u003Cstorage>.blob.core.windows.net\u002F\u003Ccontainer>?\u003Csas-token>\n```\n\n## Authentication\n\n### Microsoft Entra ID (Recommended)\n\n```csharp\nusing Azure.Identity;\nusing Azure.AI.DocumentIntelligence;\n\nstring endpoint = Environment.GetEnvironmentVariable(\"DOCUMENT_INTELLIGENCE_ENDPOINT\");\nvar credential = new DefaultAzureCredential();\nvar client = new DocumentIntelligenceClient(new Uri(endpoint), credential);\n```\n\n> **Note**: Entra ID requires a **custom subdomain** (e.g., `https:\u002F\u002F\u003Cresource-name>.cognitiveservices.azure.com\u002F`), not a regional endpoint.\n\n### API Key\n\n```csharp\nstring endpoint = Environment.GetEnvironmentVariable(\"DOCUMENT_INTELLIGENCE_ENDPOINT\");\nstring apiKey = Environment.GetEnvironmentVariable(\"DOCUMENT_INTELLIGENCE_API_KEY\");\nvar client = new DocumentIntelligenceClient(new Uri(endpoint), new AzureKeyCredential(apiKey));\n```\n\n## Client Types\n\n| Client | Purpose |\n|--------|---------|\n| `DocumentIntelligenceClient` | Analyze documents, classify documents |\n| `DocumentIntelligenceAdministrationClient` | Build\u002Fmanage custom models and classifiers |\n\n## Prebuilt Models\n\n| Model ID | Description |\n|----------|-------------|\n| `prebuilt-read` | Extract text, languages, handwriting |\n| `prebuilt-layout` | Extract text, tables, selection marks, structure |\n| `prebuilt-invoice` | Extract invoice fields (vendor, items, totals) |\n| `prebuilt-receipt` | Extract receipt fields (merchant, items, total) |\n| `prebuilt-idDocument` | Extract ID document fields (name, DOB, address) |\n| `prebuilt-businessCard` | Extract business card fields |\n| `prebuilt-tax.us.w2` | Extract W-2 tax form fields |\n| `prebuilt-healthInsuranceCard.us` | Extract health insurance card fields |\n\n## Core Workflows\n\n### 1. Analyze Invoice\n\n```csharp\nusing Azure.AI.DocumentIntelligence;\n\nUri invoiceUri = new Uri(\"https:\u002F\u002Fexample.com\u002Finvoice.pdf\");\n\nOperation\u003CAnalyzeResult> operation = await client.AnalyzeDocumentAsync(\n    WaitUntil.Completed, \n    \"prebuilt-invoice\", \n    invoiceUri);\n\nAnalyzeResult result = operation.Value;\n\nforeach (AnalyzedDocument document in result.Documents)\n{\n    if (document.Fields.TryGetValue(\"VendorName\", out DocumentField vendorNameField)\n        && vendorNameField.FieldType == DocumentFieldType.String)\n    {\n        string vendorName = vendorNameField.ValueString;\n        Console.WriteLine($\"Vendor Name: '{vendorName}', confidence: {vendorNameField.Confidence}\");\n    }\n\n    if (document.Fields.TryGetValue(\"InvoiceTotal\", out DocumentField invoiceTotalField)\n        && invoiceTotalField.FieldType == DocumentFieldType.Currency)\n    {\n        CurrencyValue invoiceTotal = invoiceTotalField.ValueCurrency;\n        Console.WriteLine($\"Invoice Total: '{invoiceTotal.CurrencySymbol}{invoiceTotal.Amount}'\");\n    }\n    \n    \u002F\u002F Extract line items\n    if (document.Fields.TryGetValue(\"Items\", out DocumentField itemsField)\n        && itemsField.FieldType == DocumentFieldType.List)\n    {\n        foreach (DocumentField item in itemsField.ValueList)\n        {\n            var itemFields = item.ValueDictionary;\n            if (itemFields.TryGetValue(\"Description\", out DocumentField descField))\n                Console.WriteLine($\"  Item: {descField.ValueString}\");\n        }\n    }\n}\n```\n\n### 2. Extract Layout (Text, Tables, Structure)\n\n```csharp\nUri fileUri = new Uri(\"https:\u002F\u002Fexample.com\u002Fdocument.pdf\");\n\nOperation\u003CAnalyzeResult> operation = await client.AnalyzeDocumentAsync(\n    WaitUntil.Completed, \n    \"prebuilt-layout\", \n    fileUri);\n\nAnalyzeResult result = operation.Value;\n\n\u002F\u002F Extract text by page\nforeach (DocumentPage page in result.Pages)\n{\n    Console.WriteLine($\"Page {page.PageNumber}: {page.Lines.Count} lines, {page.Words.Count} words\");\n    \n    foreach (DocumentLine line in page.Lines)\n    {\n        Console.WriteLine($\"  Line: '{line.Content}'\");\n    }\n}\n\n\u002F\u002F Extract tables\nforeach (DocumentTable table in result.Tables)\n{\n    Console.WriteLine($\"Table: {table.RowCount} rows x {table.ColumnCount} columns\");\n    foreach (DocumentTableCell cell in table.Cells)\n    {\n        Console.WriteLine($\"  Cell ({cell.RowIndex}, {cell.ColumnIndex}): {cell.Content}\");\n    }\n}\n```\n\n### 3. Analyze Receipt\n\n```csharp\nOperation\u003CAnalyzeResult> operation = await client.AnalyzeDocumentAsync(\n    WaitUntil.Completed, \n    \"prebuilt-receipt\", \n    receiptUri);\n\nAnalyzeResult result = operation.Value;\n\nforeach (AnalyzedDocument document in result.Documents)\n{\n    if (document.Fields.TryGetValue(\"MerchantName\", out DocumentField merchantField))\n        Console.WriteLine($\"Merchant: {merchantField.ValueString}\");\n        \n    if (document.Fields.TryGetValue(\"Total\", out DocumentField totalField))\n        Console.WriteLine($\"Total: {totalField.ValueCurrency.Amount}\");\n        \n    if (document.Fields.TryGetValue(\"TransactionDate\", out DocumentField dateField))\n        Console.WriteLine($\"Date: {dateField.ValueDate}\");\n}\n```\n\n### 4. Build Custom Model\n\n```csharp\nvar adminClient = new DocumentIntelligenceAdministrationClient(\n    new Uri(endpoint), \n    new AzureKeyCredential(apiKey));\n\nstring modelId = \"my-custom-model\";\nUri blobContainerUri = new Uri(\"\u003Cblob-container-sas-url>\");\n\nvar blobSource = new BlobContentSource(blobContainerUri);\nvar options = new BuildDocumentModelOptions(modelId, DocumentBuildMode.Template, blobSource);\n\nOperation\u003CDocumentModelDetails> operation = await adminClient.BuildDocumentModelAsync(\n    WaitUntil.Completed, \n    options);\n\nDocumentModelDetails model = operation.Value;\n\nConsole.WriteLine($\"Model ID: {model.ModelId}\");\nConsole.WriteLine($\"Created: {model.CreatedOn}\");\n\nforeach (var docType in model.DocumentTypes)\n{\n    Console.WriteLine($\"Document type: {docType.Key}\");\n    foreach (var field in docType.Value.FieldSchema)\n    {\n        Console.WriteLine($\"  Field: {field.Key}, Confidence: {docType.Value.FieldConfidence[field.Key]}\");\n    }\n}\n```\n\n### 5. Build Document Classifier\n\n```csharp\nstring classifierId = \"my-classifier\";\nUri blobContainerUri = new Uri(\"\u003Cblob-container-sas-url>\");\n\nvar sourceA = new BlobContentSource(blobContainerUri) { Prefix = \"TypeA\u002Ftrain\" };\nvar sourceB = new BlobContentSource(blobContainerUri) { Prefix = \"TypeB\u002Ftrain\" };\n\nvar docTypes = new Dictionary\u003Cstring, ClassifierDocumentTypeDetails>()\n{\n    { \"TypeA\", new ClassifierDocumentTypeDetails(sourceA) },\n    { \"TypeB\", new ClassifierDocumentTypeDetails(sourceB) }\n};\n\nvar options = new BuildClassifierOptions(classifierId, docTypes);\n\nOperation\u003CDocumentClassifierDetails> operation = await adminClient.BuildClassifierAsync(\n    WaitUntil.Completed, \n    options);\n\nDocumentClassifierDetails classifier = operation.Value;\nConsole.WriteLine($\"Classifier ID: {classifier.ClassifierId}\");\n```\n\n### 6. Classify Document\n\n```csharp\nstring classifierId = \"my-classifier\";\nUri documentUri = new Uri(\"https:\u002F\u002Fexample.com\u002Fdocument.pdf\");\n\nvar options = new ClassifyDocumentOptions(classifierId, documentUri);\n\nOperation\u003CAnalyzeResult> operation = await client.ClassifyDocumentAsync(\n    WaitUntil.Completed, \n    options);\n\nAnalyzeResult result = operation.Value;\n\nforeach (AnalyzedDocument document in result.Documents)\n{\n    Console.WriteLine($\"Document type: {document.DocumentType}, confidence: {document.Confidence}\");\n}\n```\n\n### 7. Manage Models\n\n```csharp\n\u002F\u002F Get resource details\nDocumentIntelligenceResourceDetails resourceDetails = await adminClient.GetResourceDetailsAsync();\nConsole.WriteLine($\"Custom models: {resourceDetails.CustomDocumentModels.Count}\u002F{resourceDetails.CustomDocumentModels.Limit}\");\n\n\u002F\u002F Get specific model\nDocumentModelDetails model = await adminClient.GetModelAsync(\"my-model-id\");\nConsole.WriteLine($\"Model: {model.ModelId}, Created: {model.CreatedOn}\");\n\n\u002F\u002F List models\nawait foreach (DocumentModelDetails modelItem in adminClient.GetModelsAsync())\n{\n    Console.WriteLine($\"Model: {modelItem.ModelId}\");\n}\n\n\u002F\u002F Delete model\nawait adminClient.DeleteModelAsync(\"my-model-id\");\n```\n\n## Key Types Reference\n\n| Type | Description |\n|------|-------------|\n| `DocumentIntelligenceClient` | Main client for analysis |\n| `DocumentIntelligenceAdministrationClient` | Model management |\n| `AnalyzeResult` | Result of document analysis |\n| `AnalyzedDocument` | Single document within result |\n| `DocumentField` | Extracted field with value and confidence |\n| `DocumentFieldType` | String, Date, Number, Currency, etc. |\n| `DocumentPage` | Page info (lines, words, selection marks) |\n| `DocumentTable` | Extracted table with cells |\n| `DocumentModelDetails` | Custom model metadata |\n| `BlobContentSource` | Training data source |\n\n## Build Modes\n\n| Mode | Use Case |\n|------|----------|\n| `DocumentBuildMode.Template` | Fixed layout documents (forms) |\n| `DocumentBuildMode.Neural` | Variable layout documents |\n\n## Best Practices\n\n1. **Use DefaultAzureCredential** for production\n2. **Reuse client instances** — clients are thread-safe\n3. **Handle long-running operations** — Use `WaitUntil.Completed` for simplicity\n4. **Check field confidence** — Always verify `Confidence` property\n5. **Use appropriate model** — Prebuilt for common docs, custom for specialized\n6. **Use custom subdomain** — Required for Entra ID authentication\n\n## Error Handling\n\n```csharp\nusing Azure;\n\ntry\n{\n    var operation = await client.AnalyzeDocumentAsync(\n        WaitUntil.Completed, \n        \"prebuilt-invoice\", \n        documentUri);\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"Error: {ex.Status} - {ex.Message}\");\n}\n```\n\n## Related SDKs\n\n| SDK | Purpose | Install |\n|-----|---------|---------|\n| `Azure.AI.DocumentIntelligence` | Document analysis (this SDK) | `dotnet add package Azure.AI.DocumentIntelligence` |\n| `Azure.AI.FormRecognizer` | Legacy SDK (deprecated) | Use DocumentIntelligence instead |\n\n## Reference Links\n\n| Resource | URL |\n|----------|-----|\n| NuGet Package | https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FAzure.AI.DocumentIntelligence |\n| API Reference | https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Fazure.ai.documentintelligence |\n| GitHub Samples | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Ftree\u002Fmain\u002Fsdk\u002Fdocumentintelligence\u002FAzure.AI.DocumentIntelligence\u002Fsamples |\n| Document Intelligence Studio | https:\u002F\u002Fdocumentintelligence.ai.azure.com\u002F |\n| Prebuilt Models | https:\u002F\u002Faka.ms\u002Fazsdk\u002Fformrecognizer\u002Fmodels |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# Azure.AI.DocumentIntelligence (.NET)\n\nExtract text, tables, and structured data from documents using prebuilt and custom models.\n\n## Installation\n\n```bash\ndotnet add package Azure.AI.DocumentIntelligence\ndotnet add package Azure.Identity\n```\n\n**Current Version**: v1.0.0 (GA)\n\n## Environment Variables\n\n```bash\nDOCUMENT_INTELLIGENCE_ENDPOINT=https:\u002F\u002F\u003Cresource-name>.cognitiveservices.azure.com\u002F\nDOCUMENT_INTELLIGENCE_API_KEY=\u003Cyour-api-key>\nBLOB_CONTAINER_SAS_URL=https:\u002F\u002F\u003Cstorage>.blob.core.windows.net\u002F\u003Ccontainer>?\u003Csas-token>\n```\n\n## Authentication\n\n### Microsoft Entra ID (Recommended)\n\n```csharp\nusing Azure.Identity;\nusing Azure.AI.DocumentIntelligence;\n\nstring endpoint = Environment.GetEnvironmentVariable(\"DOCUMENT_INTELLIGENCE_ENDPOINT\");\nvar credential = new DefaultAzureCredential();\nvar client = new DocumentIntelligenceClient(new Uri(endpoint), credential);\n```\n\n> **Note**: Entra ID requires a **custom subdomain** (e.g., `https:\u002F\u002F\u003Cresource-name>.cognitiveservices.azure.com\u002F`), not a regional endpoint.\n\n### API Key\n\n```csharp\nstring endpoint = Environment.GetEnvironmentVariable(\"DOCUMENT_INTELLIGENCE_ENDPOINT\");\nstring apiKey = Environment.GetEnvironmentVariable(\"DOCUMENT_INTELLIGENCE_API_KEY\");\nvar client = new DocumentIntelligenceClient(new Uri(endpoint), new AzureKeyCredential(apiKey));\n```\n\n## Client Types\n\n| Client | Purpose |\n|--------|---------|\n| `DocumentIntelligenceClient` | Analyze documents, classify documents |\n| `DocumentIntelligenceAdministrationClient` | Build\u002Fmanage custom models and classifiers |\n\n## Prebuilt Models\n\n| Model ID | Description |\n|----------|-------------|\n| `prebuilt-read` | Extract text, languages, handwriting |\n| `prebuilt-layout` | Extract text, tables, selection marks, structure |\n| `prebuilt-invoice` | Extract invoice fields (vendor, items, totals) |\n| `prebuilt-receipt` | Extract receipt fields (merchant, items, total) |\n| `prebuilt-idDocument` | Extract ID document fields (name, DOB, address) |\n| `prebuilt-businessCard` | Extract business card fields |\n| `prebuilt-tax.us.w2` | Extract W-2 tax form fields |\n| `prebuilt-healthInsuranceCard.us` | Extract health insurance card fields |\n\n## Core Workflows\n\n### 1. Analyze Invoice\n\n```csharp\nusing Azure.AI.DocumentIntelligence;\n\nUri invoiceUri = new Uri(\"https:\u002F\u002Fexample.com\u002Finvoice.pdf\");\n\nOperation\u003CAnalyzeResult> operation = await client.AnalyzeDocumentAsync(\n    WaitUntil.Completed, \n    \"prebuilt-invoice\", \n    invoiceUri);\n\nAnalyzeResult result = operation.Value;\n\nforeach (AnalyzedDocument document in result.Documents)\n{\n    if (document.Fields.TryGetValue(\"VendorName\", out DocumentField vendorNameField)\n        && vendorNameField.FieldType == DocumentFieldType.String)\n    {\n        string vendorName = vendorNameField.ValueString;\n        Console.WriteLine($\"Vendor Name: '{vendorName}', confidence: {vendorNameField.Confidence}\");\n    }\n\n    if (document.Fields.TryGetValue(\"InvoiceTotal\", out DocumentField invoiceTotalField)\n        && invoiceTotalField.FieldType == DocumentFieldType.Currency)\n    {\n        CurrencyValue invoiceTotal = invoiceTotalField.ValueCurrency;\n        Console.WriteLine($\"Invoice Total: '{invoiceTotal.CurrencySymbol}{invoiceTotal.Amount}'\");\n    }\n    \n    \u002F\u002F Extract line items\n    if (document.Fields.TryGetValue(\"Items\", out DocumentField itemsField)\n        && itemsField.FieldType == DocumentFieldType.List)\n    {\n        foreach (DocumentField item in itemsField.ValueList)\n        {\n            var itemFields = item.ValueDictionary;\n            if (itemFields.TryGetValue(\"Description\", out DocumentField descField))\n                Console.WriteLine($\"  Item: {descField.ValueString}\");\n        }\n    }\n}\n```\n\n### 2. Extract Layout (Text, Tables, Structure)\n\n```csharp\nUri fileUri = new Uri(\"https:\u002F\u002Fexample.com\u002Fdocument.pdf\");\n\nOperation\u003CAnalyzeResult> operation = await client.AnalyzeDocumentAsync(\n    WaitUntil.Completed, \n    \"prebuilt-layout\", \n    fileUri);\n\nAnalyzeResult result = operation.Value;\n\n\u002F\u002F Extract text by page\nforeach (DocumentPage page in result.Pages)\n{\n    Console.WriteLine($\"Page {page.PageNumber}: {page.Lines.Count} lines, {page.Words.Count} words\");\n    \n    foreach (DocumentLine line in page.Lines)\n    {\n        Console.WriteLine($\"  Line: '{line.Content}'\");\n    }\n}\n\n\u002F\u002F Extract tables\nforeach (DocumentTable table in result.Tables)\n{\n    Console.WriteLine($\"Table: {table.RowCount} rows x {table.ColumnCount} columns\");\n    foreach (DocumentTableCell cell in table.Cells)\n    {\n        Console.WriteLine($\"  Cell ({cell.RowIndex}, {cell.ColumnIndex}): {cell.Content}\");\n    }\n}\n```\n\n### 3. Analyze Receipt\n\n```csharp\nOperation\u003CAnalyzeResult> operation = await client.AnalyzeDocumentAsync(\n    WaitUntil.Completed, \n    \"prebuilt-receipt\", \n    receiptUri);\n\nAnalyzeResult result = operation.Value;\n\nforeach (AnalyzedDocument document in result.Documents)\n{\n    if (document.Fields.TryGetValue(\"MerchantName\", out DocumentField merchantField))\n        Console.WriteLine($\"Merchant: {merchantField.ValueString}\");\n        \n    if (document.Fields.TryGetValue(\"Total\", out DocumentField totalField))\n        Console.WriteLine($\"Total: {totalField.ValueCurrency.Amount}\");\n        \n    if (document.Fields.TryGetValue(\"TransactionDate\", out DocumentField dateField))\n        Console.WriteLine($\"Date: {dateField.ValueDate}\");\n}\n```\n\n### 4. Build Custom Model\n\n```csharp\nvar adminClient = new DocumentIntelligenceAdministrationClient(\n    new Uri(endpoint), \n    new AzureKeyCredential(apiKey));\n\nstring modelId = \"my-custom-model\";\nUri blobContainerUri = new Uri(\"\u003Cblob-container-sas-url>\");\n\nvar blobSource = new BlobContentSource(blobContainerUri);\nvar options = new BuildDocumentModelOptions(modelId, DocumentBuildMode.Template, blobSource);\n\nOperation\u003CDocumentModelDetails> operation = await adminClient.BuildDocumentModelAsync(\n    WaitUntil.Completed, \n    options);\n\nDocumentModelDetails model = operation.Value;\n\nConsole.WriteLine($\"Model ID: {model.ModelId}\");\nConsole.WriteLine($\"Created: {model.CreatedOn}\");\n\nforeach (var docType in model.DocumentTypes)\n{\n    Console.WriteLine($\"Document type: {docType.Key}\");\n    foreach (var field in docType.Value.FieldSchema)\n    {\n        Console.WriteLine($\"  Field: {field.Key}, Confidence: {docType.Value.FieldConfidence[field.Key]}\");\n    }\n}\n```\n\n### 5. Build Document Classifier\n\n```csharp\nstring classifierId = \"my-classifier\";\nUri blobContainerUri = new Uri(\"\u003Cblob-container-sas-url>\");\n\nvar sourceA = new BlobContentSource(blobContainerUri) { Prefix = \"TypeA\u002Ftrain\" };\nvar sourceB = new BlobContentSource(blobContainerUri) { Prefix = \"TypeB\u002Ftrain\" };\n\nvar docTypes = new Dictionary\u003Cstring, ClassifierDocumentTypeDetails>()\n{\n    { \"TypeA\", new ClassifierDocumentTypeDetails(sourceA) },\n    { \"TypeB\", new ClassifierDocumentTypeDetails(sourceB) }\n};\n\nvar options = new BuildClassifierOptions(classifierId, docTypes);\n\nOperation\u003CDocumentClassifierDetails> operation = await adminClient.BuildClassifierAsync(\n    WaitUntil.Completed, \n    options);\n\nDocumentClassifierDetails classifier = operation.Value;\nConsole.WriteLine($\"Classifier ID: {classifier.ClassifierId}\");\n```\n\n### 6. Classify Document\n\n```csharp\nstring classifierId = \"my-classifier\";\nUri documentUri = new Uri(\"https:\u002F\u002Fexample.com\u002Fdocument.pdf\");\n\nvar options = new ClassifyDocumentOptions(classifierId, documentUri);\n\nOperation\u003CAnalyzeResult> operation = await client.ClassifyDocumentAsync(\n    WaitUntil.Completed, \n    options);\n\nAnalyzeResult result = operation.Value;\n\nforeach (AnalyzedDocument document in result.Documents)\n{\n    Console.WriteLine($\"Document type: {document.DocumentType}, confidence: {document.Confidence}\");\n}\n```\n\n### 7. Manage Models\n\n```csharp\n\u002F\u002F Get resource details\nDocumentIntelligenceResourceDetails resourceDetails = await adminClient.GetResourceDetailsAsync();\nConsole.WriteLine($\"Custom models: {resourceDetails.CustomDocumentModels.Count}\u002F{resourceDetails.CustomDocumentModels.Limit}\");\n\n\u002F\u002F Get specific model\nDocumentModelDetails model = await adminClient.GetModelAsync(\"my-model-id\");\nConsole.WriteLine($\"Model: {model.ModelId}, Created: {model.CreatedOn}\");\n\n\u002F\u002F List models\nawait foreach (DocumentModelDetails modelItem in adminClient.GetModelsAsync())\n{\n    Console.WriteLine($\"Model: {modelItem.ModelId}\");\n}\n\n\u002F\u002F Delete model\nawait adminClient.DeleteModelAsync(\"my-model-id\");\n```\n\n## Key Types Reference\n\n| Type | Description |\n|------|-------------|\n| `DocumentIntelligenceClient` | Main client for analysis |\n| `DocumentIntelligenceAdministrationClient` | Model management |\n| `AnalyzeResult` | Result of document analysis |\n| `AnalyzedDocument` | Single document within result |\n| `DocumentField` | Extracted field with value and confidence |\n| `DocumentFieldType` | String, Date, Number, Currency, etc. |\n| `DocumentPage` | Page info (lines, words, selection marks) |\n| `DocumentTable` | Extracted table with cells |\n| `DocumentModelDetails` | Custom model metadata |\n| `BlobContentSource` | Training data source |\n\n## Build Modes\n\n| Mode | Use Case |\n|------|----------|\n| `DocumentBuildMode.Template` | Fixed layout documents (forms) |\n| `DocumentBuildMode.Neural` | Variable layout documents |\n\n## Best Practices\n\n1. **Use DefaultAzureCredential** for production\n2. **Reuse client instances** — clients are thread-safe\n3. **Handle long-running operations** — Use `WaitUntil.Completed` for simplicity\n4. **Check field confidence** — Always verify `Confidence` property\n5. **Use appropriate model** — Prebuilt for common docs, custom for specialized\n6. **Use custom subdomain** — Required for Entra ID authentication\n\n## Error Handling\n\n```csharp\nusing Azure;\n\ntry\n{\n    var operation = await client.AnalyzeDocumentAsync(\n        WaitUntil.Completed, \n        \"prebuilt-invoice\", \n        documentUri);\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"Error: {ex.Status} - {ex.Message}\");\n}\n```\n\n## Related SDKs\n\n| SDK | Purpose | Install |\n|-----|---------|---------|\n| `Azure.AI.DocumentIntelligence` | Document analysis (this SDK) | `dotnet add package Azure.AI.DocumentIntelligence` |\n| `Azure.AI.FormRecognizer` | Legacy SDK (deprecated) | Use DocumentIntelligence instead |\n\n## Reference Links\n\n| Resource | URL |\n|----------|-----|\n| NuGet Package | https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FAzure.AI.DocumentIntelligence |\n| API Reference | https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Fazure.ai.documentintelligence |\n| GitHub Samples | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Ftree\u002Fmain\u002Fsdk\u002Fdocumentintelligence\u002FAzure.AI.DocumentIntelligence\u002Fsamples |\n| Document Intelligence Studio | https:\u002F\u002Fdocumentintelligence.ai.azure.com\u002F |\n| Prebuilt Models | https:\u002F\u002Faka.ms\u002Fazsdk\u002Fformrecognizer\u002Fmodels |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{"name":5,"risk":33,"source":37,"date_added":49,"description":7},"2026-02-27","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fcopilot\u002Fazure-ai-document-intelligence-dotnet","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill azure-ai-document-intelligence-dotnet",{"tool":62,"command":63},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill azure-ai-document-intelligence-dotnet",{"tool":65,"command":66},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill azure-ai-document-intelligence-dotnet","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Fazure-ai-document-intelligence-dotnet\u002FSKILL.md",true,[],[71,95,120,130,143,160],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":82,"publishedAt":44},"01M71ATQRKG48SH06FQ697T5G9","wechat-search","Search WeChat Official Account articles using OpenClaw's web search and fetch capabilities with compliance-focused design.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fwechat-search-release\u002FSKILL.md",[77],{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[83,84,85,86,87,88,89,90,91,92,93,94],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch","with",{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":44},"01M71ATNAVGZB35PFYM2GC5N00","trend-tap","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend tap', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-tap\u002FSKILL.md",[],[102,103,104,105,106,107,85,108,109,110,111,112,113,114,41,115,116,117,118,119],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","when","brew","live","google","install","read","across","api",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":44},"01M71ATJ9AM5KM15AA8PS302EB","trend-radar","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend pulse', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-radar\u002FSKILL.md",[],[127,128,102,113,114,41,115,106,85,117,129,118,119,112,110,109,108,116,107,105],"trend radar","radar","pulse",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":44},"01M71ATGF095N3EJM9G8SD0BB5","tech-news-daily","每日科技新闻汇——从全球多个 RSS 源抓取最新科技新闻，翻译（英→中）、去重、排版成每日简报。当用户询问科技新闻、科技新鲜事、每日科技、技术动态、Daily Tech News 或类似表达时触发此技能。","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftech-news-daily\u002FSKILL.md",[],[137,138,139,140,141,142],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":152,"publishedAt":44},"01M71ATFAEAMQ17M70NQNY7SR8","summarize","Summarize URLs or files with the summarize CLI (web, PDFs, images, audio, YouTube).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsummarize\u002FSKILL.md",[149],{"categoryNo":150,"categoryName":151,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[145,91,153,154,155,94,113,156,157,158,104,159,116],"Audio","cli","youtube","images","https","files","pdfs",{"skillNo":161,"name":162,"nameZh":6,"description":163,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":164,"categories":165,"keywords":166,"publishedAt":44},"01M71ATDNS3R0M4H936PACQAWZ","sonoscli","Control Sonos speakers (discover\u002Fstatus\u002Fplay\u002Fvolume\u002Fgroup).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsonoscli\u002FSKILL.md",[],[162,167,168,169,116,170,157,171,172,173,174,175],"status","play","go","latest","github","discover","control","cmd","volume"]