Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penganalisis Pemahaman Konten menentukan cara memproses dan mengekstrak wawasan dari konten Anda. Mereka memastikan pemrosesan seragam dan struktur output di semua konten Anda, sehingga Anda mendapatkan hasil yang andal dan dapat diprediksi. Untuk kasus penggunaan umum, Anda dapat menggunakan penganalisis bawaan. Panduan ini menunjukkan bagaimana Anda dapat menyesuaikan penganalisis ini agar lebih sesuai dengan kebutuhan Anda.
Panduan ini menunjukkan kepada Anda cara menggunakan REST API Pemahaman Konten untuk membuat penganalisis kustom yang mengekstrak data terstruktur dari konten Anda.
Prasyarat
- Langganan Azure aktif. Jika Anda tidak memiliki akun Azure, buat secara gratis.
- Sumber daya Microsoft Foundry dibuat di wilayah yang didukung.
- Portal mencantumkan sumber daya ini di bawah Foundry>Foundry.
- Siapkan penyebaran model default untuk sumber daya Pemahaman Konten Anda. Dengan mengatur default, Anda membuat koneksi ke model Microsoft Foundry yang Anda gunakan untuk permintaan Content Understanding. Pilih salah satu metode berikut:
Pilih tombol + Tambahkan sumber daya di kiri atas.
Pilih sumber daya Foundry yang ingin Anda gunakan dan pilihSimpan>.
Pastikan bahwa kotak centang Aktifkan penyebaran otomatis untuk model yang diperlukan jika tidak ada default yang tersedia yang dipilih. Pilihan ini memastikan sumber daya Anda sepenuhnya disiapkan dengan model
GPT-4.1,GPT-4.1-mini, dantext-embedding-3-largeyang diperlukan. Penganalisis bawaan yang berbeda memerlukan model yang berbeda.
- cURL diinstal untuk lingkungan dev Anda.
Menentukan skema penganalisis
Untuk membuat penganalisis kustom, tentukan skema bidang yang menjelaskan data terstruktur yang ingin Anda ekstrak. Dalam contoh berikut, Anda membuat penganalisis berdasarkan penganalisis dokumen bawaan untuk memproses tanda terima.
Buat file JSON bernama receipt.json dengan konten berikut:
{
"description": "Sample receipt analyzer",
"baseAnalyzerId": "prebuilt-document",
"models": {
"completion": "gpt-4.1",
"embedding": "text-embedding-3-large"
},
"config": {
"returnDetails": true,
"enableFormula": false,
"estimateFieldSourceAndConfidence": true,
"tableFormat": "html"
},
"fieldSchema": {
"fields": {
"VendorName": {
"type": "string",
"method": "extract",
"description": "Vendor issuing the receipt"
},
"Items": {
"type": "array",
"method": "extract",
"items": {
"type": "object",
"properties": {
"Description": {
"type": "string",
"method": "extract",
"description": "Description of the item"
},
"Amount": {
"type": "number",
"method": "extract",
"description": "Amount of the item"
}
}
}
}
}
}
}
Jika Anda memiliki berbagai jenis dokumen yang perlu Diproses, tetapi Anda ingin mengategorikan dan menganalisis tanda terima saja, buat penganalisis yang mengategorikan dokumen terlebih dahulu. Kemudian, rutekan ke penganalisis yang Anda buat sebelumnya dengan skema berikut.
Buat file JSON bernama categorize.json dengan konten berikut:
{
"baseAnalyzerId": "prebuilt-document",
// Use the base analyzer to invoke the document specific capabilities.
//Specify the model the analyzer should use. This is one of the supported completion models and one of the supported embeddings model. The specific deployment used during analyze is set on the resource or provided in the analyze request.
"models": {
"completion": "gpt-4.1"
},
"config": {
// Enable splitting of the input into segments. Set this property to false if you only expect a single document within the input file. When specified and enableSegment=false, the whole content will be classified into one of the categories.
"enableSegment": false,
"contentCategories": {
// Category name.
"receipt": {
// Description to help with classification and splitting.
"description": "Any images or documents of receipts",
// Define the analyzer that any content classified as a receipt should be routed to
"analyzerId": "receipt"
},
"invoice": {
"description": "Any images or documents of invoice",
"analyzerId": "prebuilt-invoice"
},
"policeReport": {
"description": "A police or law enforcement report detailing the events that lead to the loss."
// Don't perform analysis for this category.
}
},
// Omit original content object and only return content objects from additional analysis.
"omitContent": true
}
//You can use fieldSchema here to define fields that are needed from the entire input content.
}
Membuat penganalisis
Permintaan PUT
Buat penganalisis tanda terima terlebih dahulu, lalu buat penganalisis kategoris.
curl -i -X PUT "{endpoint}/contentunderstanding/analyzers/{analyzerId}?api-version=2025-11-01" \
-H "Ocp-Apim-Subscription-Key: {key}" \
-H "Content-Type: application/json" \
-d @receipt.json
Respons PUT
Respon tersebut menyertakan header 201 Created dengan URL yang dapat Anda gunakan untuk melacak status operasi pembuatan penganalisis asinkron ini.
201 Created
Operation-Location: {endpoint}/contentunderstanding/analyzers/{analyzerId}/operations/{operationId}?api-version=2025-05-01-preview
Setelah operasi selesai, HTTP GET pada URL lokasi operasi mengembalikan "status": "succeeded".
curl -i -X GET "{endpoint}/contentunderstanding/analyzers/{analyzerId}/operations/{operationId}?api-version=2025-11-01" \
-H "Ocp-Apim-Subscription-Key: {key}"
Menganalisis berkas tersebut
Unggah berkas
Anda sekarang dapat menggunakan penganalisis kustom yang Anda buat untuk memproses file dan mengekstrak bidang yang Anda tentukan dalam skema.
Sebelum menjalankan perintah cURL, buat perubahan berikut pada permintaan HTTP:
- Ganti
{endpoint}dan{key}dengan titik akhir dan nilai kunci dari instans Foundry portal Microsoft Azure Anda. - Ganti
{analyzerId}dengan nama penganalisis kustom yang Anda buat dengancategorize.jsonfile . - Ganti
{fileUrl}dengan URL file yang dapat diakses publik untuk dianalisis, seperti jalur ke Azure Storage Blob dengan tanda tangan akses bersama (SAS) atau URLhttps://github.com/Azure-Samples/azure-ai-content-understanding-python/raw/refs/heads/main/data/receipt.pngsampel .
Permintaan POST
Contoh ini menggunakan penganalisis kustom yang Anda buat dengan categorize.json file untuk menganalisis tanda terima.
curl -i -X POST "{endpoint}/contentunderstanding/analyzers/{analyzerId}:analyze?api-version=2025-11-01" \
-H "Ocp-Apim-Subscription-Key: {key}" \
-H "Content-Type: application/json" \
-d '{
"inputs":[
{
"url": "https://github.com/Azure-Samples/azure-ai-content-understanding-python/raw/refs/heads/main/data/receipt.png"
}
]
}'
Respons POST
Respons 202 Accepted mencakup {resultId} yang dapat Anda gunakan untuk melacak status operasi asinkron ini.
{
"id": {resultId},
"status": "Running",
"result": {
"analyzerId": {analyzerId},
"apiVersion": "2025-11-01",
"createdAt": "YYYY-MM-DDTHH:MM:SSZ",
"warnings": [],
"contents": []
}
}
Dapatkan hasil analisis
Gunakan Operation-Location dari tanggapan POST untuk mendapatkan hasil analisis.
Permintaan GET
curl -i -X GET "{endpoint}/contentunderstanding/analyzerResults/{resultId}?api-version=2025-11-01" \
-H "Ocp-Apim-Subscription-Key: {key}"
Respons GET
Respon 200 OK berisi bidang status yang menunjukkan kemajuan operasi.
-
statusadalahSucceededjika operasi berhasil diselesaikan. - Jika statusnya adalah
runningataunotStarted, panggil API lagi secara manual atau gunakan skrip. Tunggu setidaknya satu detik di antara permintaan.
Contoh tanggapan
{
"id": {resultId},
"status": "Succeeded",
"result": {
"analyzerId": {analyzerId},
"apiVersion": "2025-11-01",
"createdAt": "YYYY-MM-DDTHH:MM:SSZ",
"warnings": [],
"contents": [
{
"path": "input1/segment1",
"category": "receipt",
"markdown": "Contoso\n\n123 Main Street\nRedmond, WA 98052\n\n987-654-3210\n\n6/10/2019 13:59\nSales Associate: Paul\n\n\n<table>\n<tr>\n<td>2 Surface Pro 6</td>\n<td>$1,998.00</td>\n</tr>\n<tr>\n<td>3 Surface Pen</td>\n<td>$299.97</td>\n</tr>\n</table> ...",
"fields": {
"VendorName": {
"type": "string",
"valueString": "Contoso",
"spans": [{"offset": 0,"length": 7}],
"confidence": 0.996,
"source": "D(1,774.0000,72.0000,974.0000,70.0000,974.0000,111.0000,774.0000,113.0000)"
},
"Items": {
"type": "array",
"valueArray": [
{
"type": "object",
"valueObject": {
"Description": {
"type": "string",
"valueString": "2 Surface Pro 6",
"spans": [ { "offset": 115, "length": 15}],
"confidence": 0.423,
"source": "D(1,704.0000,482.0000,875.0000,482.0000,875.0000,508.0000,704.0000,508.0000)"
},
"Amount": {
"type": "number",
"valueNumber": 1998,
"spans": [{ "offset": 140,"length": 9}
],
"confidence": 0.957,
"source": "D(1,952.0000,482.0000,1048.0000,482.0000,1048.0000,508.0000,952.0000,509.0000)"
}
}
}, ...
]
}
},
"kind": "document",
"startPageNumber": 1,
"endPageNumber": 1,
"unit": "pixel",
"pages": [
{
"pageNumber": 1,
"angle": -0.0944,
"width": 1743,
"height": 878
}
],
"analyzerId": "{analyzerId}",
"mimeType": "image/png"
}
]
},
"usage": {
"documentPages": 1,
"tokens": {
"contextualization": 1000
}
}
}
Pustaka klien | Sampel | Sumber SDK
Panduan ini menunjukkan kepada Anda cara menggunakan Content Understanding Python SDK untuk membuat penganalisis kustom yang mengekstrak data terstruktur dari konten Anda. Penganalisis kustom mendukung jenis konten dokumen, gambar, audio, dan video.
Prasyarat
- Langganan Azure aktif. Jika Anda tidak memiliki akun Azure, buat secara gratis.
- Sumber daya Microsoft Foundry dibuat di wilayah yang didukung.
- Titik akhir sumber daya dan kunci API Anda (ditemukan di bawah Kunci dan Titik Akhir di portal Microsoft Azure).
- Pengaturan default penyebaran model telah dikonfigurasi untuk sumber daya Anda. Lihat Model dan penerapan atau skrip satu kali ini untuk konfigurasi untuk petunjuk penyiapan.
- Python 3.9 atau yang lebih baru.
Pengaturan
Instal pustaka klien Content Understanding untuk Python dengan pip:
pip install azure-ai-contentunderstandingSecara opsional, instal pustaka Azure Identity untuk autentikasi Microsoft Entra:
pip install azure-identity
Menyiapkan variabel lingkungan
Untuk mengautentikasi dengan layanan Content Understanding, atur variabel lingkungan dengan nilai Anda sendiri sebelum menjalankan sampel:
-
CONTENTUNDERSTANDING_ENDPOINT- titik akhir ke sumber daya Pemahaman Konten Anda. -
CONTENTUNDERSTANDING_KEY- kunci CONTENT Understanding API Anda (opsional jika menggunakan Microsoft Entra ID DefaultAzureCredential).
Windows
setx CONTENTUNDERSTANDING_ENDPOINT "your-endpoint"
setx CONTENTUNDERSTANDING_KEY "your-key"
Linux / macOS
export CONTENTUNDERSTANDING_ENDPOINT="your-endpoint"
export CONTENTUNDERSTANDING_KEY="your-key"
Membuat klien
Impor pustaka dan model yang diperlukan, lalu buat klien dengan titik akhir dan kredensial sumber daya Anda.
import os
import time
from azure.ai.contentunderstanding import ContentUnderstandingClient
from azure.core.credentials import AzureKeyCredential
endpoint = os.environ["CONTENTUNDERSTANDING_ENDPOINT"]
key = os.environ["CONTENTUNDERSTANDING_KEY"]
client = ContentUnderstandingClient(
endpoint=endpoint,
credential=AzureKeyCredential(key),
)
Membuat penganalisis kustom
Contoh berikut membuat penganalisis dokumen kustom berdasarkan penganalisis dasar dokumen bawaan. Ini mendefinisikan bidang menggunakan tiga metode ekstraksi: extract untuk teks harfiah, generate untuk bidang atau interpretasi yang dihasilkan AI, dan classify untuk kategorisasi.
from azure.ai.contentunderstanding.models import (
ContentAnalyzer,
ContentAnalyzerConfig,
ContentFieldSchema,
ContentFieldDefinition,
ContentFieldType,
GenerationMethod,
)
# Generate a unique analyzer ID
analyzer_id = f"my_document_analyzer_{int(time.time())}"
# Define field schema with custom fields
field_schema = ContentFieldSchema(
name="company_schema",
description="Schema for extracting company information",
fields={
"company_name": ContentFieldDefinition(
type=ContentFieldType.STRING,
method=GenerationMethod.EXTRACT,
description="Name of the company",
estimate_source_and_confidence=True,
),
"total_amount": ContentFieldDefinition(
type=ContentFieldType.NUMBER,
method=GenerationMethod.EXTRACT,
description="Total amount on the document",
estimate_source_and_confidence=True,
),
"document_summary": ContentFieldDefinition(
type=ContentFieldType.STRING,
method=GenerationMethod.GENERATE,
description=(
"A brief summary of the document content"
),
),
"document_type": ContentFieldDefinition(
type=ContentFieldType.STRING,
method=GenerationMethod.CLASSIFY,
description="Type of document",
enum=[
"invoice", "receipt", "contract",
"report", "other",
],
),
},
)
# Create analyzer configuration
config = ContentAnalyzerConfig(
enable_formula=True,
enable_layout=True,
enable_ocr=True,
estimate_field_source_and_confidence=True,
return_details=True,
)
# Create the analyzer with field schema
analyzer = ContentAnalyzer(
base_analyzer_id="prebuilt-document",
description=(
"Custom analyzer for extracting company information"
),
config=config,
field_schema=field_schema,
models={
"completion": "gpt-4.1",
"embedding": "text-embedding-3-large",
}, # Required when using field_schema and prebuilt-document base analyzer
)
# Create the analyzer
poller = client.begin_create_analyzer(
analyzer_id=analyzer_id,
resource=analyzer,
)
result = poller.result() # Wait for creation to complete
# Get the full analyzer details after creation
result = client.get_analyzer(analyzer_id=analyzer_id)
print(f"Analyzer '{analyzer_id}' created successfully!")
if result.description:
print(f" Description: {result.description}")
if result.field_schema and result.field_schema.fields:
print(f" Fields ({len(result.field_schema.fields)}):")
for field_name, field_def in result.field_schema.fields.items():
method = field_def.method if field_def.method else "auto"
field_type = field_def.type if field_def.type else "unknown"
print(f" - {field_name}: {field_type} ({method})")
Contoh output terlihat seperti:
Analyzer 'my_document_analyzer_ID' created successfully!
Description: Custom analyzer for extracting company information
Fields (4):
- company_name: ContentFieldType.STRING (GenerationMethod.EXTRACT)
- total_amount: ContentFieldType.NUMBER (GenerationMethod.EXTRACT)
- document_summary: ContentFieldType.STRING (GenerationMethod.GENERATE)
- document_type: ContentFieldType.STRING (GenerationMethod.CLASSIFY)
Petunjuk / Saran
Kode ini didasarkan pada sampel create analyzer di repositori SDK.
Secara opsional, Anda dapat membuat penganalisis pengklasifikasi untuk mengategorikan dokumen dan menggunakan hasilnya untuk merutekan dokumen ke penganalisis bawaan atau kustom yang Anda buat. Berikut adalah contoh pembuatan penganalisis kustom untuk alur kerja klasifikasi.
import time
from azure.ai.contentunderstanding.models import (
ContentAnalyzer,
ContentAnalyzerConfig,
ContentCategoryDefinition,
)
# Generate a unique analyzer ID
analyzer_id = f"my_classifier_{int(time.time())}"
print(f"Creating classifier '{analyzer_id}'...")
# Define content categories for classification
categories = {
"Loan_Application": ContentCategoryDefinition(
description="Documents submitted by individuals or businesses to request funding, "
"typically including personal or business details, financial history, "
"loan amount, purpose, and supporting documentation."
),
"Invoice": ContentCategoryDefinition(
description="Billing documents issued by sellers or service providers to request "
"payment for goods or services, detailing items, prices, taxes, totals, "
"and payment terms."
),
"Bank_Statement": ContentCategoryDefinition(
description="Official statements issued by banks that summarize account activity "
"over a period, including deposits, withdrawals, fees, and balances."
),
}
# Create analyzer configuration
config = ContentAnalyzerConfig(
return_details=True,
enable_segment=True, # Enable automatic segmentation by category
content_categories=categories,
)
# Create the classifier analyzer
classifier = ContentAnalyzer(
base_analyzer_id="prebuilt-document",
description="Custom classifier for financial document categorization",
config=config,
models={"completion": "gpt-4.1"},
)
# Create the classifier
poller = client.begin_create_analyzer(
analyzer_id=analyzer_id,
resource=classifier,
)
result = poller.result() # Wait for creation to complete
# Get the full analyzer details after creation
result = client.get_analyzer(analyzer_id=analyzer_id)
print(f"Classifier '{analyzer_id}' created successfully!")
if result.description:
print(f" Description: {result.description}")
Petunjuk / Saran
Kode ini didasarkan pada sampel buat pengklasifikasi di repositori SDK.
Menggunakan penganalisis kustom
Setelah membuat penganalisis, gunakan untuk menganalisis dokumen dan mengekstrak bidang kustom. Hapus penganalisis saat Anda tidak lagi membutuhkannya.
# --- Use the custom document analyzer ---
from azure.ai.contentunderstanding.models import AnalysisInput
print("\nAnalyzing document...")
document_url = (
"https://raw.githubusercontent.com/"
"Azure-Samples/"
"azure-ai-content-understanding-assets/"
"main/document/invoice.pdf"
)
poller = client.begin_analyze(
analyzer_id=analyzer_id,
inputs=[AnalysisInput(url=document_url)],
)
result = poller.result()
if result.contents and len(result.contents) > 0:
content = result.contents[0]
if content.fields:
company = content.fields.get("company_name")
if company:
print(f"Company Name: {company.value}")
if company.confidence:
print(
f" Confidence:"
f" {company.confidence:.2f}"
)
total = content.fields.get("total_amount")
if total:
print(f"Total Amount: {total.value}")
summary = content.fields.get(
"document_summary"
)
if summary:
print(f"Summary: {summary.value}")
doc_type = content.fields.get("document_type")
if doc_type:
print(f"Document Type: {doc_type.value}")
else:
print("No content returned from analysis.")
# --- Clean up ---
print(f"\nCleaning up: deleting analyzer '{analyzer_id}'...")
client.delete_analyzer(analyzer_id=analyzer_id)
print(f"Analyzer '{analyzer_id}' deleted successfully.")
Contoh output terlihat seperti:
Analyzing document...
Company Name: CONTOSO LTD.
Confidence: 0.81
Total Amount: 610.0
Summary: This document is an invoice from CONTOSO LTD. to Microsoft Corporation for consulting, document, and printing services provided during the service period. It details line items, subtotal, sales tax, total, previous unpaid balance, and the final amount due.
Document Type: invoice
Cleaning up: deleting analyzer 'my_document_analyzer_ID'...
Analyzer 'my_document_analyzer_ID' deleted successfully.
Petunjuk / Saran
Lihat contoh lain dari menjalankan penganalisis di sampel SDK.
Pustaka klien | Sampel | Sumber SDK
Panduan ini menunjukkan kepada Anda cara menggunakan Content Understanding .NET SDK untuk membuat penganalisis kustom yang mengekstrak data terstruktur dari konten Anda. Penganalisis kustom mendukung jenis konten dokumen, gambar, audio, dan video.
Prasyarat
- Langganan Azure aktif. Jika Anda tidak memiliki akun Azure, buat secara gratis.
- Sumber daya Microsoft Foundry dibuat di wilayah yang didukung.
- Titik akhir sumber daya dan kunci API Anda (ditemukan di bawah Kunci dan Titik Akhir di portal Microsoft Azure).
- Pengaturan default penyebaran model telah dikonfigurasi untuk sumber daya Anda. Lihat Model dan penerapan atau skrip satu kali ini untuk konfigurasi untuk petunjuk penyiapan.
- Versi .NET saat ini.
Pengaturan
Buat aplikasi konsol .NET baru:
dotnet new console -n CustomAnalyzerTutorial cd CustomAnalyzerTutorialInstal pustaka klien Content Understanding untuk .NET:
dotnet add package Azure.AI.ContentUnderstandingSecara opsional, instal pustaka Azure Identity untuk autentikasi Microsoft Entra:
dotnet add package Azure.Identity
Menyiapkan variabel lingkungan
Untuk mengautentikasi dengan layanan Content Understanding, atur variabel lingkungan dengan nilai Anda sendiri sebelum menjalankan sampel:
-
CONTENTUNDERSTANDING_ENDPOINT- titik akhir ke sumber daya Pemahaman Konten Anda. -
CONTENTUNDERSTANDING_KEY- kunci CONTENT Understanding API Anda (opsional jika menggunakan Microsoft Entra ID DefaultAzureCredential).
Windows
setx CONTENTUNDERSTANDING_ENDPOINT "your-endpoint"
setx CONTENTUNDERSTANDING_KEY "your-key"
Linux / macOS
export CONTENTUNDERSTANDING_ENDPOINT="your-endpoint"
export CONTENTUNDERSTANDING_KEY="your-key"
Membuat klien
using Azure;
using Azure.AI.ContentUnderstanding;
string endpoint = Environment.GetEnvironmentVariable(
"CONTENTUNDERSTANDING_ENDPOINT");
string key = Environment.GetEnvironmentVariable(
"CONTENTUNDERSTANDING_KEY");
var client = new ContentUnderstandingClient(
new Uri(endpoint),
new AzureKeyCredential(key)
);
Membuat penganalisis kustom
Contoh berikut membuat penganalisis dokumen kustom berdasarkan penganalisis dokumen bawaan. Ini mendefinisikan bidang menggunakan tiga metode ekstraksi: extract untuk teks harfiah, generate untuk ringkasan yang dihasilkan AI, dan classify untuk kategorisasi.
string analyzerId =
$"my_document_analyzer_{DateTimeOffset.UtcNow.ToUnixTimeSeconds()}";
var fieldSchema = new ContentFieldSchema(
new Dictionary<string, ContentFieldDefinition>
{
["company_name"] = new ContentFieldDefinition
{
Type = ContentFieldType.String,
Method = GenerationMethod.Extract,
Description = "Name of the company"
},
["total_amount"] = new ContentFieldDefinition
{
Type = ContentFieldType.Number,
Method = GenerationMethod.Extract,
Description =
"Total amount on the document"
},
["document_summary"] = new ContentFieldDefinition
{
Type = ContentFieldType.String,
Method = GenerationMethod.Generate,
Description =
"A brief summary of the document content"
},
["document_type"] = new ContentFieldDefinition
{
Type = ContentFieldType.String,
Method = GenerationMethod.Classify,
Description = "Type of document"
}
})
{
Name = "company_schema",
Description =
"Schema for extracting company information"
};
fieldSchema.Fields["document_type"].Enum.Add("invoice");
fieldSchema.Fields["document_type"].Enum.Add("receipt");
fieldSchema.Fields["document_type"].Enum.Add("contract");
fieldSchema.Fields["document_type"].Enum.Add("report");
fieldSchema.Fields["document_type"].Enum.Add("other");
var config = new ContentAnalyzerConfig
{
EnableFormula = true,
EnableLayout = true,
EnableOcr = true,
EstimateFieldSourceAndConfidence = true,
ShouldReturnDetails = true
};
var customAnalyzer = new ContentAnalyzer
{
BaseAnalyzerId = "prebuilt-document",
Description =
"Custom analyzer for extracting"
+ " company information",
Config = config,
FieldSchema = fieldSchema
};
customAnalyzer.Models["completion"] = "gpt-4.1";
customAnalyzer.Models["embedding"] =
"text-embedding-3-large"; // Required when using field_schema and prebuilt-document base analyzer
var operation = await client.CreateAnalyzerAsync(
WaitUntil.Completed,
analyzerId,
customAnalyzer);
ContentAnalyzer result = operation.Value;
Console.WriteLine(
$"Analyzer '{analyzerId}'"
+ " created successfully!");
// Get the full analyzer details after creation
var analyzerDetails =
await client.GetAnalyzerAsync(analyzerId);
result = analyzerDetails.Value;
if (result.Description != null)
{
Console.WriteLine(
$" Description: {result.Description}");
}
if (result.FieldSchema?.Fields != null)
{
Console.WriteLine(
$" Fields"
+ $" ({result.FieldSchema.Fields.Count}):");
foreach (var kvp
in result.FieldSchema.Fields)
{
var method =
kvp.Value.Method?.ToString()
?? "auto";
var fieldType =
kvp.Value.Type?.ToString()
?? "unknown";
Console.WriteLine(
$" - {kvp.Key}:"
+ $" {fieldType} ({method})");
}
}
Contoh output terlihat seperti:
Analyzer 'my_document_analyzer_ID' created successfully!
Description: Custom analyzer for extracting company information
Fields (4):
- company_name: string (extract)
- total_amount: number (extract)
- document_summary: string (generate)
- document_type: string (classify)
Petunjuk / Saran
Kode ini didasarkan pada sampel Create Analyzer di repositori SDK.
Secara opsional, Anda dapat membuat penganalisis pengklasifikasi untuk mengategorikan dokumen dan menggunakan hasilnya untuk merutekan dokumen ke penganalisis bawaan atau kustom yang Anda buat. Berikut adalah contoh pembuatan penganalisis kustom untuk alur kerja klasifikasi.
// Generate a unique analyzer ID
string classifierId =
$"my_classifier_{DateTimeOffset.UtcNow.ToUnixTimeSeconds()}";
Console.WriteLine(
$"Creating classifier '{classifierId}'...");
// Define content categories for classification
var classifierConfig = new ContentAnalyzerConfig
{
ShouldReturnDetails = true,
EnableSegment = true
};
classifierConfig.ContentCategories
.Add("Loan_Application",
new ContentCategoryDefinition
{
Description =
"Documents submitted by individuals"
+ " or businesses to request"
+ " funding, typically including"
+ " personal or business details,"
+ " financial history, loan amount,"
+ " purpose, and supporting"
+ " documentation."
});
classifierConfig.ContentCategories
.Add("Invoice",
new ContentCategoryDefinition
{
Description =
"Billing documents issued by"
+ " sellers or service providers"
+ " to request payment for goods"
+ " or services, detailing items,"
+ " prices, taxes, totals, and"
+ " payment terms."
});
classifierConfig.ContentCategories
.Add("Bank_Statement",
new ContentCategoryDefinition
{
Description =
"Official statements issued by"
+ " banks that summarize account"
+ " activity over a period,"
+ " including deposits,"
+ " withdrawals, fees,"
+ " and balances."
});
// Create the classifier analyzer
var classifierAnalyzer = new ContentAnalyzer
{
BaseAnalyzerId = "prebuilt-document",
Description =
"Custom classifier for financial"
+ " document categorization",
Config = classifierConfig
};
classifierAnalyzer.Models["completion"] =
"gpt-4.1";
var classifierOp =
await client.CreateAnalyzerAsync(
WaitUntil.Completed,
classifierId,
classifierAnalyzer);
// Get the full classifier details
var classifierDetails =
await client.GetAnalyzerAsync(classifierId);
var classifierResult =
classifierDetails.Value;
Console.WriteLine(
$"Classifier '{classifierId}'"
+ " created successfully!");
if (classifierResult.Description != null)
{
Console.WriteLine(
$" Description:"
+ $" {classifierResult.Description}");
}
Petunjuk / Saran
Kode ini didasarkan pada Sampel Buat Pengklasifikasi untuk alur kerja klasifikasi.
Menggunakan penganalisis kustom
Setelah membuat penganalisis, gunakan untuk menganalisis dokumen dan mengekstrak bidang kustom. Hapus penganalisis saat Anda tidak lagi membutuhkannya.
var documentUrl = new Uri(
"https://raw.githubusercontent.com/"
+ "Azure-Samples/"
+ "azure-ai-content-understanding-assets/"
+ "main/document/invoice.pdf"
);
var analyzeOperation = await client.AnalyzeAsync(
WaitUntil.Completed,
analyzerId,
inputs: new[] {
new AnalysisInput { Uri = documentUrl }
});
var analyzeResult = analyzeOperation.Value;
if (analyzeResult.Contents?.FirstOrDefault()
is DocumentContent content)
{
if (content.Fields.TryGetValue(
"company_name", out var companyField))
{
var name =
companyField is ContentStringField sf
? sf.Value : null;
Console.WriteLine(
$"Company Name: "
+ $"{name ?? "(not found)"}");
Console.WriteLine(
" Confidence: "
+ (companyField.Confidence?
.ToString("F2") ?? "N/A"));
}
if (content.Fields.TryGetValue(
"total_amount", out var totalField))
{
var total =
totalField is ContentNumberField nf
? nf.Value : null;
Console.WriteLine(
$"Total Amount: {total}");
}
if (content.Fields.TryGetValue(
"document_summary", out var summaryField))
{
var summary =
summaryField is ContentStringField sf
? sf.Value : null;
Console.WriteLine(
$"Summary: "
+ $"{summary ?? "(not found)"}");
}
if (content.Fields.TryGetValue(
"document_type", out var typeField))
{
var docType =
typeField is ContentStringField sf
? sf.Value : null;
Console.WriteLine(
$"Document Type: "
+ $"{docType ?? "(not found)"}");
}
}
// --- Clean up ---
Console.WriteLine(
$"\nCleaning up: deleting analyzer"
+ $" '{analyzerId}'...");
await client.DeleteAnalyzerAsync(analyzerId);
Console.WriteLine(
$"Analyzer '{analyzerId}'"
+ " deleted successfully.");
Contoh output terlihat seperti:
Company Name: CONTOSO LTD.
Confidence: 0.88
Total Amount: 610
Summary: This document is an invoice from CONTOSO LTD. to MICROSOFT CORPORATION for consulting services, document fees, and printing fees, detailing service periods, billing and shipping addresses, itemized charges, and the total amount due.
Document Type: invoice
Cleaning up: deleting analyzer 'my_document_analyzer_ID'...
Analyzer 'my_document_analyzer_ID' deleted successfully.
Petunjuk / Saran
Lihat contoh lain dari menjalankan penganalisis di sampel .NET SDK.
Pustaka klien | Sampel | Sumber SDK
Panduan ini menunjukkan kepada Anda cara menggunakan Content Understanding Java SDK untuk membuat penganalisis kustom yang mengekstrak data terstruktur dari konten Anda. Penganalisis kustom mendukung jenis konten dokumen, gambar, audio, dan video.
Prasyarat
- Langganan Azure aktif. Jika Anda tidak memiliki akun Azure, buat secara gratis.
- Sumber daya Microsoft Foundry dibuat di wilayah yang didukung.
- Titik akhir sumber daya dan kunci API Anda (ditemukan di bawah Kunci dan Titik Akhir di portal Microsoft Azure).
- Pengaturan default penyebaran model telah dikonfigurasi untuk sumber daya Anda. Lihat Model dan penerapan atau skrip satu kali ini untuk konfigurasi untuk petunjuk penyiapan.
- Java Development Kit (JDK) versi 8 atau yang lebih baru.
- Apache Maven.
Pengaturan
Buat proyek Maven baru:
mvn archetype:generate -DgroupId=com.example \ -DartifactId=custom-analyzer-tutorial \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DinteractiveMode=false cd custom-analyzer-tutorialTambahkan dependensi Pemahaman Konten ke file pom.xml Anda di bagian
<dependencies>:<dependency> <groupId>com.azure</groupId> <artifactId>azure-ai-contentunderstanding</artifactId> <version>1.0.0</version> </dependency>Secara opsional, tambahkan pustaka Azure Identity untuk autentikasi Microsoft Entra:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.14.2</version> </dependency>
Menyiapkan variabel lingkungan
Untuk mengautentikasi dengan layanan Content Understanding, atur variabel lingkungan dengan nilai Anda sendiri sebelum menjalankan sampel:
-
CONTENTUNDERSTANDING_ENDPOINT- titik akhir ke sumber daya Pemahaman Konten Anda. -
CONTENTUNDERSTANDING_KEY- kunci CONTENT Understanding API Anda (opsional jika menggunakan Microsoft Entra ID DefaultAzureCredential).
Windows
setx CONTENTUNDERSTANDING_ENDPOINT "your-endpoint"
setx CONTENTUNDERSTANDING_KEY "your-key"
Linux / macOS
export CONTENTUNDERSTANDING_ENDPOINT="your-endpoint"
export CONTENTUNDERSTANDING_KEY="your-key"
Membuat klien
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.util.polling.SyncPoller;
import com.azure.ai.contentunderstanding
.ContentUnderstandingClient;
import com.azure.ai.contentunderstanding
.ContentUnderstandingClientBuilder;
import com.azure.ai.contentunderstanding.models.*;
String endpoint =
System.getenv("CONTENTUNDERSTANDING_ENDPOINT");
String key =
System.getenv("CONTENTUNDERSTANDING_KEY");
ContentUnderstandingClient client =
new ContentUnderstandingClientBuilder()
.endpoint(endpoint)
.credential(new AzureKeyCredential(key))
.buildClient();
Membuat penganalisis kustom
Contoh berikut membuat penganalisis dokumen kustom berdasarkan penganalisis dokumen bawaan. Ini mendefinisikan bidang menggunakan tiga metode ekstraksi: extract untuk teks harfiah, generate untuk ringkasan yang dihasilkan AI, dan classify untuk kategorisasi.
String analyzerId =
"my_document_analyzer_"
+ System.currentTimeMillis();
Map<String, ContentFieldDefinition> fields =
new HashMap<>();
ContentFieldDefinition companyNameDef =
new ContentFieldDefinition();
companyNameDef.setType(ContentFieldType.STRING);
companyNameDef.setMethod(
GenerationMethod.EXTRACT);
companyNameDef.setDescription(
"Name of the company");
fields.put("company_name", companyNameDef);
ContentFieldDefinition totalAmountDef =
new ContentFieldDefinition();
totalAmountDef.setType(ContentFieldType.NUMBER);
totalAmountDef.setMethod(
GenerationMethod.EXTRACT);
totalAmountDef.setDescription(
"Total amount on the document");
fields.put("total_amount", totalAmountDef);
ContentFieldDefinition summaryDef =
new ContentFieldDefinition();
summaryDef.setType(ContentFieldType.STRING);
summaryDef.setMethod(
GenerationMethod.GENERATE);
summaryDef.setDescription(
"A brief summary of the document content");
fields.put("document_summary", summaryDef);
ContentFieldDefinition documentTypeDef =
new ContentFieldDefinition();
documentTypeDef.setType(ContentFieldType.STRING);
documentTypeDef.setMethod(
GenerationMethod.CLASSIFY);
documentTypeDef.setDescription(
"Type of document");
documentTypeDef.setEnumProperty(
Arrays.asList(
"invoice", "receipt", "contract",
"report", "other"
));
fields.put("document_type", documentTypeDef);
ContentFieldSchema fieldSchema =
new ContentFieldSchema();
fieldSchema.setName("company_schema");
fieldSchema.setDescription(
"Schema for extracting company information");
fieldSchema.setFields(fields);
Map<String, String> models = new HashMap<>();
models.put("completion", "gpt-4.1");
models.put("embedding", "text-embedding-3-large"); // Required when using field_schema and prebuilt-document base analyzer
ContentAnalyzer customAnalyzer =
new ContentAnalyzer()
.setBaseAnalyzerId("prebuilt-document")
.setDescription(
"Custom analyzer for extracting"
+ " company information")
.setConfig(new ContentAnalyzerConfig()
.setOcrEnabled(true)
.setLayoutEnabled(true)
.setFormulaEnabled(true)
.setEstimateFieldSourceAndConfidence(
true)
.setReturnDetails(true))
.setFieldSchema(fieldSchema)
.setModels(models);
SyncPoller<ContentAnalyzerOperationStatus,
ContentAnalyzer> operation =
client.beginCreateAnalyzer(
analyzerId, customAnalyzer, true);
ContentAnalyzer result =
operation.getFinalResult();
System.out.println(
"Analyzer '" + analyzerId
+ "' created successfully!");
if (result.getDescription() != null) {
System.out.println(
" Description: "
+ result.getDescription());
}
if (result.getFieldSchema() != null
&& result.getFieldSchema()
.getFields() != null) {
System.out.println(
" Fields ("
+ result.getFieldSchema()
.getFields().size() + "):");
result.getFieldSchema().getFields()
.forEach((fieldName, fieldDef) -> {
String method =
fieldDef.getMethod() != null
? fieldDef.getMethod()
.toString()
: "auto";
String type =
fieldDef.getType() != null
? fieldDef.getType()
.toString()
: "unknown";
System.out.println(
" - " + fieldName
+ ": " + type
+ " (" + method + ")");
});
}
Contoh output terlihat seperti:
Analyzer 'my_document_analyzer_ID' created successfully!
Description: Custom analyzer for extracting company information
Fields (4):
- total_amount: number (extract)
- company_name: string (extract)
- document_summary: string (generate)
- document_type: string (classify)
Petunjuk / Saran
Kode ini didasarkan pada sampel Create Analyzer di repositori SDK.
Secara opsional, Anda dapat membuat penganalisis pengklasifikasi untuk mengategorikan dokumen dan menggunakan hasilnya untuk merutekan dokumen ke penganalisis bawaan atau kustom yang Anda buat. Berikut adalah contoh pembuatan penganalisis kustom untuk alur kerja klasifikasi.
// Generate a unique analyzer ID
String classifierId =
"my_classifier_" + System.currentTimeMillis();
System.out.println(
"Creating classifier '"
+ classifierId + "'...");
// Define content categories for classification
Map<String, ContentCategoryDefinition>
categories = new HashMap<>();
categories.put("Loan_Application",
new ContentCategoryDefinition()
.setDescription(
"Documents submitted by individuals"
+ " or businesses to request funding,"
+ " typically including personal or"
+ " business details, financial"
+ " history, loan amount, purpose,"
+ " and supporting documentation."));
categories.put("Invoice",
new ContentCategoryDefinition()
.setDescription(
"Billing documents issued by sellers"
+ " or service providers to request"
+ " payment for goods or services,"
+ " detailing items, prices, taxes,"
+ " totals, and payment terms."));
categories.put("Bank_Statement",
new ContentCategoryDefinition()
.setDescription(
"Official statements issued by banks"
+ " that summarize account activity"
+ " over a period, including deposits,"
+ " withdrawals, fees,"
+ " and balances."));
// Create the classifier
Map<String, String> classifierModels =
new HashMap<>();
classifierModels.put("completion", "gpt-4.1");
ContentAnalyzer classifier =
new ContentAnalyzer()
.setBaseAnalyzerId("prebuilt-document")
.setDescription(
"Custom classifier for financial"
+ " document categorization")
.setConfig(new ContentAnalyzerConfig()
.setReturnDetails(true)
.setSegmentEnabled(true)
.setContentCategories(categories))
.setModels(classifierModels);
SyncPoller<ContentAnalyzerOperationStatus,
ContentAnalyzer> classifierOp =
client.beginCreateAnalyzer(
classifierId, classifier, true);
classifierOp.getFinalResult();
// Get the full classifier details
ContentAnalyzer classifierResult =
client.getAnalyzer(classifierId);
System.out.println(
"Classifier '" + classifierId
+ "' created successfully!");
if (classifierResult.getDescription() != null) {
System.out.println(
" Description: "
+ classifierResult.getDescription());
}
Petunjuk / Saran
Kode ini didasarkan pada sampel Buat Pengklasifikasi untuk alur kerja klasifikasi.
Menggunakan penganalisis kustom
Setelah membuat penganalisis, gunakan untuk menganalisis dokumen dan mengekstrak bidang kustom. Hapus penganalisis saat Anda tidak lagi membutuhkannya.
String documentUrl =
"https://raw.githubusercontent.com/"
+ "Azure-Samples/"
+ "azure-ai-content-understanding-assets/"
+ "main/document/invoice.pdf";
AnalysisInput input = new AnalysisInput();
input.setUrl(documentUrl);
SyncPoller<ContentAnalyzerAnalyzeOperationStatus,
AnalysisResult> analyzeOperation =
client.beginAnalyze(
analyzerId, Arrays.asList(input));
AnalysisResult analyzeResult =
analyzeOperation.getFinalResult();
if (analyzeResult.getContents() != null
&& !analyzeResult.getContents().isEmpty()
&& analyzeResult.getContents().get(0)
instanceof DocumentContent) {
DocumentContent content =
(DocumentContent) analyzeResult
.getContents().get(0);
ContentField companyField =
content.getFields() != null
? content.getFields()
.get("company_name") : null;
if (companyField
instanceof ContentStringField) {
ContentStringField sf =
(ContentStringField) companyField;
System.out.println(
"Company Name: " + sf.getValue());
System.out.println(
" Confidence: "
+ companyField.getConfidence());
}
ContentField totalField =
content.getFields() != null
? content.getFields()
.get("total_amount") : null;
if (totalField != null) {
System.out.println(
"Total Amount: "
+ totalField.getValue());
}
ContentField summaryField =
content.getFields() != null
? content.getFields()
.get("document_summary") : null;
if (summaryField
instanceof ContentStringField) {
ContentStringField sf =
(ContentStringField) summaryField;
System.out.println(
"Summary: " + sf.getValue());
}
ContentField typeField =
content.getFields() != null
? content.getFields()
.get("document_type") : null;
if (typeField
instanceof ContentStringField) {
ContentStringField sf =
(ContentStringField) typeField;
System.out.println(
"Document Type: " + sf.getValue());
}
}
// --- Clean up ---
System.out.println(
"\nCleaning up: deleting analyzer '"
+ analyzerId + "'...");
client.deleteAnalyzer(analyzerId);
System.out.println(
"Analyzer '" + analyzerId
+ "' deleted successfully.");
Contoh output terlihat seperti:
Company Name: CONTOSO LTD.
Confidence: 0.781
Total Amount: 610.0
Summary: This document is an invoice from CONTOSO LTD. to Microsoft Corporation for consulting services, document fees, and printing fees, detailing service dates, itemized charges, taxes, and the total amount due.
Document Type: invoice
Cleaning up: deleting analyzer 'my_document_analyzer_ID'...
Analyzer 'my_document_analyzer_ID' deleted successfully.
Petunjuk / Saran
Lihat contoh lain dari menjalankan penganalisis di sampel Java SDK.
Pustaka klien | Sampel | Sumber SDK
Panduan ini menunjukkan kepada Anda cara menggunakan Content Understanding JavaScript SDK untuk membuat penganalisis kustom yang mengekstrak data terstruktur dari konten Anda. Penganalisis kustom mendukung jenis konten dokumen, gambar, audio, dan video.
Prasyarat
- Langganan Azure aktif. Jika Anda tidak memiliki akun Azure, buat secara gratis.
- Sumber daya Microsoft Foundry dibuat di wilayah yang didukung.
- Titik akhir sumber daya dan kunci API Anda (ditemukan di bawah Kunci dan Titik Akhir di portal Microsoft Azure).
- Pengaturan default penyebaran model telah dikonfigurasi untuk sumber daya Anda. Lihat Model dan penerapan atau skrip satu kali ini untuk konfigurasi untuk petunjuk penyiapan.
- Node.js Versi LTS.
Pengaturan
Buat proyek Node.js baru:
mkdir custom-analyzer-tutorial cd custom-analyzer-tutorial npm init -yInstal pustaka klien Content Understanding:
npm install @azure/ai-content-understandingSecara opsional, instal pustaka Azure Identity untuk autentikasi Microsoft Entra:
npm install @azure/identity
Menyiapkan variabel lingkungan
Untuk mengautentikasi dengan layanan Content Understanding, atur variabel lingkungan dengan nilai Anda sendiri sebelum menjalankan sampel:
-
CONTENTUNDERSTANDING_ENDPOINT- titik akhir ke sumber daya Pemahaman Konten Anda. -
CONTENTUNDERSTANDING_KEY- kunci CONTENT Understanding API Anda (opsional jika menggunakan Microsoft Entra ID DefaultAzureCredential).
Windows
setx CONTENTUNDERSTANDING_ENDPOINT "your-endpoint"
setx CONTENTUNDERSTANDING_KEY "your-key"
Linux / macOS
export CONTENTUNDERSTANDING_ENDPOINT="your-endpoint"
export CONTENTUNDERSTANDING_KEY="your-key"
Membuat klien
const { AzureKeyCredential } =
require("@azure/core-auth");
const {
ContentUnderstandingClient,
} = require("@azure/ai-content-understanding");
const endpoint =
process.env["CONTENTUNDERSTANDING_ENDPOINT"];
const key =
process.env["CONTENTUNDERSTANDING_KEY"];
const client = new ContentUnderstandingClient(
endpoint,
new AzureKeyCredential(key)
);
Membuat penganalisis kustom
Contoh berikut membuat penganalisis dokumen kustom berdasarkan penganalisis dokumen bawaan. Ini mendefinisikan bidang menggunakan tiga metode ekstraksi: extract untuk teks harfiah, generate untuk ringkasan yang dihasilkan AI, dan classify untuk kategorisasi.
const analyzerId =
`my_document_analyzer_${Math.floor(
Date.now() / 1000
)}`;
const analyzer = {
baseAnalyzerId: "prebuilt-document",
description:
"Custom analyzer for extracting"
+ " company information",
config: {
enableFormula: true,
enableLayout: true,
enableOcr: true,
estimateFieldSourceAndConfidence: true,
returnDetails: true,
},
fieldSchema: {
name: "company_schema",
description:
"Schema for extracting company"
+ " information",
fields: {
company_name: {
type: "string",
method: "extract",
description:
"Name of the company",
},
total_amount: {
type: "number",
method: "extract",
description:
"Total amount on the"
+ " document",
},
document_summary: {
type: "string",
method: "generate",
description:
"A brief summary of the"
+ " document content",
},
document_type: {
type: "string",
method: "classify",
description: "Type of document",
enum: [
"invoice", "receipt",
"contract", "report", "other",
],
},
},
},
models: {
completion: "gpt-4.1",
embedding: "text-embedding-3-large", // Required when using field_schema and prebuilt-document base analyzer
},
};
const poller = client.createAnalyzer(
analyzerId, analyzer
);
await poller.pollUntilDone();
const result = await client.getAnalyzer(
analyzerId
);
console.log(
`Analyzer '${analyzerId}' created`
+ ` successfully!`
);
if (result.description) {
console.log(
` Description: ${result.description}`
);
}
if (result.fieldSchema?.fields) {
const fields = result.fieldSchema.fields;
console.log(
` Fields`
+ ` (${Object.keys(fields).length}):`
);
for (const [name, fieldDef]
of Object.entries(fields)) {
const method =
fieldDef.method ?? "auto";
const fieldType =
fieldDef.type ?? "unknown";
console.log(
` - ${name}: `
+ `${fieldType} (${method})`
);
}
}
Contoh output terlihat seperti:
Analyzer 'my_document_analyzer_ID' created successfully!
Description: Custom analyzer for extracting company information
Fields (4):
- company_name: string (extract)
- total_amount: number (extract)
- document_summary: string (generate)
- document_type: string (classify)
Petunjuk / Saran
Kode ini didasarkan pada sampel create Analyzer di repositori SDK.
Secara opsional, Anda dapat membuat penganalisis pengklasifikasi untuk mengategorikan dokumen dan menggunakan hasilnya untuk merutekan dokumen ke penganalisis bawaan atau kustom yang Anda buat. Berikut adalah contoh pembuatan penganalisis kustom untuk alur kerja klasifikasi.
const classifierId =
`my_classifier_${Math.floor(
Date.now() / 1000
)}`;
console.log(
`Creating classifier '${classifierId}'...`
);
const classifierAnalyzer = {
baseAnalyzerId: "prebuilt-document",
description:
"Custom classifier for financial"
+ " document categorization",
config: {
returnDetails: true,
enableSegment: true,
contentCategories: {
Loan_Application: {
description:
"Documents submitted by"
+ " individuals or"
+ " businesses to request"
+ " funding, typically"
+ " including personal or"
+ " business details,"
+ " financial history,"
+ " loan amount, purpose,"
+ " and supporting"
+ " documentation.",
},
Invoice: {
description:
"Billing documents issued"
+ " by sellers or service"
+ " providers to request"
+ " payment for goods or"
+ " services, detailing"
+ " items, prices, taxes,"
+ " totals, and payment"
+ " terms.",
},
Bank_Statement: {
description:
"Official statements"
+ " issued by banks that"
+ " summarize account"
+ " activity over a"
+ " period, including"
+ " deposits, withdrawals,"
+ " fees, and balances.",
},
},
},
models: {
completion: "gpt-4.1",
},
};
const classifierPoller =
client.createAnalyzer(
classifierId, classifierAnalyzer
);
await classifierPoller.pollUntilDone();
const classifierResult =
await client.getAnalyzer(classifierId);
console.log(
`Classifier '${classifierId}' created`
+ ` successfully!`
);
if (classifierResult.description) {
console.log(
` Description: `
+ `${classifierResult.description}`
);
}
Petunjuk / Saran
Kode ini didasarkan pada sampel buat Pengklasifikasi untuk alur kerja klasifikasi.
Menggunakan penganalisis kustom
Setelah membuat penganalisis, gunakan untuk menganalisis dokumen dan mengekstrak bidang kustom. Hapus penganalisis saat Anda tidak lagi membutuhkannya.
const documentUrl =
"https://raw.githubusercontent.com/"
+ "Azure-Samples/"
+ "azure-ai-content-understanding-assets/"
+ "main/document/invoice.pdf";
const analyzePoller = client.analyze(
analyzerId, [{ url: documentUrl }]
);
const analyzeResult =
await analyzePoller.pollUntilDone();
if (analyzeResult.contents
&& analyzeResult.contents.length > 0) {
const content = analyzeResult.contents[0];
if (content.fields) {
const company =
content.fields["company_name"];
if (company) {
console.log(
`Company Name: `
+ `${company.value}`
);
console.log(
` Confidence: `
+ `${company.confidence}`
);
}
const total =
content.fields["total_amount"];
if (total) {
console.log(
`Total Amount: `
+ `${total.value}`
);
}
const summary =
content.fields["document_summary"];
if (summary) {
console.log(
`Summary: ${summary.value}`
);
}
const docType =
content.fields["document_type"];
if (docType) {
console.log(
`Document Type: `
+ `${docType.value}`
);
}
}
}
// --- Clean up ---
console.log(
`\nCleaning up: deleting analyzer`
+ ` '${analyzerId}'...`
);
await client.deleteAnalyzer(analyzerId);
console.log(
`Analyzer '${analyzerId}' deleted`
+ ` successfully.`
);
Contoh output terlihat seperti:
Company Name: CONTOSO LTD.
Confidence: 0.739
Total Amount: 610
Summary: This document is an invoice from CONTOSO LTD. to Microsoft Corporation for consulting, document, and printing services provided during the service period. It details line items, subtotal, sales tax, total, previous unpaid balance, and the final amount due.
Document Type: invoice
Cleaning up: deleting analyzer 'my_document_analyzer_ID'...
Analyzer 'my_document_analyzer_ID' deleted successfully.
Petunjuk / Saran
Lihat contoh lebih lanjut tentang menjalankan penganalisis di sampel JavaScript SDK.
Pustaka klien | Sampel | Sumber SDK
Panduan ini menunjukkan kepada Anda cara menggunakan Content Understanding TypeScript SDK untuk membuat penganalisis kustom yang mengekstrak data terstruktur dari konten Anda. Penganalisis kustom mendukung jenis konten dokumen, gambar, audio, dan video.
Prasyarat
- Langganan Azure aktif. Jika Anda tidak memiliki akun Azure, buat secara gratis.
- Sumber daya Microsoft Foundry dibuat di wilayah yang didukung.
- Titik akhir sumber daya dan kunci API Anda (ditemukan di bawah Kunci dan Titik Akhir di portal Microsoft Azure).
- Pengaturan default penyebaran model telah dikonfigurasi untuk sumber daya Anda. Lihat Model dan penerapan atau skrip satu kali ini untuk konfigurasi untuk petunjuk penyiapan.
- Node.js Versi LTS.
- TypeScript 5.x atau yang lebih baru.
Pengaturan
Buat proyek Node.js baru:
mkdir custom-analyzer-tutorial cd custom-analyzer-tutorial npm init -yInstal TypeScript dan pustaka klien Content Understanding:
npm install typescript ts-node @azure/ai-content-understandingSecara opsional, instal pustaka Azure Identity untuk autentikasi Microsoft Entra:
npm install @azure/identity
Menyiapkan variabel lingkungan
Untuk mengautentikasi dengan layanan Content Understanding, atur variabel lingkungan dengan nilai Anda sendiri sebelum menjalankan sampel:
-
CONTENTUNDERSTANDING_ENDPOINT- titik akhir ke sumber daya Pemahaman Konten Anda. -
CONTENTUNDERSTANDING_KEY- kunci CONTENT Understanding API Anda (opsional jika menggunakan Microsoft Entra ID DefaultAzureCredential).
Windows
setx CONTENTUNDERSTANDING_ENDPOINT "your-endpoint"
setx CONTENTUNDERSTANDING_KEY "your-key"
Linux / macOS
export CONTENTUNDERSTANDING_ENDPOINT="your-endpoint"
export CONTENTUNDERSTANDING_KEY="your-key"
Membuat klien
import { AzureKeyCredential } from "@azure/core-auth";
import {
ContentUnderstandingClient,
} from "@azure/ai-content-understanding";
import type {
ContentAnalyzer,
ContentAnalyzerConfig,
ContentFieldSchema,
} from "@azure/ai-content-understanding";
const endpoint =
process.env["CONTENTUNDERSTANDING_ENDPOINT"]!;
const key =
process.env["CONTENTUNDERSTANDING_KEY"]!;
const client = new ContentUnderstandingClient(
endpoint,
new AzureKeyCredential(key)
);
Membuat penganalisis kustom
Contoh berikut membuat penganalisis dokumen kustom berdasarkan penganalisis dokumen bawaan. Ini mendefinisikan bidang menggunakan tiga metode ekstraksi: extract untuk teks harfiah, generate untuk ringkasan yang dihasilkan AI, dan classify untuk kategorisasi.
const analyzerId =
`my_document_analyzer_${Math.floor(
Date.now() / 1000
)}`;
const fieldSchema: ContentFieldSchema = {
name: "company_schema",
description:
"Schema for extracting company"
+ " information",
fields: {
company_name: {
type: "string",
method: "extract",
description:
"Name of the company",
},
total_amount: {
type: "number",
method: "extract",
description:
"Total amount on the document",
},
document_summary: {
type: "string",
method: "generate",
description:
"A brief summary of the"
+ " document content",
},
document_type: {
type: "string",
method: "classify",
description: "Type of document",
enum: [
"invoice", "receipt",
"contract", "report", "other",
],
},
},
};
const config: ContentAnalyzerConfig = {
enableFormula: true,
enableLayout: true,
enableOcr: true,
estimateFieldSourceAndConfidence: true,
returnDetails: true,
};
const analyzer: ContentAnalyzer = {
baseAnalyzerId: "prebuilt-document",
description:
"Custom analyzer for extracting"
+ " company information",
config,
fieldSchema,
models: {
completion: "gpt-4.1",
embedding: "text-embedding-3-large", // Required when using field_schema and prebuilt-document base analyzer
},
} as unknown as ContentAnalyzer;
const poller = client.createAnalyzer(
analyzerId, analyzer
);
await poller.pollUntilDone();
const result = await client.getAnalyzer(
analyzerId
);
console.log(
`Analyzer '${analyzerId}' created`
+ ` successfully!`
);
if (result.description) {
console.log(
` Description: ${result.description}`
);
}
if (result.fieldSchema?.fields) {
const fields = result.fieldSchema.fields;
console.log(
` Fields`
+ ` (${Object.keys(fields).length}):`
);
for (const [name, fieldDef]
of Object.entries(fields)) {
const method =
fieldDef.method ?? "auto";
const fieldType =
fieldDef.type ?? "unknown";
console.log(
` - ${name}: `
+ `${fieldType} (${method})`
);
}
}
Contoh output terlihat seperti:
Analyzer 'my_document_analyzer_ID' created successfully!
Description: Custom analyzer for extracting company information
Fields (4):
- company_name: string (extract)
- total_amount: number (extract)
- document_summary: string (generate)
- document_type: string (classify)
Petunjuk / Saran
Kode ini didasarkan pada sampel create Analyzer di repositori SDK.
Secara opsional, Anda dapat membuat penganalisis pengklasifikasi untuk mengategorikan dokumen dan menggunakan hasilnya untuk merutekan dokumen ke penganalisis bawaan atau kustom yang Anda buat. Berikut adalah contoh pembuatan penganalisis kustom untuk alur kerja klasifikasi.
const classifierId =
`my_classifier_${Math.floor(
Date.now() / 1000
)}`;
console.log(
`Creating classifier '${classifierId}'...`
);
const classifierAnalyzer: ContentAnalyzer = {
baseAnalyzerId: "prebuilt-document",
description:
"Custom classifier for financial"
+ " document categorization",
config: {
returnDetails: true,
enableSegment: true,
contentCategories: {
Loan_Application: {
description:
"Documents submitted by"
+ " individuals or"
+ " businesses to request"
+ " funding, typically"
+ " including personal or"
+ " business details,"
+ " financial history,"
+ " loan amount, purpose,"
+ " and supporting"
+ " documentation.",
},
Invoice: {
description:
"Billing documents issued"
+ " by sellers or service"
+ " providers to request"
+ " payment for goods or"
+ " services, detailing"
+ " items, prices, taxes,"
+ " totals, and payment"
+ " terms.",
},
Bank_Statement: {
description:
"Official statements"
+ " issued by banks that"
+ " summarize account"
+ " activity over a"
+ " period, including"
+ " deposits, withdrawals,"
+ " fees, and balances.",
},
},
} as unknown as ContentAnalyzerConfig,
models: {
completion: "gpt-4.1",
},
} as unknown as ContentAnalyzer;
const classifierPoller =
client.createAnalyzer(
classifierId, classifierAnalyzer
);
await classifierPoller.pollUntilDone();
const classifierResult =
await client.getAnalyzer(classifierId);
console.log(
`Classifier '${classifierId}' created`
+ ` successfully!`
);
if (classifierResult.description) {
console.log(
` Description: `
+ `${classifierResult.description}`
);
}
Petunjuk / Saran
Kode ini didasarkan pada sampel buat Pengklasifikasi untuk alur kerja klasifikasi.
Menggunakan penganalisis kustom
Setelah membuat penganalisis, gunakan untuk menganalisis dokumen dan mengekstrak bidang kustom. Hapus penganalisis saat Anda tidak lagi membutuhkannya.
const documentUrl =
"https://raw.githubusercontent.com/"
+ "Azure-Samples/"
+ "azure-ai-content-understanding-assets/"
+ "main/document/invoice.pdf";
const analyzePoller = client.analyze(
analyzerId, [{ url: documentUrl }]
);
const analyzeResult =
await analyzePoller.pollUntilDone();
if (analyzeResult.contents
&& analyzeResult.contents.length > 0) {
const content = analyzeResult.contents[0];
if (content.fields) {
const company =
content.fields["company_name"];
if (company) {
console.log(
`Company Name: `
+ `${company.value}`
);
console.log(
` Confidence: `
+ `${company.confidence}`
);
}
const total =
content.fields["total_amount"];
if (total) {
console.log(
`Total Amount: `
+ `${total.value}`
);
}
const summary =
content.fields["document_summary"];
if (summary) {
console.log(
`Summary: ${summary.value}`
);
}
const docType =
content.fields["document_type"];
if (docType) {
console.log(
`Document Type: `
+ `${docType.value}`
);
}
}
}
// --- Clean up ---
console.log(
`\nCleaning up: deleting analyzer`
+ ` '${analyzerId}'...`
);
await client.deleteAnalyzer(analyzerId);
console.log(
`Analyzer '${analyzerId}' deleted`
+ ` successfully.`
);
Contoh output terlihat seperti:
Company Name: CONTOSO LTD.
Confidence: 0.818
Total Amount: 610
Summary: This document is an invoice from CONTOSO LTD. to MICROSOFT CORPORATION for consulting, document, and printing services provided during the service period 10/14/2019 - 11/14/2019. It details line items, subtotal, sales tax, total, previous unpaid balance, and the final amount due.
Document Type: invoice
Cleaning up: deleting analyzer 'my_document_analyzer_ID'...
Analyzer 'my_document_analyzer_ID' deleted successfully.
Petunjuk / Saran
Lihat contoh lebih lanjut tentang menjalankan penganalisis di sampel TypeScript SDK.
Konten terkait
- Tinjau sampel kode: pencarian dokumen visual.
- Tinjau sampel kode: templat penganalisis.
- Jelajahi lebih banyak sampel Python SDK
- Jelajahi lebih banyak sampel .NET SDK
- Menjelajahi lebih banyak sampel Java SDK
- Menjelajahi lebih banyak sampel JavaScript SDK
- Jelajahi lebih banyak sampel TypeScript SDK
- Coba pemrosesan konten dokumen Anda menggunakan Pemahaman Konten di Foundry.