Communitygithub.com

microsoft/azure-ai-document-intelligence-dotnet

Azure AI Document Intelligence SDK für .NET. Extrahieren Sie Text, Tabellen und strukturierte Daten aus Dokumenten mit vorgefertigten und benutzerdefinierten Modellen. Verwenden Sie es für Rechnungsverarbeitung, Belegextraktion, Ausweisdokument-Analyse und benutzerdefinierte Dokumentmodelle. Auslöser: „Document Intelligence

Was ist azure-ai-document-intelligence-dotnet?

Diese Fähigkeit bietet die vollständige Integration des Azure.AI.DocumentIntelligence .NET SDK, mit der Entwickler KI-gestützte Dokumentanalyse-Funktionen direkt in ihre .NET-Anwendungen einbetten können. Sie unterstützt vorgefertigte Modelle zum Extrahieren von Text, Layouts, Rechnungen, Belegen, Ausweisen und anderen Dokumenttypen sowie die Erstellung benutzerdefinierter Modelle und Klassifikatoren. Die Fähigkeit behandelt die gesamte Authentifizierung (Microsoft Entra ID und API-Schlüssel), die Verwaltung von Umgebungsvariablen und Long-Running-Operationen über die Azure SDK-Async-Methoden. Entwickler können damit Rechnungen analysieren, Tabellen extrahieren, Belege erfassen, benutzerdefinierte Modelle trainieren, Dokumentklassifikatoren erstellen und Modelle verwalten – alles mit .NET-Typen wie `DocumentIntelligenceClient`, `AnalyzeResult` und `DocumentField`. Diese Fähigkeit ist ideal für .NET-Projekte, die OCR, strukturierte Datenextraktion oder Dokumenten-Workflows automatisieren möchten.

Funktioniert mit~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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Azure.AI.DocumentIntelligence (.NET)

Extrahieren Sie Text, Tabellen und strukturierte Daten aus Dokumenten mit vorgefertigten und benutzerdefinierten Modellen.

Installation

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

Aktuelle Version: v1.0.0 (GA)

Umgebungsvariablen

DOCUMENT_INTELLIGENCE_ENDPOINT=https://<Ressourcenname>.cognitiveservices.azure.com/  # Erforderlich: Document Intelligence-Endpunkt
DOCUMENT_INTELLIGENCE_API_KEY=<Ihr-API-Schlüssel>  # Nur bei AzureKeyCredential-Authentifizierung erforderlich
BLOB_CONTAINER_SAS_URL=https://<Speicher>.blob.core.windows.net/<Container>?<SAS-Token>  # Optional: Blob-Container-SAS-URL für Trainingsdaten
AZURE_TOKEN_CREDENTIALS=prod  # Nur erforderlich, wenn DefaultAzureCredential in der Produktion verwendet wird

Authentifizierung

Microsoft Entra-Token-Anmeldeinformation

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

string endpoint = Environment.GetEnvironmentVariable("DOCUMENT_INTELLIGENCE_ENDPOINT");
// Lokale Entwicklung: DefaultAzureCredential. Produktion: Setzen Sie AZURE_TOKEN_CREDENTIALS=prod oder AZURE_TOKEN_CREDENTIALS=<spezifische_Anmeldeinformation>
var credential = new DefaultAzureCredential(
    DefaultAzureCredential.DefaultEnvironmentVariableName
);
// Oder verwenden Sie direkt eine bestimmte Anmeldeinformation in der Produktion:
// Siehe 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);

Hinweis: Entra ID erfordert eine benutzerdefinierte Subdomain (z. B. https://<Ressourcenname>.cognitiveservices.azure.com/), keinen regionalen Endpunkt.

API-Schlüssel

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));

Client-Typen

ClientZweck
DocumentIntelligenceClientAnalysieren von Dokumenten, Klassifizieren von Dokumenten
DocumentIntelligenceAdministrationClientErstellen/Verwalten von benutzerdefinierten Modellen und Klassifikatoren

Vorgefertigte Modelle

Modell-IDBeschreibung
prebuilt-readText, Sprachen, Handschrift extrahieren
prebuilt-layoutText, Tabellen, Auswahlmarkierungen, Struktur extrahieren
prebuilt-invoiceRechnungsfelder extrahieren (Lieferant, Artikel, Summen)
prebuilt-receiptBelegfelder extrahieren (Händler, Artikel, Gesamtsumme)
prebuilt-idDocumentAusweisdokumentfelder extrahieren (Name, Geburtsdatum, Adresse)
prebuilt-businessCardVisitenkartenfelder extrahieren
prebuilt-tax.us.w2W-2-Steuerformularfelder extrahieren
prebuilt-healthInsuranceCard.usKrankenversicherungskartenfelder extrahieren

Kern-Workflows

1. Rechnung analysieren

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($"Lieferantenname: '{vendorName}', Konfidenz: {vendorNameField.Confidence}");
    }

    if (document.Fields.TryGetValue("InvoiceTotal", out DocumentField invoiceTotalField)
        && invoiceTotalField.FieldType == DocumentFieldType.Currency)
    {
        CurrencyValue invoiceTotal = invoiceTotalField.ValueCurrency;
        Console.WriteLine($"Rechnungssumme: '{invoiceTotal.CurrencySymbol}{invoiceTotal.Amount}'");
    }
    
    // Positionen extrahieren
    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($"  Artikel: {descField.ValueString}");
        }
    }
}

