azure-ai-document-intelligence-dotnet – skill Tài liệu & Office cho agent AI
SDK Azure AI Document Intelligence cho .NET. Trích xuất văn bản, bảng và dữ liệu có cấu trúc từ tài liệu bằng mô hình dựng sẵn và mô hình tùy chỉnh.
Cài skill azure-ai-document-intelligence-dotnet bằng một lệnh
Chọn công cụ bạn đang dùng, copy lệnh và dán vào terminal. Skill sẽ nằm trong thư mục skills của công cụ đó và sẵn sàng dùng ở phiên làm việc tiếp theo.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/azure-ai-document-intelligence-dotnet-6d5ca.tgz | tar xz -C ~/.claude/skills
Gọi trong Claude Code: /azure-ai-document-intelligence-dotnet – rồi mô tả công việc bạn muốn làm.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/azure-ai-document-intelligence-dotnet-6d5ca.tgz | tar xz -C ~/.codex/skills
Gọi trong Codex: $azure-ai-document-intelligence-dotnet – rồi mô tả công việc bạn muốn làm.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/azure-ai-document-intelligence-dotnet-6d5ca.tgz | tar xz -C ~/.hermes/skills
Gọi trong Hermes Agent: /azure-ai-document-intelligence-dotnet – rồi mô tả công việc bạn muốn làm.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/azure-ai-document-intelligence-dotnet-6d5ca.tgz | tar xz -C ~/.deepcode/skills
Gọi trong DeepSeek: /azure-ai-document-intelligence-dotnet – rồi mô tả công việc bạn muốn làm.
Nội dung SKILL.md
Nội dung SKILL.md gốc bằng tiếng Anh.
Azure.AI.DocumentIntelligence (.NET)
Extract text, tables, and structured data from documents using prebuilt and custom models.
Installation
dotnet add package Azure.AI.DocumentIntelligence
dotnet add package Azure.IdentityCurrent Version: v1.0.0 (GA)
Environment Variables
DOCUMENT_INTELLIGENCE_ENDPOINT=https://<resource-name>.cognitiveservices.azure.com/
DOCUMENT_INTELLIGENCE_API_KEY=<your-api-key>
BLOB_CONTAINER_SAS_URL=https://<storage>.blob.core.windows.net/<container>?<sas-token>Authentication
Microsoft Entra ID (Recommended)
using Azure.Identity;
using Azure.AI.DocumentIntelligence;
string endpoint = Environment.GetEnvironmentVariable("DOCUMENT_INTELLIGENCE_ENDPOINT");
var credential = new DefaultAzureCredential();
var client = new DocumentIntelligenceClient(new Uri(endpoint), credential);> Note: Entra ID requires a custom subdomain (e.g., https://<resource-name>.cognitiveservices.azure.com/), not a regional endpoint.
API Key
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 Types
| Client | Purpose |
|--------|---------|
| DocumentIntelligenceClient | Analyze documents, classify documents |
| DocumentIntelligenceAdministrationClient | Build/manage custom models and classifiers |
Prebuilt Models
| Model ID | Description |
|----------|-------------|
| prebuilt-read | Extract text, languages, handwriting |
| prebuilt-layout | Extract text, tables, selection marks, structure |
| prebuilt-invoice | Extract invoice fields (vendor, items, totals) |
| prebuilt-receipt | Extract receipt fields (merchant, items, total) |
| prebuilt-idDocument | Extract ID document fields (name, DOB, address) |
| prebuilt-businessCard | Extract business card fields |
| prebuilt-tax.us.w2 | Extract W-2 tax form fields |
| prebuilt-healthInsuranceCard.us | Extract health insurance card fields |
Core Workflows
Confirm the resource region/tenant and permission to send document contents to Azure before analysis or training. IDs, invoices and health documents may be highly sensitive: use approved sample data, do not log extracted personal fields or SAS URLs, and scope short-lived storage access to the required container. Pin the SDK/API version and verify supported models/field types and overloads in matching official samples; fragments are not a compiled application. A confidence score is not verified accuracy: reconcile fields with source pages and business rules before decisions. Training/analysis can incur cost; deletion must target only explicitly authorized models.
1. Analyze Invoice
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($"Vendor Name: '{vendorName}', confidence: {vendorNameField.Confidence}");
}
if (document.Fields.TryGetValue("InvoiceTotal", out DocumentField invoiceTotalField)
&& invoiceTotalField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue invoiceTotal = invoiceTotalField.ValueCurrency;
Console.WriteLine($"Invoice Total: '{invoiceTotal.CurrencySymbol}{invoiceTotal.Amount}'");
}
// Extract line items
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($" Item: {descField.ValueString}");
}
}
}2. Extract Layout (Text, Tables, Structure)
Uri fileUri = new Uri("https://example.com/document.pdf");
Operation<AnalyzeResult> operation = await client.AnalyzeDocumentAsync(
WaitUntil.Completed,
"prebuilt-layout",
fileUri);
AnalyzeResult result = operation.Value;
// Extract text by page
foreach (DocumentPage page in result.Pages)
{
Console.WriteLine($"Page {page.PageNumber}: {page.Lines.Count} lines, {page.Words.Count} words");
foreach (DocumentLine line in page.Lines)
{
Console.WriteLine($" Line: '{line.Content}'");
}
}
// Extract tables
foreach (DocumentTable table in result.Tables)
{
Console.WriteLine($"Table: {table.RowCount} rows x {table.ColumnCount} columns");
foreach (DocumentTableCell cell in table.Cells)
{
Console.WriteLine($" Cell ({cell.RowIndex}, {cell.ColumnIndex}): {cell.Content}");
}
}3. Analyze Receipt
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($"Merchant: {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($"Date: {dateField.ValueDate}");
}4. Build Custom Model
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($"Model ID: {model.ModelId}");
Console.WriteLine($"Created: {model.CreatedOn}");
foreach (var docType in model.DocumentTypes)
{
Console.WriteLine($"Document type: {docType.Key}");
foreach (var field in docType.Value.FieldSchema)
{
Console.WriteLine($" Field: {field.Key}, Confidence: {docType.Value.FieldConfidence[field.Key]}");
}
}5. Build Document Classifier
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($"Classifier ID: {classifier.ClassifierId}");6. Classify Document
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($"Document type: {document.DocumentType}, confidence: {document.Confidence}");
}7. Manage Models
// Get resource details
DocumentIntelligenceResourceDetails resourceDetails = await adminClient.GetResourceDetailsAsync();
Console.WriteLine($"Custom models: {resourceDetails.CustomDocumentModels.Count}/{resourceDetails.CustomDocumentModels.Limit}");
// Get specific model
DocumentModelDetails model = await adminClient.GetModelAsync("my-model-id");
Console.WriteLine($"Model: {model.ModelId}, Created: {model.CreatedOn}");
// List models
await foreach (DocumentModelDetails modelItem in adminClient.GetModelsAsync())
{
Console.WriteLine($"Model: {modelItem.ModelId}");
}
// Delete model
await adminClient.DeleteModelA… (nội dung đầy đủ có trong gói tải về)
Skill liên quan
- azure-ai-document-intelligence-ts – Trích xuất văn bản, bảng và dữ liệu có cấu trúc từ tài liệu bằng mô hình dựng sẵn và mô…
- azure-ai-translation-document-py – SDK Azure AI Document Translation để dịch hàng loạt tài liệu và giữ nguyên định dạng…
- markdown-mermaid-writing – Viết tài liệu Markdown khoa học và sơ đồ Mermaid cho quy trình, mối quan hệ, dòng thời…
- markitdown – Chuyển đổi nhiều loại tài liệu và một số URI sang Markdown bằng Microsoft MarkItDown để…
- referrals – Khi người dùng muốn tạo, tối ưu hoặc phân tích chương trình giới thiệu (referral)…
- open-notebook – Tổ chức nghiên cứu với Open Notebook tự lưu trữ, giải pháp thay thế NotebookLM. Hỗ trợ…
- deepread – Dùng khi người dùng yêu cầu đọc sâu một cuốn sách, bài báo, PDF hoặc bộ tài liệu; trích…
- demo-video – Dùng khi người dùng yêu cầu tạo video demo, video hướng dẫn sản phẩm, showcase tính…