Communitygithub.com

microsoft/azure-ai-document-intelligence-dotnet

SDK de Azure AI Document Intelligence para .NET. Extrae texto, tablas y datos estructurados de documentos usando modelos predefinidos y personalizados. Útil para procesamiento de facturas, extracción de recibos, análisis de documentos de identidad y modelos de documentos personalizados. Disparadores: "Document Intelligence", "DocumentIntelligenceClient", "form recognizer", "invoice extraction", "receipt OCR", "document analysis .NET".

¿Qué es azure-ai-document-intelligence-dotnet?

Esta habilidad proporciona el SDK de Azure AI Document Intelligence para .NET, permitiendo a los agentes de IA extraer texto, tablas y datos estructurados de documentos mediante modelos predefinidos (como facturas, recibos, documentos de identidad) y modelos personalizados. Es útil para aplicaciones que necesitan automatizar el procesamiento de documentos, como la validación de facturas o la extracción de información de formularios. Soporta plataformas .NET y se integra con Azure Cognitive Services. El SDK ofrece dos clientes principales: `DocumentIntelligenceClient` para análisis y clasificación de documentos, y `DocumentIntelligenceAdministrationClient` para construir y gestionar modelos personalizados. La documentación incluye flujos de trabajo detallados, ejemplos de código en C#, instrucciones de instalación, configuraciones de autenticación (clave de API o Microsoft Entra ID) y prácticas recomendadas. Los agentes pueden usar esta habilidad para analizar documentos desde URLs o archivos, extraer campos específicos (como nombres de proveedores o totales de facturas), y gestionar modelos de documentos personalizados de forma eficiente.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/microsoft/agent-skills/tree/main/.github/plugins/azure-sdk-dotnet/skills/azure-ai-document-intelligence-dotnet

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Azure.AI.DocumentIntelligence (.NET)

Extrae texto, tablas y datos estructurados de documentos usando modelos predefinidos y personalizados.

Instalación

dotnet add package Azure.AI.DocumentIntelligence
dotnet add package Azure.Identity

Versión actual: v1.0.0 (GA)

Variables de entorno

DOCUMENT_INTELLIGENCE_ENDPOINT=https://<nombre-recurso>.cognitiveservices.azure.com/  # Obligatorio: punto de conexión de Document Intelligence
DOCUMENT_INTELLIGENCE_API_KEY=<tu-clave-api>  # Solo necesario para autenticación AzureKeyCredential
BLOB_CONTAINER_SAS_URL=https://<storage>.blob.core.windows.net/<contenedor>?<token-sas>  # Opcional: URL SAS del contenedor de blobs para datos de entrenamiento
AZURE_TOKEN_CREDENTIALS=prod  # Obligatorio solo si se usa DefaultAzureCredential en producción

Autenticación

Credencial de token de Microsoft Entra

using Azure.Identity;
using Azure.AI.DocumentIntelligence;

string endpoint = Environment.GetEnvironmentVariable("DOCUMENT_INTELLIGENCE_ENDPOINT");
// Desarrollo local: DefaultAzureCredential. Producción: establecer AZURE_TOKEN_CREDENTIALS=prod o AZURE_TOKEN_CREDENTIALS=<credencial_específica>
var credential = new DefaultAzureCredential(
    DefaultAzureCredential.DefaultEnvironmentVariableName
);
// O usar una credencial específica directamente en producción:
// Consulte https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes
// var credential = new ManagedIdentityCredential();
var client = new DocumentIntelligenceClient(new Uri(endpoint), credential);

