Guia de início rápido: Noções básicas sobre APIs REST de conteúdo do Azure AI
Comece a usar a versão de visualização mais recente da API REST de Compreensão de Conteúdo do Azure AI (2024-12-01-preview).
O Entendimento de Conteúdo do Azure AI é um novo Serviço de IA do Azure baseado em IA generativa que analisa arquivos de qualquer modalidade (documentos, imagens, vídeos e áudio) e extrai saída estruturada em formatos de campo definidos pelo usuário.
Integre o serviço de Compreensão de Conteúdo em seus fluxos de trabalho e aplicativos facilmente chamando nossas APIs REST.
Este guia de início rápido orienta você pelo uso da API REST de Compreensão de Conteúdo para criar um analisador personalizado e extrair conteúdo e campos de sua entrada.
Pré-requisitos
Para começar, você precisa de uma assinatura ativa do Azure. Se não tiver uma conta do Azure, pode criar uma subscrição gratuita.
Depois de ter sua assinatura do Azure, crie um recurso dos Serviços de IA do Azure no portal do Azure. Este recurso multisserviço permite o acesso a vários serviços de IA do Azure com um único conjunto de credenciais.
Este recurso está listado em Serviços de IA do Azure → Serviços de IA do Azure no portal.
Importante
O Azure fornece mais de um tipo de recurso chamado Serviços de IA do Azure. Certifique-se de selecionar o listado em Serviços de IA do Azure → Serviços de IA do Azure, conforme descrito na imagem a seguir. Para obter mais informações, consulte Criar um recurso dos Serviços de IA do Azure.
Neste início rápido, usamos a ferramenta de linha de comando cURL. Se ele não estiver instalado, você pode baixar uma versão para seu ambiente de desenvolvimento:
Criar um analisador personalizado
Para criar um analisador personalizado, você precisa definir um esquema de campo que descreva os dados estruturados que você deseja extrair. No exemplo a seguir, definimos um esquema para extrair informações básicas de um documento de fatura.
Primeiro, crie um arquivo JSON nomeado request_body.json
com o seguinte conteúdo:
{
"description": "Sample invoice analyzer",
"scenario": "document",
"config": {
"returnDetails": true
},
"fieldSchema": {
"fields": {
"VendorName": {
"type": "string",
"method": "extract",
"description": "Vendor issuing the invoice"
},
"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"
}
}
}
}
}
}
}
Antes de executar os seguintes cURL
comandos, faça as seguintes alterações na solicitação HTTP:
- Substitua
{endpoint}
e{key}
pelos valores de ponto de extremidade e chave da sua instância dos Serviços de IA do Azure do portal do Azure. - Substitua
{analyzerId}
pelo nome do novo analisador e crie, comomyInvoice
.
Pedido PUT
curl -i -X PUT "{endpoint}/contentunderstanding/analyzers/{analyzerId}?api-version=2024-12-01-preview" \
-H "Ocp-Apim-Subscription-Key: {key}" \
-H "Content-Type: application/json" \
-d @request_body.json
Resposta PUT
A resposta 201 (Created
) inclui um Operation-Location
cabeçalho contendo uma URL que você pode usar para controlar o status dessa operação de criação assíncrona.
201 Created
Operation-Location: {endpoint}/contentunderstanding/analyzers/{analyzerId}/operations/{operationId}?api-version=2024-12-01-preview
Após a conclusão, a execução de um HTTP GET na URL retorna "status": "succeeded"
.
curl -i -X GET "{endpoint}/contentunderstanding/analyzers/{analyzerId}/operations/{operationId}?api-version=2024-12-01-preview" \
-H "Ocp-Apim-Subscription-Key: {key}"
Analisar um ficheiro
Você pode analisar arquivos usando o analisador personalizado criado para extrair os campos definidos no esquema.
Antes de executar o comando cURL, faça as seguintes alterações na solicitação HTTP:
- Substitua
{endpoint}
e{key}
pelos valores de ponto de extremidade e chave da sua instância dos Serviços de IA do Azure do portal do Azure. - Substitua
{analyzerId}
pelo nome do analisador personalizado criado anteriormente. - Substitua
{fileUrl}
por uma URL acessível publicamente do arquivo a ser analisado, como um caminho para um Blob de Armazenamento do Azure com uma assinatura de acesso compartilhado (SAS) ou a URLhttps://github.com/Azure-Samples/cognitive-services-REST-api-samples/raw/master/curl/form-recognizer/rest-api/invoice.pdf
de exemplo.
Pedido POST
curl -i -X POST "{endpoint}/contentunderstanding/analyzers/{analyzerId}:analyze?api-version=2024-12-01-preview" \
-H "Ocp-Apim-Subscription-Key: {key}" \
-H "Content-Type: application/json" \
-d "{\"url\":\"{fileUrl}\"}"
Resposta POST
A resposta 202 (Accepted
) inclui um Operation-Location
cabeçalho contendo uma URL que você pode usar para controlar o status dessa operação de análise assíncrona.
202 Accepted
Operation-Location: {endpoint}/contentunderstanding/analyzers/{analyzerId}/results/{resultId}?api-version=2024-12-01-preview
Obter resultado da análise
Use o resultId
Operation-Location
cabeçalho do cabeçalho retornado pela resposta anterior POST
e recupere o resultado da análise.
- Substitua
{endpoint}
e{key}
pelos valores de ponto de extremidade e chave da sua instância dos Serviços de IA do Azure do portal do Azure. - Substitua
{analyzerId}
pelo nome do analisador personalizado criado anteriormente. - Substitua
{resultId}
resultId
pelo retornado daPOST
solicitação.
Pedido GET
curl -i -X GET "{endpoint}/contentunderstanding/analyzers/{analyzerId}/results/{resultId}?api-version=2024-12-01-preview" \
-H "Ocp-Apim-Subscription-Key: {key}"
OBTER resposta
A resposta JSON 200 (OK
) inclui um status
campo que indica o status da operação. Se a operação não estiver concluída, o valor de status
é running
ou notStarted
. Nesses casos, você deve chamar a API novamente, manualmente ou por meio de um script. Aguarde um intervalo de um segundo ou mais entre as chamadas.
Resposta da amostra
{
"id": "bcf8c7c7-03ab-4204-b22c-2b34203ef5db",
"status": "Succeeded",
"result": {
"analyzerId": "sample_invoice_analyzer",
"apiVersion": "2024-12-01-preview",
"createdAt": "2024-11-13T07:15:46Z",
"warnings": [],
"contents": [
{
"markdown": "CONTOSO LTD.\n\n\n# INVOICE\n\nContoso Headquarters...",
"fields": {
"VendorName": {
"type": "string",
"valueString": "CONTOSO LTD.",
"spans": [ { "offset": 0, "length": 12 } ],
"confidence": 0.941,
"source": "D(1,0.5729,0.6582,2.3353,0.6582,2.3353,0.8957,0.5729,0.8957)"
},
"Items": {
"type": "array",
"valueArray": [
{
"type": "object",
"valueObject": {
"Description": {
"type": "string",
"valueString": "Consulting Services",
"spans": [ { "offset": 909, "length": 19 } ],
"confidence": 0.971,
"source": "D(1,2.3264,5.673,3.6413,5.673,3.6413,5.8402,2.3264,5.8402)"
},
"Amount": {
"type": "number",
"valueNumber": 60,
"spans": [ { "offset": 995, "length": 6 } ],
"confidence": 0.989,
"source": "D(1,7.4507,5.6684,7.9245,5.6684,7.9245,5.8323,7.4507,5.8323)"
}
}
}, ...
]
}
},
"kind": "document",
"startPageNumber": 1,
"endPageNumber": 1,
"unit": "inch",
"pages": [
{
"pageNumber": 1,
"angle": -0.0039,
"width": 8.5,
"height": 11,
"spans": [ { "offset": 0, "length": 1650 } ],
"words": [
{
"content": "CONTOSO",
"span": { "offset": 0, "length": 7 },
"confidence": 0.997,
"source": "D(1,0.5739,0.6582,1.7446,0.6595,1.7434,0.8952,0.5729,0.8915)"
}, ...
],
"lines": [
{
"content": "CONTOSO LTD.",
"source": "D(1,0.5734,0.6563,2.335,0.6601,2.3345,0.8933,0.5729,0.8895)",
"span": { "offset": 0, "length": 12 }
}, ...
]
}
],
"paragraphs": [
{
"content": "CONTOSO LTD.",
"source": "D(1,0.5734,0.6563,2.335,0.6601,2.3345,0.8933,0.5729,0.8895)",
"span": { "offset": 0, "length": 12 }
}, ...
],
"sections": [
{
"span": { "offset": 0, "length": 1649 },
"elements": [ "/sections/1", "/sections/2" ]
},
{
"span": { "offset": 0, "length": 12 },
"elements": [ "/paragraphs/0" ]
}, ...
],
"tables": [
{
"rowCount": 2,
"columnCount": 6,
"cells": [
{
"kind": "columnHeader",
"rowIndex": 0,
"columnIndex": 0,
"rowSpan": 1,
"columnSpan": 1,
"content": "SALESPERSON",
"source": "D(1,0.5389,4.5514,1.7505,4.5514,1.7505,4.8364,0.5389,4.8364)",
"span": { "offset": 512, "length": 11 },
"elements": [ "/paragraphs/19" ]
}, ...
],
"source": "D(1,0.4885,4.5543,8.0163,4.5539,8.015,5.1207,0.4879,5.1209)",
"span": { "offset": 495, "length": 228 }
}, ...
]
}
]
}
}