Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Tartalomértés elemzői határozzák meg, hogyan dolgozhatók fel és nyerhetnek ki elemzéseket a tartalomból. Az összes tartalom egységes feldolgozási és kimeneti struktúráját biztosítják, így megbízható és kiszámítható eredményeket érhet el. Gyakori használati esetekben használhatja az előre összeállított elemzőket. Ez az útmutató bemutatja, hogyan szabhatja testre ezeket az elemzőket az igényeinek megfelelően.
Ez az útmutató bemutatja, hogyan hozhat létre olyan egyéni elemzőt a Content Understanding REST API használatával, amely strukturált adatokat nyer ki a tartalomból.
Előfeltételek
- Aktív Azure előfizetés. Ha nincs Azure fiókja, ingyenesen hozhat létre egyet.
-
Microsoft Foundry erőforrás egy támogatott régióban.
- A portál az Foundry> Foundry alatt listázza ezt azerőforrást.
- Alapértelmezett modelltelepítések beállítása a Content Understanding-erőforráshoz. Az alapértelmezések beállításával kapcsolatot hoz létre a Content Understanding-kérelmekhez használt Microsoft Foundry-modellekkel. Válasszon az alábbi módszerek közül:
Lépjen az Tartalomértés beállításai oldalára.
Válassza a + Erőforrás hozzáadása gombot a bal felső sarokban.
Válassza ki a használni kívánt Foundry-erőforrást, és válassza a Következő>mentés lehetőséget.
Győződjön meg arról, hogy a kötelező modellek automatikus üzembe helyezésének engedélyezése jelölőnégyzet be van jelölve, ha nincsenek alapértelmezett értékek. Ezzel a beállítással a Content Understanding Studio üzembe helyezhet egy standard modellt, egy minimodellt és egy beágyazási modellt az erőforráshoz. A különböző elemzők különböző modelleket igényelnek. Az aktuális lista a támogatott generatív modelleket tartalmazza.
- Fejlesztői környezetedhez telepítve van a cURL.
Elemzőséma definiálása
Egyéni elemző létrehozásához definiáljon egy mezős sémát, amely leírja a kinyerni kívánt strukturált adatokat. Az alábbi példában létrehoz egy elemzőt az előre összeállított dokumentumelemző alapján a nyugta feldolgozásához.
Hozzon létre egy JSON-fájlt receipt.json a következő tartalommal:
{
"description": "Sample receipt analyzer",
"baseAnalyzerId": "prebuilt-document",
"models": {
"completion": "gpt-5.2",
"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"
}
}
}
}
}
}
}
Ha különböző típusú dokumentumokat kell feldolgoznia, de csak a visszaigazolásokat szeretné kategorizálni és elemezni, hozzon létre egy elemzőt, amely először kategorizálja a dokumentumot. Ezután irányozza át a korábban létrehozott elemzőhöz az alábbi sémával.
Hozzon létre egy JSON-fájlt categorize.json a következő tartalommal:
{
"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-5.2"
},
"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.
}
Elemző létrehozása
PUT-kérés
Először hozzon létre egy nyugtaelemzőt, majd hozza létre a kategorizálási elemzőt.
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-válasz
A 201 Created válasz tartalmaz egy Operation-Location URL-címet tartalmazó fejlécet, amellyel nyomon követheti az aszinkron elemző létrehozási műveletének állapotát.
201 Created
Operation-Location: {endpoint}/contentunderstanding/analyzers/{analyzerId}/operations/{operationId}?api-version=2025-11-01
Amikor a művelet befejeződik, egy HTTP GET kérés a művelet helyének URL-címére visszaadja a "status": "succeeded" választ.
curl -i -X GET "{endpoint}/contentunderstanding/analyzers/{analyzerId}/operations/{operationId}?api-version=2025-11-01" \
-H "Ocp-Apim-Subscription-Key: {key}"
Fájl elemzése
A fájl elküldése
Most már használhatja a létrehozott egyéni elemzőt a fájlok feldolgozására és a sémában meghatározott mezők kinyerésére.
A cURL parancs futtatása előtt végezze el a következő módosításokat a HTTP-kérésen:
- Cserélje le a
{endpoint}és{key}címkéket az Azure Portal Foundry példányának végpontjára és kulcsértékére. - Cserélje le a
{analyzerId}elemet azzal az egyéni elemzőnévvel, amelyet acategorize.jsonfájlal hozott létre. - Cserélje le a
{fileUrl}az elemezni kívánt fájl nyilvánosan elérhető URL-címére, például egy Azure Storage Blob elérési útját közös hozzáférésű jogosultságkóddal (SAS), vagy a minta URL-címethttps://github.com/Azure-Samples/azure-ai-content-understanding-python/raw/refs/heads/main/data/receipt.png.
POST kérés
Ön által a categorize.json fájllal létrehozott egyéni elemzőt használja ez a példa a nyugta elemzéséhez.
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 válasz
A 202 Accepted válasz tartalmazza azt, {resultId} amellyel nyomon követheti az aszinkron művelet állapotát.
{
"id": {resultId},
"status": "Running",
"result": {
"analyzerId": {analyzerId},
"apiVersion": "2025-11-01",
"createdAt": "YYYY-MM-DDTHH:MM:SSZ",
"warnings": [],
"contents": []
}
}
Elemzési eredmény lekérése
Operation-Location Az elemzés eredményének lekéréséhez használja a POST válaszból kapott választ.
GET kérés
curl -i -X GET "{endpoint}/contentunderstanding/analyzerResults/{resultId}?api-version=2025-11-01" \
-H "Ocp-Apim-Subscription-Key: {key}"
GET válasz
A 200 OK válasz tartalmaz egy status mezőt, amely a művelet előrehaladását mutatja.
- A(z)
statusSucceededértékű, ha a művelet sikeresen befejeződik. - Ha az állapot vagy
runningnotStarted, hívja újra manuálisan az API-t, vagy használjon szkriptet. Várjon legalább egy másodpercet a kérések között.
Mintaválasz
{
"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
}
}
}
Client-kódtár | Samples | SDK forrás
Ez az útmutató bemutatja, hogyan használhatja a Content Understanding Python SDK-t egy olyan egyéni elemző létrehozásához, amely strukturált adatokat nyer ki a tartalomból. Az egyéni elemzők támogatják a dokumentum-, kép-, hang- és videotartalmakat.
Előfeltételek
- Aktív Azure előfizetés. Ha nincs Azure fiókja, ingyenesen hozhat létre egyet.
- Microsoft Foundry erőforrás egy támogatott régióban.
- Az erőforrásvégpont és az API-kulcs (a Azure portálon található Kulcsok és végpont alatt található).
- Az erőforráshoz konfigurált modelltelepítés alapértelmezései. A beállítási utasításokért tekintse meg a Modellek és üzemelő példányok vagy ezt az egyszeri konfigurációs szkriptet.
- Python 3,9 vagy újabb.
Beállítása
Telepítse a Content Understanding ügyfélkódtárat Python pip használatával:
pip install azure-ai-contentunderstandingHa szükséges, telepítse a Azure identitástárat Microsoft Entra hitelesítéshez:
pip install azure-identity
Környezeti változók beállítása
A Content Understanding szolgáltatással való hitelesítéshez állítsa be a környezeti változókat saját értékekkel a minta futtatása előtt:
-
CONTENTUNDERSTANDING_ENDPOINT- a Content Understanding-erőforrás végpontja. -
CONTENTUNDERSTANDING_KEY– a Content Understanding API-kulcs (nem kötelező Microsoft Entra ID DefaultAzureCredential használata esetén).
Windows
setx CONTENTUNDERSTANDING_ENDPOINT "your-endpoint"
setx CONTENTUNDERSTANDING_KEY "your-key"
Linux/macOS
export CONTENTUNDERSTANDING_ENDPOINT="your-endpoint"
export CONTENTUNDERSTANDING_KEY="your-key"
Az ügyfél létrehozása
Importálja a szükséges kódtárakat és modelleket, majd hozza létre az ügyfelet az erőforrásvégponttal és a hitelesítő adatokkal.
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),
)
Egyéni elemző létrehozása
Az alábbi példa egy egyéni dokumentumelemzőt hoz létre az előre összeállított dokumentumbázis-elemző alapján. A mezőket három kinyerési módszerrel definiálja: extract a literális szöveghez, generate az AI által létrehozott mezőkhöz vagy értelmezésekhez, valamint classify a kategorizáláshoz.
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-5.2",
"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})")
Egy példakimenet a következőképpen néz ki:
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)
Tipp
Ez a kód az SDK-adattár create-elemző mintáján alapul.
Igény szerint létrehozhat egy osztályozóelemzőt, amellyel kategorizálhatja a dokumentumokat, és az eredmények alapján előre összeállított vagy egyéni elemzőkhöz irányíthatja a dokumentumokat. Íme egy példa a besorolási munkafolyamatok egyéni elemzőjének létrehozására.
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-5.2"},
)
# 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}")
Tipp
Ez a kód az SDK-adattárban található create classifier-mintán alapul.
Az egyéni elemző használata
Az elemző létrehozása után használja a dokumentum elemzésére és az egyéni mezők kinyerésére. Törölje az elemzőt, ha már nincs rá szüksége.
# --- 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.")
Egy példakimenet a következőképpen néz ki:
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.
Tipp
További példák az elemzők SDK-mintákban való futtatására.
Client-kódtár | Samples | SDK forrás
Ez az útmutató bemutatja, hogyan használhatja a Content Understanding .NET SDK-t egy olyan egyéni elemző létrehozásához, amely strukturált adatokat nyer ki a tartalomból. Az egyéni elemzők támogatják a dokumentum-, kép-, hang- és videotartalmakat.
Előfeltételek
- Aktív Azure előfizetés. Ha nincs Azure fiókja, ingyenesen hozhat létre egyet.
- Microsoft Foundry erőforrás egy támogatott régióban.
- Az erőforrásvégpont és az API-kulcs (a Azure portálon található Kulcsok és végpont alatt található).
- Az erőforráshoz konfigurált modelltelepítés alapértelmezései. A beállítási utasításokért tekintse meg a Modellek és üzemelő példányok vagy ezt az egyszeri konfigurációs szkriptet.
- A
.NET .
Beállítása
Hozzon létre egy új .NET konzolalkalmazást:
dotnet new console -n CustomAnalyzerTutorial cd CustomAnalyzerTutorialTelepítse a Content Understanding ügyfélkönyvtárat .NET-hez.
dotnet add package Azure.AI.ContentUnderstandingHa szükséges, telepítse a Azure identitástárat Microsoft Entra hitelesítéshez:
dotnet add package Azure.Identity
Környezeti változók beállítása
A Content Understanding szolgáltatással való hitelesítéshez állítsa be a környezeti változókat saját értékekkel a minta futtatása előtt:
-
CONTENTUNDERSTANDING_ENDPOINT- a Content Understanding-erőforrás végpontja. -
CONTENTUNDERSTANDING_KEY– a Content Understanding API-kulcs (nem kötelező Microsoft Entra ID DefaultAzureCredential használata esetén).
Windows
setx CONTENTUNDERSTANDING_ENDPOINT "your-endpoint"
setx CONTENTUNDERSTANDING_KEY "your-key"
Linux/macOS
export CONTENTUNDERSTANDING_ENDPOINT="your-endpoint"
export CONTENTUNDERSTANDING_KEY="your-key"
Az ügyfél létrehozása
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)
);
Egyéni elemző létrehozása
Az alábbi példa egy egyéni dokumentumelemzőt hoz létre az előre összeállított dokumentumelemző alapján. A mezőket három kinyerési módszerrel definiálja: extract a literális szöveghez, generate az AI által létrehozott összegzésekhez és classify a kategorizáláshoz.
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-5.2";
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})");
}
}
Egy példakimenet a következőképpen néz ki:
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)
Tipp
Ez a kód Create Analyzer-mintán alapul az SDK-adattárban.
Igény szerint létrehozhat egy osztályozóelemzőt, amellyel kategorizálhatja a dokumentumokat, és az eredmények alapján előre összeállított vagy egyéni elemzőkhöz irányíthatja a dokumentumokat. Íme egy példa a besorolási munkafolyamatok egyéni elemzőjének létrehozására.
// 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-5.2";
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}");
}
Tipp
Ez a kód a besorolási munkafolyamatok Create Classifier-mintán alapul.
Az egyéni elemző használata
Az elemző létrehozása után használja a dokumentum elemzésére és az egyéni mezők kinyerésére. Törölje az elemzőt, ha már nincs rá szüksége.
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.");
Egy példakimenet a következőképpen néz ki:
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.
Tipp
További példák az elemzők .NET SDK-mintákban való futtatására.
Client-kódtár | Samples | SDK forrás
Ez az útmutató bemutatja, hogyan használhatja a Content Understanding Java SDK-t egy olyan egyéni elemző létrehozásához, amely strukturált adatokat nyer ki a tartalomból. Az egyéni elemzők támogatják a dokumentum-, kép-, hang- és videotartalmakat.
Előfeltételek
- Aktív Azure előfizetés. Ha nincs Azure fiókja, ingyenesen hozhat létre egyet.
- Microsoft Foundry erőforrás egy támogatott régióban.
- Az erőforrásvégpont és az API-kulcs (a Azure portálon található Kulcsok és végpont alatt található).
- Az erőforráshoz konfigurált modelltelepítés alapértelmezései. A beállítási utasításokért tekintse meg a Modellek és üzemelő példányok vagy ezt az egyszeri konfigurációs szkriptet.
- Java Fejlesztői készlet (JDK) 8-es vagy újabb verziója.
- Apache Maven.
Beállítása
Hozzon létre egy új Maven-projektet:
mvn archetype:generate -DgroupId=com.example \ -DartifactId=custom-analyzer-tutorial \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DinteractiveMode=false cd custom-analyzer-tutorialAdja hozzá a Content Understanding függőséget a pom.xml fájlhoz a
<dependencies>szakaszban:<dependency> <groupId>com.azure</groupId> <artifactId>azure-ai-contentunderstanding</artifactId> <version>1.0.0</version> </dependency>Ha szükséges, adja hozzá a Azure identitástárat Microsoft Entra hitelesítéshez:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.14.2</version> </dependency>
Környezeti változók beállítása
A Content Understanding szolgáltatással való hitelesítéshez állítsa be a környezeti változókat saját értékekkel a minta futtatása előtt:
-
CONTENTUNDERSTANDING_ENDPOINT- a Content Understanding-erőforrás végpontja. -
CONTENTUNDERSTANDING_KEY– a Content Understanding API-kulcs (nem kötelező Microsoft Entra ID DefaultAzureCredential használata esetén).
Windows
setx CONTENTUNDERSTANDING_ENDPOINT "your-endpoint"
setx CONTENTUNDERSTANDING_KEY "your-key"
Linux/macOS
export CONTENTUNDERSTANDING_ENDPOINT="your-endpoint"
export CONTENTUNDERSTANDING_KEY="your-key"
Az ügyfél létrehozása
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();
Egyéni elemző létrehozása
Az alábbi példa egy egyéni dokumentumelemzőt hoz létre az előre összeállított dokumentumelemző alapján. A mezőket három kinyerési módszerrel definiálja: extract a literális szöveghez, generate az AI által létrehozott összegzésekhez és classify a kategorizáláshoz.
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-5.2");
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 + ")");
});
}
Egy példakimenet a következőképpen néz ki:
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)
Tipp
Ez a kód az SDK-adattár Create Analyzer-mintáján alapul.
Igény szerint létrehozhat egy osztályozóelemzőt, amellyel kategorizálhatja a dokumentumokat, és az eredmények alapján előre összeállított vagy egyéni elemzőkhöz irányíthatja a dokumentumokat. Íme egy példa a besorolási munkafolyamatok egyéni elemzőjének létrehozására.
// 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-5.2");
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());
}
Tipp
Ez a kód a besorolási munkafolyamatok A besorolási osztályozó mintáján alapul.
Az egyéni elemző használata
Az elemző létrehozása után használja a dokumentum elemzésére és az egyéni mezők kinyerésére. Törölje az elemzőt, ha már nincs rá szüksége.
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.");
Egy példakimenet a következőképpen néz ki:
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.
Tipp
További példák az elemzők Java SDK-mintákban való futtatására.
Client-kódtár | Samples | SDK forrás
Ez az útmutató bemutatja, hogyan hozhat létre olyan egyéni elemzőt, amely strukturált adatokat nyer ki a tartalomból a Content Understanding JavaScript SDK használatával. Az egyéni elemzők támogatják a dokumentum-, kép-, hang- és videotartalmakat.
Előfeltételek
- Aktív Azure előfizetés. Ha nincs Azure fiókja, ingyenesen hozhat létre egyet.
- Microsoft Foundry erőforrás egy támogatott régióban.
- Az erőforrásvégpont és az API-kulcs (a Azure portálon található Kulcsok és végpont alatt található).
- Az erőforráshoz konfigurált modelltelepítés alapértelmezései. A beállítási utasításokért tekintse meg a Modellek és üzemelő példányok vagy ezt az egyszeri konfigurációs szkriptet.
- Node.js LTS-verzió.
Beállítása
Hozzon létre egy új Node.js projektet:
mkdir custom-analyzer-tutorial cd custom-analyzer-tutorial npm init -yTelepítse a Content Understanding ügyfélkódtárat:
npm install @azure/ai-content-understandingHa szükséges, telepítse a Azure identitástárat Microsoft Entra hitelesítéshez:
npm install @azure/identity
Környezeti változók beállítása
A Content Understanding szolgáltatással való hitelesítéshez állítsa be a környezeti változókat saját értékekkel a minta futtatása előtt:
-
CONTENTUNDERSTANDING_ENDPOINT- a Content Understanding-erőforrás végpontja. -
CONTENTUNDERSTANDING_KEY– a Content Understanding API-kulcs (nem kötelező Microsoft Entra ID DefaultAzureCredential használata esetén).
Windows
setx CONTENTUNDERSTANDING_ENDPOINT "your-endpoint"
setx CONTENTUNDERSTANDING_KEY "your-key"
Linux/macOS
export CONTENTUNDERSTANDING_ENDPOINT="your-endpoint"
export CONTENTUNDERSTANDING_KEY="your-key"
Az ügyfél létrehozása
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)
);
Egyéni elemző létrehozása
Az alábbi példa egy egyéni dokumentumelemzőt hoz létre az előre összeállított dokumentumelemző alapján. A mezőket három kinyerési módszerrel definiálja: extract a literális szöveghez, generate az AI által létrehozott összegzésekhez és classify a kategorizáláshoz.
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-5.2",
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})`
);
}
}
Egy példakimenet a következőképpen néz ki:
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)
Tipp
Ez a kód az SDK-adattár create Analyzer-mintáján alapul.
Igény szerint létrehozhat egy osztályozóelemzőt, amellyel kategorizálhatja a dokumentumokat, és az eredmények alapján előre összeállított vagy egyéni elemzőkhöz irányíthatja a dokumentumokat. Íme egy példa a besorolási munkafolyamatok egyéni elemzőjének létrehozására.
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-5.2",
},
};
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}`
);
}
Tipp
Ez a kód a besorolási munkafolyamatok létrehozási osztályozó mintáján alapul.
Az egyéni elemző használata
Az elemző létrehozása után használja a dokumentum elemzésére és az egyéni mezők kinyerésére. Törölje az elemzőt, ha már nincs rá szüksége.
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.`
);
Egy példakimenet a következőképpen néz ki:
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.
Tipp
További elemzőfuttatási példák megtekintése a JavaScript SDK minták között.
Client-kódtár | Samples | SDK forrás
Ez az útmutató bemutatja, hogyan hozhat létre olyan egyéni elemzőt, amely strukturált adatokat nyer ki a tartalomból a Content Understanding TypeScript SDK használatával. Az egyéni elemzők támogatják a dokumentum-, kép-, hang- és videotartalmakat.
Előfeltételek
- Aktív Azure előfizetés. Ha nincs Azure fiókja, ingyenesen hozhat létre egyet.
- Microsoft Foundry erőforrás egy támogatott régióban.
- Az erőforrásvégpont és az API-kulcs (a Azure portálon található Kulcsok és végpont alatt található).
- Az erőforráshoz konfigurált modelltelepítés alapértelmezései. A beállítási utasításokért tekintse meg a Modellek és üzemelő példányok vagy ezt az egyszeri konfigurációs szkriptet.
- Node.js LTS-verzió.
- TypeScript 5.x vagy újabb.
Beállítása
Hozzon létre egy új Node.js projektet:
mkdir custom-analyzer-tutorial cd custom-analyzer-tutorial npm init -yTelepítse a TypeScriptet és a Content Understanding ügyfélkódtárat:
npm install typescript ts-node @azure/ai-content-understandingHa szükséges, telepítse a Azure identitástárat Microsoft Entra hitelesítéshez:
npm install @azure/identity
Környezeti változók beállítása
A Content Understanding szolgáltatással való hitelesítéshez állítsa be a környezeti változókat saját értékekkel a minta futtatása előtt:
-
CONTENTUNDERSTANDING_ENDPOINT- a Content Understanding-erőforrás végpontja. -
CONTENTUNDERSTANDING_KEY– a Content Understanding API-kulcs (nem kötelező Microsoft Entra ID DefaultAzureCredential használata esetén).
Windows
setx CONTENTUNDERSTANDING_ENDPOINT "your-endpoint"
setx CONTENTUNDERSTANDING_KEY "your-key"
Linux/macOS
export CONTENTUNDERSTANDING_ENDPOINT="your-endpoint"
export CONTENTUNDERSTANDING_KEY="your-key"
Az ügyfél létrehozása
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)
);
Egyéni elemző létrehozása
Az alábbi példa egy egyéni dokumentumelemzőt hoz létre az előre összeállított dokumentumelemző alapján. A mezőket három kinyerési módszerrel definiálja: extract a literális szöveghez, generate az AI által létrehozott összegzésekhez és classify a kategorizáláshoz.
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-5.2",
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})`
);
}
}
Egy példakimenet a következőképpen néz ki:
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)
Tipp
Ez a kód az SDK-adattár create Analyzer-mintáján alapul.
Igény szerint létrehozhat egy osztályozóelemzőt, amellyel kategorizálhatja a dokumentumokat, és az eredmények alapján előre összeállított vagy egyéni elemzőkhöz irányíthatja a dokumentumokat. Íme egy példa a besorolási munkafolyamatok egyéni elemzőjének létrehozására.
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-5.2",
},
} 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}`
);
}
Tipp
Ez a kód a besorolási munkafolyamatok létrehozási osztályozó mintáján alapul.
Az egyéni elemző használata
Az elemző létrehozása után használja a dokumentum elemzésére és az egyéni mezők kinyerésére. Törölje az elemzőt, ha már nincs rá szüksége.
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.`
);
Egy példakimenet a következőképpen néz ki:
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.
Tipp
További példák az elemzők TypeScript SDK-mintákban való futtatására.
Kapcsolódó tartalom
- Az elemző betanításának fejlesztése címkézett példákkal
- Kódminták áttekintése: vizual document search.
- Kódminta áttekintése: analyzer-sablonok.
- További Python SDK-minták
- További .NET SDK-minták
- További Java SDK-minták
- További JavaScript SDK-minták
- További TypeScript SDK-minták
- Próbálja meg feldolgozni a dokumentum tartalmát a Content Understanding in Foundry használatával.