Nota: Entra ID requiere un subdominio personalizado (por ejemplo, https://<nombre-recurso>.cognitiveservices.azure.com/), no un punto de conexión regional.

Clave de API

string endpoint = Environment.GetEnvironmentVariable("DOCUMENT_INTELLIGENCE_ENDPOINT");
string apiKey = Environment.GetEnvironmentVariable("DOCUMENT_INTELLIGENCE_API_KEY");
var client = new DocumentIntelligenceClient(new Uri(endpoint), new AzureKeyCredential(apiKey));

Tipos de cliente

ClientePropósito
DocumentIntelligenceClientAnalizar documentos, clasificar documentos
DocumentIntelligenceAdministrationClientConstruir/gestionar modelos y clasificadores personalizados

Modelos predefinidos

ID del modeloDescripción
prebuilt-readExtraer texto, idiomas, escritura a mano
prebuilt-layoutExtraer texto, tablas, marcas de selección, estructura
prebuilt-invoiceExtraer campos de factura (proveedor, artículos, totales)
prebuilt-receiptExtraer campos de recibo (comercio, artículos, total)
prebuilt-idDocumentExtraer campos de documento de identidad (nombre, fecha de nacimiento, dirección)
prebuilt-businessCardExtraer campos de tarjeta de presentación
prebuilt-tax.us.w2Extraer campos del formulario de impuestos W-2
prebuilt-healthInsuranceCard.usExtraer campos de tarjeta de seguro médico

Flujos de trabajo principales

1. Analizar factura

using Azure.AI.DocumentIntelligence;

Uri invoiceUri = new Uri("https://example.com/invoice.pdf");

Operation<AnalyzeResult> operation = await client.AnalyzeDocumentAsync(
    WaitUntil.Completed, 
    "prebuilt-invoice", 
    invoiceUri);

AnalyzeResult result = operation.Value;

foreach (AnalyzedDocument document in result.Documents)
{
    if (document.Fields.TryGetValue("VendorName", out DocumentField vendorNameField)
        && vendorNameField.FieldType == DocumentFieldType.String)
    {
        string vendorName = vendorNameField.ValueString;
        Console.WriteLine($"Nombre del proveedor: '{vendorName}', confianza: {vendorNameField.Confidence}");
    }

    if (document.Fields.TryGetValue("InvoiceTotal", out DocumentField invoiceTotalField)
        && invoiceTotalField.FieldType == DocumentFieldType.Currency)
    {
        CurrencyValue invoiceTotal = invoiceTotalField.ValueCurrency;
        Console.WriteLine($"Total de la factura: '{invoiceTotal.CurrencySymbol}{invoiceTotal.Amount}'");
    }
    
    // Extraer líneas de artículos
    if (document.Fields.TryGetValue("Items", out DocumentField itemsField)
        && itemsField.FieldType == DocumentFieldType.List)
    {
        foreach (DocumentField item in itemsField.ValueList)
        {
            var itemFields = item.ValueDictionary;
            if (itemFields.TryGetValue("Description", out DocumentField descField))
                Console.WriteLine($"  Artículo: {descField.ValueString}");
        }
    }
}

2. Extraer diseño (texto, tablas, estructura)

Uri fileUri = new Uri("https://example.com/document.pdf");

Operation<AnalyzeResult> operation = await client.AnalyzeDocumentAsync(
    WaitUntil.Completed, 
    "prebuilt-layout", 
    fileUri);

AnalyzeResult result = operation.Value;

// Extraer texto por página
foreach (DocumentPage page in result.Pages)
{
    Console.WriteLine($"Página {page.PageNumber}: {page.Lines.Count} líneas, {page.Words.Count} palabras");
    
    foreach (DocumentLine line in page.Lines)
    {
        Console.WriteLine($"  Línea: '{line.Content}'");
    }
}

// Extraer tablas
foreach (DocumentTable table in result.Tables)
{
    Console.WriteLine($"Tabla: {table.RowCount} filas x {table.ColumnCount} columnas");
    foreach (DocumentTableCell cell in table.Cells)
    {
        Console.WriteLine($"  Celda ({cell.RowIndex}, {cell.ColumnIndex}): {cell.Content}");
    }
}

3. Analizar recibo

Operation<AnalyzeResult> operation = await client.AnalyzeDocumentAsync(
    WaitUntil.Completed, 
    "prebuilt-receipt", 
    receiptUri);

AnalyzeResult result = operation.Value;

foreach (AnalyzedDocument document in result.Documents)
{
    if (document.Fields.TryGetValue("MerchantName", out DocumentField merchantField))
        Console.WriteLine($"Comercio: {merchantField.ValueString}");
        
    if (document.Fields.TryGetValue("Total", out DocumentField totalField))
        Console.WriteLine($"Total: {totalField.ValueCurrency.Amount}");
        
    if (document.Fields.TryGetValue("TransactionDate", out DocumentField dateField))
        Console.WriteLine($"Fecha: {dateField.ValueDate}");
}

4. Construir modelo personalizado

var adminClient = new DocumentIntelligenceAdministrationClient(
    new Uri(endpoint), 
    new AzureKeyCredential(apiKey));

string modelId = "my-custom-model";
Uri blobContainerUri = new Uri("<blob-container-sas-url>");

var blobSource = new BlobContentSource(blobContainerUri);
var options = new BuildDocumentModelOptions(modelId, DocumentBuildMode.Template, blobSource);

Operation<DocumentModelDetails> operation = await adminClient.BuildDocumentModelAsync(
    WaitUntil.Completed, 
    options);

DocumentModelDetails model = operation.Value;

Console.WriteLine($"ID del modelo: {model.ModelId}");
Console.WriteLine($"Creado: {model.CreatedOn}");

foreach (var docType in model.DocumentTypes)
{
    Console.WriteLine($"Tipo de documento: {docType.Key}");
    foreach (var field in docType.Value.FieldSchema)
    {
        Console.WriteLine($"  Campo: {field.Key}, Confianza: {docType.Value.FieldConfidence[field.Key]}");
    }
}

5. Construir clasificador de documentos

string classifierId = "my-classifier";
Uri blobContainerUri = new Uri("<blob-container-sas-url>");

var sourceA = new BlobContentSource(blobContainerUri) { Prefix = "TypeA/train" };
var sourceB = new BlobContentSource(blobContainerUri) { Prefix = "TypeB/train" };

var docTypes = new Dictionary<string, ClassifierDocumentTypeDetails>()
{
    { "TypeA", new ClassifierDocumentTypeDetails(sourceA) },
    { "TypeB", new ClassifierDocumentTypeDetails(sourceB) }
};

var options = new BuildClassifierOptions(classifierId, docTypes);

Operation<DocumentClassifierDetails> operation = await adminClient.BuildClassifierAsync(
    WaitUntil.Completed, 
    options);

DocumentClassifierDetails classifier = operation.Value;
Console.WriteLine($"ID del clasificador: {classifier.ClassifierId}");

6. Clasificar documento

string classifierId = "my-classifier";
Uri documentUri = new Uri("https://example.com/document.pdf");

var options = new ClassifyDocumentOptions(classifierId, documentUri);

Operation<AnalyzeResult> operation = await client.ClassifyDocumentAsync(
    WaitUntil.Completed, 
    options);

AnalyzeResult result = operation.Value;

foreach (AnalyzedDocument document in result.Documents)
{
    Console.WriteLine($"Tipo de documento: {document.DocumentType}, confianza: {document.Confidence}");
}

7. Gestionar modelos

// Obtener detalles del recurso
DocumentIntelligenceResourceDetails resourceDetails = await adminClient.GetResourceDetailsAsync();
Console.WriteLine($"Modelos personalizados: {resourceDetails.CustomDocumentModels.Count}/{resourceDetails.CustomDocumentModels.Limit}");

// Obtener modelo específico
DocumentModelDetails model = await adminClient.GetModelAsync("my-model-id");
Console.WriteLine($"Modelo: {model.ModelId}, Creado: {model.CreatedOn}");

// Listar modelos
await foreach (DocumentModelDetails modelItem in adminClient.GetModelsAsync())
{
    Console.WriteLine($"Modelo: {modelItem.ModelId}");
}

// Eliminar modelo
await adminClient.DeleteModelAsync("my-model-id");

Referencia de tipos clave

TipoDescripción
DocumentIntelligenceClientCliente principal para análisis
DocumentIntelligenceAdministrationClientGestión de modelos
AnalyzeResultResultado del análisis de documentos
AnalyzedDocumentDocumento individual dentro del resultado
DocumentFieldCampo extraído con valor y confianza
DocumentFieldTypeCadena, Fecha, Número, Moneda, etc.
DocumentPageInformación de página (líneas, palabras, marcas de selección)
DocumentTableTabla extraída con celdas
DocumentModelDetailsMetadatos del modelo personalizado
BlobContentSourceFuente de datos de entrenamiento

Modos de construcción

ModoCaso de uso
DocumentBuildMode.TemplateDocumentos con diseño fijo (formularios)
DocumentBuildMode.NeuralDocumentos con diseño variable

Prácticas recomendadas

  1. Usa DefaultAzureCredential para producción
  2. Reutiliza instancias de cliente — los clientes son seguros para subprocesos
  3. Maneja operaciones de larga duración — Usa WaitUntil.Completed para simplicidad
  4. Verifica la confianza del campo — Siempre comprueba la propiedad Confidence
  5. Usa el modelo adecuado — Predefinido para documentos comunes, personalizado para especializados
  6. Usa un subdominio personalizado — Obligatorio para autenticación con Entra ID

Manejo de errores

using Azure;

try
{
    var operation = await client.AnalyzeDocumentAsync(
        WaitUntil.Completed, 
        "prebuilt-invoice", 
        documentUri);
}
catch (RequestFailedException ex)
{
    Console.WriteLine($"Error: {ex.Status} - {ex.Message}");
}

SDKs relacionados

SDKPropósitoInstalación
Azure.AI.DocumentIntelligenceAnálisis de documentos (este SDK)dotnet add package Azure.AI.DocumentIntelligence
Azure.AI.FormRecognizerSDK heredado (obsoleto)Usa DocumentIntelligence en su lugar

Enlaces de referencia

RecursoURL
Paquete NuGethttps://www.nuget.org/packages/Azure.AI.DocumentIntelligence
Referencia de APIhttps://learn.microsoft.com/dotnet/api/azure.ai.documentintelligence
Ejemplos en GitHubhttps://github.com/Azure/azure-sdk-for-net/tree/main/sdk/documentintelligence/Azure.AI.DocumentIntelligence/samples
Document Intelligence Studiohttps://documentintelligence.ai.azure.com/
Modelos predefinidoshttps://aka.ms/azsdk/formrecognizer/models

Individual skills in this repo

This repo contains 12 individual skills — each has its own dedicated page.

microsoft/azure-ai-agents-persistent-dotnet

Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: "PersistentAgentsClient", "persistent agents", "agent threads", "agent runs", "streaming agents", "function calling agents .NET".

microsoft/azure-ai-openai-dotnet

Azure OpenAI SDK for .NET. Client library for Azure OpenAI and OpenAI services. Use for chat completions, embeddings, image generation, audio transcription, and assistants. Triggers: "Azure OpenAI", "AzureOpenAIClient", "ChatClient", "chat completions .NET", "GPT-4", "embeddings", "DALL-E", "Whisper", "OpenAI .NET".

microsoft/azure-ai-projects-dotnet

Azure AI Projects SDK for .NET. High-level client for Azure AI Foundry projects including agents, connections, datasets, deployments, evaluations, and indexes. Use for AI Foundry project management, versioned agents, and orchestration. Triggers: "AI Projects", "AIProjectClient", "Foundry project", "versioned agents", "evaluations", "datasets", "connections", "deployments .NET".

microsoft/azure-ai-voicelive-dotnet

Azure AI Voice Live SDK for .NET. Build real-time voice AI applications with bidirectional WebSocket communication. Use for voice assistants, conversational AI, real-time speech-to-speech, and voice-enabled chatbots. Triggers: "voice live", "real-time voice", "VoiceLiveClient", "VoiceLiveSession", "voice assistant .NET", "bidirectional audio", "speech-to-speech".

microsoft/azure-eventgrid-dotnet

Azure Event Grid SDK for .NET. Client library for publishing and consuming events with Azure Event Grid. Use for event-driven architectures, pub/sub messaging, CloudEvents, and EventGridEvents. Triggers: "Event Grid", "EventGridPublisherClient", "CloudEvent", "EventGridEvent", "publish events .NET", "event-driven", "pub/sub".

microsoft/azure-eventhub-dotnet

Azure Event Hubs SDK for .NET. Use for high-throughput event streaming: sending events (EventHubProducerClient, EventHubBufferedProducerClient), receiving events (EventProcessorClient with checkpointing), partition management, and real-time data ingestion. Triggers: "Event Hubs", "event streaming", "EventHubProducerClient", "EventProcessorClient", "send events", "receive events", "checkpointing", "partition".

microsoft/azure-identity-dotnet

Azure Identity library for .NET. Authentication library for Azure SDK clients using Microsoft Entra ID. Use for DefaultAzureCredential, managed identity, service principals, and developer credentials. Triggers: "Azure Identity", "DefaultAzureCredential", "ManagedIdentityCredential", "ClientSecretCredential", "authentication .NET", "Azure auth", "credential chain".

microsoft/azure-kusto-graph

Build and query Kusto graphs from natural language. Covers transient graphs (make-graph), persistent graph models/snapshots, pattern matching (graph-match), shortest paths, connected components, and graph-to-table export. Generates the edges-first thinking: define edges, define node lookups, union, make-graph. WHEN: make-graph, graph-match, graph-shortest-paths, graph-to-table, graph-mark-components, persistent graph, graph model, graph snapshot, build a graph from data, find paths between nodes, pattern matching in graph, connected components, transient graph, Kusto graph, KQL graph.

microsoft/azure-kusto-irql

Compose IRQL (Incident Response Query Language) queries for Kusto cybersecurity investigations. Translates natural language hunting questions into composable IRQL pipelines using Get_*, Extract_*, and Enrich_* functions. WHEN: IRQL query, security hunt, threat hunting KQL, incident response query, compose hunting pipeline, failed logins, phishing investigation, lateral movement, process execution, file creation events.

microsoft/azure-kusto-irql-graph

Apply IRQL graph functions to KQL or IRQL query results for Kusto Explorer visualization. Generates Lift_To_Graph mappings and composes Graph_Render_View, Graph_Fold_By_Property, Extract_Node_*, Enrich_Node_*, and Enrich_Graph_* calls. Accepts a supplied query or limited basic natural-language source request; it is not a general natural-language-to-KQL/IRQL skill. WHEN: Lift_To_Graph, Graph_Render_View, Graph_Fold_By_Property, IRQL graph enrichment, graph mapping for existing query results, icon-decorated graph, fold graph nodes. Use azure-kusto-graph for native make-graph analysis, graph-match, shortest paths, components, or persistent graphs.

microsoft/azure-local

Plan, deploy, operate, and troubleshoot Azure Local (formerly Azure Stack HCI): sizing and prerequisites, Arc registration, lifecycle updates, workloads (Azure Local VMs, AKS on Azure Local, images, disks, logical networks), SDN and network security, and failure triage — starting read-only and confirming before risky changes. WHEN: Azure Local, Azure Stack HCI, Arc resource bridge, custom location, Azure Local VM, Arc VM, AKS on Azure Local, AKS hybrid, SDN, Lifecycle Manager, Azure Local update, disconnected site.

microsoft/azure-local-multi-rack

Plan, deploy, operate, and troubleshoot multi-rack (rack scale) deployments of Azure Local — preintegrated racks scaling to hundreds of machines, built on Network Fabric Controller, Cluster Manager, SAN storage, and managed network fabric. Use for the Microsoft.NetworkCloud and Microsoft.ManagedNetworkFabric control plane. NOT for standard 1-16 node Azure Local, and NOT for rack-aware clusters (two racks as availability zones, up to 8 nodes, synchronous replication) — those are standard scale. WHEN: multi-rack, rack scale Azure Local, aggregation rack, compute rack, Network Fabric Controller, NFC, Cluster Manager, network fabric, isolation domain, az networkcloud, az networkfabric, multi-rack logical network, multi-rack Arc VM.

Skills relacionados