Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Innehållstolkningsanalyserare definierar hur du bearbetar och extraherar insikter från ditt innehåll. De säkerställer en enhetlig bearbetnings- och utdatastruktur i allt innehåll, så att du får tillförlitliga och förutsägbara resultat. För vanliga användningsfall kan du använda de fördefinierade analysverktygen. Den här guiden visar hur du kan anpassa analysverktygen så att de passar dina behov bättre.
Den här guiden visar hur du använder REST API för innehållstolkning för att skapa en anpassad analysator som extraherar strukturerade data från ditt innehåll.
Förutsättningar
- En aktiv Azure-abonnemang. Om du inte har ett Azure-konto skapar du ett kostnadsfritt.
- En Microsoft Foundry-resurs som skapats i en region som stöds.
- Portalen visar den här resursen under Foundry>Foundry.
- Konfigurera standardmodelldistributioner för din Content Understanding-resurs. Genom att ange standardvärden skapar du en anslutning till Microsoft Foundry-modellerna som du använder för förfrågningar om innehållsförståelse. Använd någon av följande metoder:
Välj knappen + Lägg till resurs i det övre vänstra hörnet.
Välj den Foundry-resurs som du vill använda och välj Nästa>spara.
Kontrollera att kryssrutan Aktivera automatisk distribution för nödvändiga modeller om inga standardvärden är tillgängliga är markerad. Det här valet säkerställer att resursen är helt konfigurerad med de nödvändiga
GPT-4.1modellerna ,GPT-4.1-miniochtext-embedding-3-large. Olika fördefinierade analysverktyg kräver olika modeller.
- cURL installerat för din utvecklingsmiljö.
Definiera ett analysschema
Om du vill skapa en anpassad analysator definierar du ett fältschema som beskriver de strukturerade data som du vill extrahera. I följande exempel skapar du en analysator baserat på den fördefinierade dokumentanalysatorn för bearbetning av ett kvitto.
Skapa en JSON-fil med namnet receipt.json med följande innehåll:
{
"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"
}
}
}
}
}
}
}
Om du har olika typer av dokument som du behöver bearbeta, men du bara vill kategorisera och analysera kvitton, skapar du en analysator som kategoriserar dokumentet först. Dirigera den sedan till analysatorn som du skapade tidigare med följande schema.
Skapa en JSON-fil med namnet categorize.json med följande innehåll:
{
"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.
}
Skapa en analysator
PUT-begäran
Skapa först en kvittoanalysator och skapa sedan en kategorianalysator.
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
PUT-svar
Svaret 201 Created innehåller en Operation-Location rubrik med en URL som du kan använda för att spåra statusen för den här asynkrona åtgärden för att skapa analysverktyg.
201 Created
Operation-Location: {endpoint}/contentunderstanding/analyzers/{analyzerId}/operations/{operationId}?api-version=2025-05-01-preview
När operationen är klar returnerar en HTTP GET till operations-URL:en "status": "succeeded".
curl -i -X GET "{endpoint}/contentunderstanding/analyzers/{analyzerId}/operations/{operationId}?api-version=2025-11-01" \
-H "Ocp-Apim-Subscription-Key: {key}"
Analysera en fil
Skicka filen
Du kan nu använda den anpassade analysatorn som du skapade för att bearbeta filer och extrahera de fält som du definierade i schemat.
Innan du kör cURL-kommandot gör du följande ändringar i HTTP-begäran:
- Ersätt
{endpoint}och{key}med slutpunkts- och nyckelvärdena från Din Azure Portal Foundry-instans. - Ersätt
{analyzerId}med namnet på den anpassade analysatorn som du skapade medcategorize.jsonfilen. - Ersätt
{fileUrl}med en offentligt tillgänglig URL för filen som ska analyseras, till exempel en sökväg till en Azure Storage Blob med en signatur för delad åtkomst (SAS) eller exempel-URL:enhttps://github.com/Azure-Samples/azure-ai-content-understanding-python/raw/refs/heads/main/data/receipt.png.
POST-förfrågan
I det här exemplet används den anpassade analysatorn som du skapade med categorize.json filen för att analysera ett kvitto.
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"
}
]
}'
POST-svarmeddelande
Svaret 202 Accepted innehåller det {resultId} som du kan använda för att spåra statusen för den här asynkrona åtgärden.
{
"id": {resultId},
"status": "Running",
"result": {
"analyzerId": {analyzerId},
"apiVersion": "2025-11-01",
"createdAt": "YYYY-MM-DDTHH:MM:SSZ",
"warnings": [],
"contents": []
}
}
Hämta analysresultat
Operation-Location Använd svaret från POST för att hämta resultatet av analysen.
GET-begäran
curl -i -X GET "{endpoint}/contentunderstanding/analyzerResults/{resultId}?api-version=2025-11-01" \
-H "Ocp-Apim-Subscription-Key: {key}"
GET-svar
Ett 200 OK svar innehåller ett status fält som visar åtgärdens förlopp.
-
statusärSucceededom åtgärden slutförs framgångsrikt. - Om statusen är
runningellernotStartedanropar du API:et igen manuellt eller använder ett skript. Vänta minst en sekund mellan begäranden.
Exempelsvar
{
"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
}
}
}
Klientbibliotek | Exempel | SDK-källkod
Den här guiden visar hur du använder Content Understanding Python SDK för att skapa en anpassad analysator som extraherar strukturerade data från ditt innehåll. Anpassade analysverktyg stöder innehållstyper för dokument, bild, ljud och video.
Förutsättningar
- En aktiv Azure-abonnemang. Om du inte har ett Azure-konto skapar du ett kostnadsfritt.
- En Microsoft Foundry-resurs som skapats i en region som stöds.
- Resursslutpunkten och API-nyckeln (finns under Nycklar och slutpunkt i Azure-portalen).
- Standardinställningar för modelldistribution som konfigurerats för resursen. Se Modeller och distributioner eller det här engångskonfigurationsskriptet för installationsinstruktioner.
- Python 3.9 eller senare.
Ställ in
Installera Content Understanding-klientbiblioteket för Python med pip:
pip install azure-ai-contentunderstandingDu kan också installera Azure Identity-biblioteket för Microsoft Entra-autentisering:
pip install azure-identity
Ställ in miljövariabler
Om du vill autentisera med Content Understanding-tjänsten anger du miljövariablerna med dina egna värden innan du kör exemplet:
-
CONTENTUNDERSTANDING_ENDPOINT– slutpunkten till din Content Understanding-resurs. -
CONTENTUNDERSTANDING_KEY– din API-nyckel för Content Understanding (valfritt om du använder 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"
Skapa klienten
Importera nödvändiga bibliotek och modeller och skapa sedan klienten med din resursslutpunkt och dina autentiseringsuppgifter.
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),
)
Skapa ett anpassat analysverktyg
I följande exempel skapas ett anpassat dokumentanalysverktyg baserat på den fördefinierade dokumentbasanalysatorn. Den definierar fält med tre extraheringsmetoder: extract för literaltext, generate för AI-genererade fält eller tolkningar och classify för kategorisering.
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})")
Ett exempel på utdata ser ut så här:
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)
Tips/Råd
Den här koden baseras på exemplet create analyzer på SDK-lagringsplatsen.
Du kan också skapa en klassificerare för att kategorisera dokument och använda dess resultat för att dirigera dokument till fördefinierade eller anpassade analysverktyg som du har skapat. Här är ett exempel på hur du skapar en anpassad analysator för klassificeringsarbetsflöden.
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}")
Tips/Råd
Den här koden baseras på exemplet skapa klassificerare i SDK-lagringsplatsen.
Använda den anpassade analysatorn
När du har skapat analysatorn använder du den för att analysera ett dokument och extrahera de anpassade fälten. Ta bort analysatorn när du inte längre behöver den.
# --- 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.")
Ett exempel på utdata ser ut så här:
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.
Tips/Råd
Kolla in fler exempel på hur du kör analysverktyg på SDK-exempel.
Klientbibliotek | Exempel | SDK-källkod
Den här guiden visar hur du använder Content Understanding .NET SDK för att skapa en anpassad analysator som extraherar strukturerade data från ditt innehåll. Anpassade analysverktyg stöder innehållstyper för dokument, bild, ljud och video.
Förutsättningar
- En aktiv Azure-abonnemang. Om du inte har ett Azure-konto skapar du ett kostnadsfritt.
- En Microsoft Foundry-resurs som skapats i en region som stöds.
- Resursslutpunkten och API-nyckeln (finns under Nycklar och slutpunkt i Azure-portalen).
- Standardinställningar för modelldistribution som konfigurerats för resursen. Se Modeller och distributioner eller det här engångskonfigurationsskriptet för installationsinstruktioner.
- Den aktuella versionen av .NET.
Ställ in
Skapa ett nytt .NET-konsolprogram:
dotnet new console -n CustomAnalyzerTutorial cd CustomAnalyzerTutorialInstallera Content Understanding-klientbiblioteket för .NET:
dotnet add package Azure.AI.ContentUnderstandingDu kan också installera Azure Identity-biblioteket för Microsoft Entra-autentisering:
dotnet add package Azure.Identity
Ställ in miljövariabler
Om du vill autentisera med Content Understanding-tjänsten anger du miljövariablerna med dina egna värden innan du kör exemplet:
-
CONTENTUNDERSTANDING_ENDPOINT– slutpunkten till din Content Understanding-resurs. -
CONTENTUNDERSTANDING_KEY– din API-nyckel för Content Understanding (valfritt om du använder 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"
Skapa klienten
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)
);
Skapa ett anpassat analysverktyg
I följande exempel skapas en anpassad dokumentanalys baserad på den fördefinierade dokumentanalysatorn. Den definierar fält med tre extraheringsmetoder: extract för literaltext, generate för AI-genererade sammanfattningar och classify för kategorisering.
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})");
}
}
Ett exempel på utdata ser ut så här:
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)
Tips/Råd
Den här koden baseras på Create Analyzer-exemplet i SDK-förrådet.
Du kan också skapa en klassificerare för att kategorisera dokument och använda dess resultat för att dirigera dokument till fördefinierade eller anpassade analysverktyg som du har skapat. Här är ett exempel på hur du skapar en anpassad analysator för klassificeringsarbetsflöden.
// 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}");
}
Tips/Råd
Den här koden baseras på create classifier sample for classification workflows ( Skapa klassificerarexempel för klassificeringsarbetsflöden).
Använda den anpassade analysatorn
När du har skapat analysatorn använder du den för att analysera ett dokument och extrahera de anpassade fälten. Ta bort analysatorn när du inte längre behöver den.
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.");
Ett exempel på utdata ser ut så här:
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.
Tips/Råd
Kolla in fler exempel på hur du kör analysverktyg på .NET SDK-exempel.
Klientbibliotek | Exempel | SDK-källkod
Den här guiden visar hur du använder Content Understanding Java SDK för att skapa en anpassad analysator som extraherar strukturerade data från ditt innehåll. Anpassade analysverktyg stöder innehållstyper för dokument, bild, ljud och video.
Förutsättningar
- En aktiv Azure-abonnemang. Om du inte har ett Azure-konto skapar du ett kostnadsfritt.
- En Microsoft Foundry-resurs som skapats i en region som stöds.
- Resursslutpunkten och API-nyckeln (finns under Nycklar och slutpunkt i Azure-portalen).
- Standardinställningar för modelldistribution som konfigurerats för resursen. Se Modeller och distributioner eller det här engångskonfigurationsskriptet för installationsinstruktioner.
- Java Development Kit (JDK) version 8 eller senare.
- Apache Maven.
Ställ in
Skapa ett nytt Maven-projekt:
mvn archetype:generate -DgroupId=com.example \ -DartifactId=custom-analyzer-tutorial \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DinteractiveMode=false cd custom-analyzer-tutorialLägg till content understanding-beroendet i dinpom.xml-fil i avsnittet
<dependencies>:<dependency> <groupId>com.azure</groupId> <artifactId>azure-ai-contentunderstanding</artifactId> <version>1.0.0</version> </dependency>Du kan också lägga till Azure Identity-biblioteket för Microsoft Entra-autentisering:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.14.2</version> </dependency>
Ställ in miljövariabler
Om du vill autentisera med Content Understanding-tjänsten anger du miljövariablerna med dina egna värden innan du kör exemplet:
-
CONTENTUNDERSTANDING_ENDPOINT– slutpunkten till din Content Understanding-resurs. -
CONTENTUNDERSTANDING_KEY– din API-nyckel för Content Understanding (valfritt om du använder 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"
Skapa klienten
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();
Skapa ett anpassat analysverktyg
I följande exempel skapas en anpassad dokumentanalys baserad på den fördefinierade dokumentanalysatorn. Den definierar fält med tre extraheringsmetoder: extract för literaltext, generate för AI-genererade sammanfattningar och classify för kategorisering.
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 + ")");
});
}
Ett exempel på utdata ser ut så här:
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)
Tips/Råd
Den här koden baseras på exemplet Create Analyzer på SDK-lagringsplatsen.
Du kan också skapa en klassificerare för att kategorisera dokument och använda dess resultat för att dirigera dokument till fördefinierade eller anpassade analysverktyg som du har skapat. Här är ett exempel på hur du skapar en anpassad analysator för klassificeringsarbetsflöden.
// 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());
}
Tips/Råd
Den här koden baseras på exemplet Skapa klassificerare för klassificeringsarbetsflöden.
Använda den anpassade analysatorn
När du har skapat analysatorn använder du den för att analysera ett dokument och extrahera de anpassade fälten. Ta bort analysatorn när du inte längre behöver den.
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.");
Ett exempel på utdata ser ut så här:
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.
Tips/Råd
Kolla in fler exempel på hur du kör analysverktyg i Java SDK-exempel.
Klientbibliotek | Exempel | SDK-källkod
Den här guiden visar hur du använder Content Understanding JavaScript SDK för att skapa en anpassad analysator som extraherar strukturerade data från ditt innehåll. Anpassade analysverktyg stöder innehållstyper för dokument, bild, ljud och video.
Förutsättningar
- En aktiv Azure-abonnemang. Om du inte har ett Azure-konto skapar du ett kostnadsfritt.
- En Microsoft Foundry-resurs som skapats i en region som stöds.
- Resursslutpunkten och API-nyckeln (finns under Nycklar och slutpunkt i Azure-portalen).
- Standardinställningar för modelldistribution som konfigurerats för resursen. Se Modeller och distributioner eller det här engångskonfigurationsskriptet för installationsinstruktioner.
- Node.js LTS-version.
Ställ in
Skapa ett nytt Node.js projekt:
mkdir custom-analyzer-tutorial cd custom-analyzer-tutorial npm init -yInstallera Content Understanding-klientbiblioteket:
npm install @azure/ai-content-understandingDu kan också installera Azure Identity-biblioteket för Microsoft Entra-autentisering:
npm install @azure/identity
Ställ in miljövariabler
Om du vill autentisera med Content Understanding-tjänsten anger du miljövariablerna med dina egna värden innan du kör exemplet:
-
CONTENTUNDERSTANDING_ENDPOINT– slutpunkten till din Content Understanding-resurs. -
CONTENTUNDERSTANDING_KEY– din API-nyckel för Content Understanding (valfritt om du använder 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"
Skapa klienten
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)
);
Skapa ett anpassat analysverktyg
I följande exempel skapas en anpassad dokumentanalys baserad på den fördefinierade dokumentanalysatorn. Den definierar fält med tre extraheringsmetoder: extract för literaltext, generate för AI-genererade sammanfattningar och classify för kategorisering.
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})`
);
}
}
Ett exempel på utdata ser ut så här:
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)
Tips/Råd
Den här koden baseras på exemplet create Analyzer på SDK-lagringsplatsen.
Du kan också skapa en klassificerare för att kategorisera dokument och använda dess resultat för att dirigera dokument till fördefinierade eller anpassade analysverktyg som du har skapat. Här är ett exempel på hur du skapar en anpassad analysator för klassificeringsarbetsflöden.
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}`
);
}
Tips/Råd
Den här koden baseras på exemplet skapa klassificerare för klassificeringsarbetsflöden.
Använda den anpassade analysatorn
När du har skapat analysatorn använder du den för att analysera ett dokument och extrahera de anpassade fälten. Ta bort analysatorn när du inte längre behöver den.
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.`
);
Ett exempel på utdata ser ut så här:
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.
Tips/Råd
Kolla in fler exempel på hur du kör analysverktyg i JavaScript SDK-exempel.
Klientbibliotek | Exempel | SDK-källkod
Den här guiden visar hur du använder Content Understanding TypeScript SDK för att skapa en anpassad analysator som extraherar strukturerade data från ditt innehåll. Anpassade analysverktyg stöder innehållstyper för dokument, bild, ljud och video.
Förutsättningar
- En aktiv Azure-abonnemang. Om du inte har ett Azure-konto skapar du ett kostnadsfritt.
- En Microsoft Foundry-resurs som skapats i en region som stöds.
- Resursslutpunkten och API-nyckeln (finns under Nycklar och slutpunkt i Azure-portalen).
- Standardinställningar för modelldistribution som konfigurerats för resursen. Se Modeller och distributioner eller det här engångskonfigurationsskriptet för installationsinstruktioner.
- Node.js LTS-version.
- TypeScript 5.x eller senare.
Ställ in
Skapa ett nytt Node.js projekt:
mkdir custom-analyzer-tutorial cd custom-analyzer-tutorial npm init -yInstallera TypeScript och Content Understanding-klientbiblioteket:
npm install typescript ts-node @azure/ai-content-understandingDu kan också installera Azure Identity-biblioteket för Microsoft Entra-autentisering:
npm install @azure/identity
Ställ in miljövariabler
Om du vill autentisera med Content Understanding-tjänsten anger du miljövariablerna med dina egna värden innan du kör exemplet:
-
CONTENTUNDERSTANDING_ENDPOINT– slutpunkten till din Content Understanding-resurs. -
CONTENTUNDERSTANDING_KEY– din API-nyckel för Content Understanding (valfritt om du använder 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"
Skapa klienten
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)
);
Skapa ett anpassat analysverktyg
I följande exempel skapas en anpassad dokumentanalys baserad på den fördefinierade dokumentanalysatorn. Den definierar fält med tre extraheringsmetoder: extract för literaltext, generate för AI-genererade sammanfattningar och classify för kategorisering.
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})`
);
}
}
Ett exempel på utdata ser ut så här:
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)
Tips/Råd
Den här koden baseras på exemplet create Analyzer på SDK-lagringsplatsen.
Du kan också skapa en klassificerare för att kategorisera dokument och använda dess resultat för att dirigera dokument till fördefinierade eller anpassade analysverktyg som du har skapat. Här är ett exempel på hur du skapar en anpassad analysator för klassificeringsarbetsflöden.
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}`
);
}
Tips/Råd
Den här koden baseras på exemplet skapa klassificerare för klassificeringsarbetsflöden.
Använda den anpassade analysatorn
När du har skapat analysatorn använder du den för att analysera ett dokument och extrahera de anpassade fälten. Ta bort analysatorn när du inte längre behöver den.
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.`
);
Ett exempel på utdata ser ut så här:
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.
Tips/Råd
Kolla in fler exempel på hur du kör analysverktyg i TypeScript SDK-exempel.
Relaterat innehåll
- Granska kodexempel: visuell dokumentsökning.
- Granska kodexemplet: analysmallar.
- Utforska fler Python SDK-exempel
- Utforska fler .NET SDK-exempel
- Utforska fler Java SDK-exempel
- Utforska fler JavaScript SDK-exempel
- Utforska fler TypeScript SDK-exempel
- Prova att bearbeta dokumentinnehållet med hjälp av Content Understanding i Foundry.