2. Layout extrahieren (Text, Tabellen, Struktur)

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

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

AnalyzeResult result = operation.Value;

// Text nach Seite extrahieren
foreach (DocumentPage page in result.Pages)
{
    Console.WriteLine($"Seite {page.PageNumber}: {page.Lines.Count} Zeilen, {page.Words.Count} Wörter");
    
    foreach (DocumentLine line in page.Lines)
    {
        Console.WriteLine($"  Zeile: '{line.Content}'");
    }
}

// Tabellen extrahieren
foreach (DocumentTable table in result.Tables)
{
    Console.WriteLine($"Tabelle: {table.RowCount} Zeilen x {table.ColumnCount} Spalten");
    foreach (DocumentTableCell cell in table.Cells)
    {
        Console.WriteLine($"  Zelle ({cell.RowIndex}, {cell.ColumnIndex}): {cell.Content}");
    }
}

3. Beleg analysieren

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($"Händler: {merchantField.ValueString}");
        
    if (document.Fields.TryGetValue("Total", out DocumentField totalField))
        Console.WriteLine($"Gesamtsumme: {totalField.ValueCurrency.Amount}");
        
    if (document.Fields.TryGetValue("TransactionDate", out DocumentField dateField))
        Console.WriteLine($"Datum: {dateField.ValueDate}");
}

4. Benutzerdefiniertes Modell erstellen

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($"Modell-ID: {model.ModelId}");
Console.WriteLine($"Erstellt: {model.CreatedOn}");

foreach (var docType in model.DocumentTypes)
{
    Console.WriteLine($"Dokumenttyp: {docType.Key}");
    foreach (var field in docType.Value.FieldSchema)
    {
        Console.WriteLine($"  Feld: {field.Key}, Konfidenz: {docType.Value.FieldConfidence[field.Key]}");
    }
}

5. Dokumentklassifikator erstellen

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($"Klassifikator-ID: {classifier.ClassifierId}");

6. Dokument klassifizieren

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($"Dokumenttyp: {document.DocumentType}, Konfidenz: {document.Confidence}");
}

7. Modelle verwalten

// Ressourcendetails abrufen
DocumentIntelligenceResourceDetails resourceDetails = await adminClient.GetResourceDetailsAsync();
Console.WriteLine($"Benutzerdefinierte Modelle: {resourceDetails.CustomDocumentModels.Count}/{resourceDetails.CustomDocumentModels.Limit}");

// Bestimmtes Modell abrufen
DocumentModelDetails model = await adminClient.GetModelAsync("my-model-id");
Console.WriteLine($"Modell: {model.ModelId}, Erstellt: {model.CreatedOn}");

// Modelle auflisten
await foreach (DocumentModelDetails modelItem in adminClient.GetModelsAsync())
{
    Console.WriteLine($"Modell: {modelItem.ModelId}");
}

// Modell löschen
await adminClient.DeleteModelAsync("my-model-id");

Referenz zu Schlüsseltypen

TypBeschreibung
DocumentIntelligenceClientHauptclient für Analysen
DocumentIntelligenceAdministrationClientModellverwaltung
AnalyzeResultErgebnis der Dokumentenanalyse
AnalyzedDocumentEinzelnes Dokument innerhalb des Ergebnisses
DocumentFieldExtrahiertes Feld mit Wert und Konfidenz
DocumentFieldTypeString, Datum, Zahl, Währung usw.
DocumentPageSeiteninfo (Zeilen, Wörter, Auswahlmarkierungen)
DocumentTableExtrahierten Tabelle mit Zellen
DocumentModelDetailsMetadaten des benutzerdefinierten Modells
BlobContentSourceDatenquelle für Training

Erstellungsmodi

ModusAnwendungsfall
DocumentBuildMode.TemplateDokumente mit festem Layout (Formulare)
DocumentBuildMode.NeuralDokumente mit variablem Layout

Bewährte Methoden

  1. Verwenden Sie DefaultAzureCredential für die Produktion
  2. Wiederverwenden von Client-Instanzen – Clients sind threadsicher
  3. Behandlung von lang andauernden Vorgängen – Verwenden Sie WaitUntil.Completed für Einfachheit
  4. Überprüfen der Feldkonfidenz – Überprüfen Sie immer die Confidence-Eigenschaft
  5. Verwenden des geeigneten Modells – Vorgefertigt für häufige Dokumente, benutzerdefiniert für spezialisierte
  6. Verwenden Sie eine benutzerdefinierte Subdomain – Erforderlich für Entra-ID-Authentifizierung

Fehlerbehandlung

using Azure;

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

Verwandte SDKs

SDKZweckInstallation
Azure.AI.DocumentIntelligenceDokumentenanalyse (dieses SDK)dotnet add package Azure.AI.DocumentIntelligence
Azure.AI.FormRecognizerLegacy-SDK (veraltet)Verwenden Sie stattdessen DocumentIntelligence

Referenzlinks

RessourceURL
NuGet-Pakethttps://www.nuget.org/packages/Azure.AI.DocumentIntelligence
API-Referenzhttps://learn.microsoft.com/dotnet/api/azure.ai.documentintelligence
GitHub-Beispielehttps://github.com/Azure/azure-sdk-for-net/tree/main/sdk/documentintelligence/Azure.AI.DocumentIntelligence/samples
Document Intelligence Studiohttps://documentintelligence.ai.azure.com/
Vorgefertigte Modellehttps://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.

Verwandte Skills