Libreria client REST di Azure DocumentIntelligence (in precedenza FormRecognizer) per JavaScript - versione 1.0.0-beta.2

Estrae contenuto, layout e dati strutturati dai documenti.

Per usare questa libreria, fare affidamento principalmente sulla documentazione del client REST

NOTA: Riconoscimento modulo è stato rinominato in Document Intelligence. Consultare la Guida alla migrazione da @azure/ai-form-recognizer a @azure-rest/ai-document-intelligence.

Collegamenti principali:

Per impostazione predefinita, questa versione della libreria client è la "2024-02-29-preview" versione del servizio.

Questa tabella illustra la relazione tra le versioni dell'SDK e le versioni API supportate del servizio:

Versione dell'SDK Versione api supportata del servizio
1.0.0-beta.2 Anteprima 2024-02-29
1.0.0-beta.1 Anteprima 2023-10-31

Usare la libreria precedente @azure/ai-form-recognizer tramite le versioni precedenti dell'API del servizio per i modelli ritirati, ad esempio "prebuilt-businessCard" e "prebuilt-document". Per altre informazioni, vedere Log delle modifiche.

La tabella seguente descrive la relazione tra ogni client e le relative versioni API supportate:

Versione dell'API del servizio Client supportati Pacchetto
Anteprima 2024-02-29 DocumentIntelligenceClient @azure-rest/ai-document-intelligence Versione 1.0.0-beta.2
Anteprima 2023-10-31 DocumentIntelligenceClient @azure-rest/ai-document-intelligence Versione 1.0.0-beta.1
2023-07-31 DocumentAnalysisClient e DocumentModelAdministrationClient @azure/ai-form-recognizer Versione ^5.0.0
2022-08-01 DocumentAnalysisClient e DocumentModelAdministrationClient @azure/ai-form-recognizer Versione ^4.0.0

Introduzione

Ambienti attualmente supportati

  • Versioni LTS di Node.js

Prerequisiti

Installare il pacchetto @azure-rest/ai-document-intelligence

Installare la libreria client REST client REST DocumentIntelligence(in precedenzaFormRecognizer) per JavaScript con npm:

npm install @azure-rest/ai-document-intelligence

Creare e autenticare un oggetto DocumentIntelligenceClient

Per usare una credenziale del token di Azure Active Directory (AAD), specificare un'istanza del tipo di credenziale desiderato ottenuto dalla libreria di @azure/identità .

Per eseguire l'autenticazione con AAD, è prima necessario npm installare @azure/identity

Dopo l'installazione, è possibile scegliere il tipo di credenziale da @azure/identity usare. Ad esempio, DefaultAzureCredential può essere usato per autenticare il client.

Impostare i valori dell'ID client, dell'ID tenant e del segreto client dell'applicazione AAD come variabili di ambiente: AZURE_CLIENT_ID, AZURE_TENANT_ID AZURE_CLIENT_SECRET

Uso di credenziali dei token

import DocumentIntelligence from "@azure-rest/ai-document-intelligence";

const client = DocumentIntelligence(
  process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"],
  new DefaultAzureCredential()
);

Uso di una CHIAVE API

import DocumentIntelligence from "@azure-rest/ai-document-intelligence";

const client = DocumentIntelligence(process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"], {
  key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"],
});

Modelli di documento

Analizzare il layout predefinito (urlSource)

const initialResponse = await client
  .path("/documentModels/{modelId}:analyze", "prebuilt-layout")
  .post({
    contentType: "application/json",
    body: {
      urlSource:
        "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/6704eff082aaaf2d97c1371a28461f512f8d748a/sdk/formrecognizer/ai-form-recognizer/assets/forms/Invoice_1.pdf",
    },
    queryParameters: { locale: "en-IN" },
  });

Analizzare il layout predefinito (base64Source)

import fs from "fs";
import path from "path";

const filePath = path.join(ASSET_PATH, "forms", "Invoice_1.pdf");
const base64Source = fs.readFileSync(filePath, { encoding: "base64" });
const initialResponse = await client
  .path("/documentModels/{modelId}:analyze", "prebuilt-layout")
  .post({
    contentType: "application/json",
    body: {
      base64Source,
    },
    queryParameters: { locale: "en-IN" },
  });

Continuare a creare il poller dalla risposta iniziale

import {
  getLongRunningPoller,
  AnalyzeResultOperationOutput,
  isUnexpected,
} from "@azure-rest/ai-document-intelligence";

if (isUnexpected(initialResponse)) {
  throw initialResponse.body.error;
}
const poller = await getLongRunningPoller(client, initialResponse);
const result = (await poller.pollUntilDone()).body as AnalyzeResultOperationOutput;
console.log(result);
// {
//   status: 'succeeded',
//   createdDateTime: '2023-11-10T13:31:31Z',
//   lastUpdatedDateTime: '2023-11-10T13:31:34Z',
//   analyzeResult: {
//     apiVersion: '2023-10-31-preview',
//     .
//     .
//     .
//     contentFormat: 'text'
//   }
// }

Formato del contenuto Markdown

Supporta l'output con il formato di contenuto Markdown insieme al testo normale predefinito. Per il momento, questo è supportato solo per "precompilt-layout". Il formato di contenuto Markdown viene considerato un formato più descrittivo per l'utilizzo di LLM in uno scenario di utilizzo di chat o automazione.

Il servizio segue la specifica GFM (GitHub Flavored Markdown) per il formato Markdown. Introduce anche una nuova proprietà contentFormat con valore "text" o "markdown" per indicare il formato del contenuto del risultato.

import DocumentIntelligence from "@azure-rest/ai-document-intelligence";
const client = DocumentIntelligence(process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"], {
  key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"],
});

const initialResponse = await client
  .path("/documentModels/{modelId}:analyze", "prebuilt-layout")
  .post({
    contentType: "application/json",
    body: {
      urlSource:
        "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/6704eff082aaaf2d97c1371a28461f512f8d748a/sdk/formrecognizer/ai-form-recognizer/assets/forms/Invoice_1.pdf",
    },
    queryParameters: { outputContentFormat: "markdown" }, // <-- new query parameter
  });

Campi query

Quando viene specificato questo flag di funzionalità, il servizio estrae ulteriormente i valori dei campi specificati tramite il parametro di query queryFields per integrare tutti i campi esistenti definiti dal modello come fallback.

await client.path("/documentModels/{modelId}:analyze", "prebuilt-layout").post({
  contentType: "application/json",
  body: { urlSource: "..." },
  queryParameters: {
    features: ["queryFields"],
    queryFields: ["NumberOfGuests", "StoreNumber"],
  }, // <-- new query parameter
});

Opzioni di divisione

Nelle versioni precedenti dell'API supportate dalla raccolta precedente @azure/ai-form-recognizer , l'operazione di suddivisione e classificazione dei documenti ("/documentClassifiers/{classifierId}:analyze") ha sempre tentato di suddividere il file di input in più documenti.

Per abilitare un set più ampio di scenari, il servizio introduce un parametro di query "split" con la nuova versione del servizio "2023-10-31-preview". Sono supportati i valori seguenti:

  • split: "auto"

    Consentire al servizio di determinare dove suddividere.

  • split: "none"

    L'intero file viene considerato come un singolo documento. Non viene eseguita alcuna suddivisione.

  • split: "perPage"

    Ogni pagina viene considerata come un documento separato. Ogni pagina vuota viene mantenuta come documento.

#Build classificatori di documenti

import {
  DocumentClassifierBuildOperationDetailsOutput,
  getLongRunningPoller,
  isUnexpected,
} from "@azure-rest/ai-document-intelligence";

const containerSasUrl = (): string =>
  process.env["DOCUMENT_INTELLIGENCE_TRAINING_CONTAINER_SAS_URL"];
const initialResponse = await client.path("/documentClassifiers:build").post({
  body: {
    classifierId: `customClassifier${getRandomNumber()}`,
    description: "Custom classifier description",
    docTypes: {
      foo: {
        azureBlobSource: {
          containerUrl: containerSasUrl(),
        },
      },
      bar: {
        azureBlobSource: {
          containerUrl: containerSasUrl(),
        },
      },
    },
  },
});

if (isUnexpected(initialResponse)) {
  throw initialResponse.body.error;
}
const poller = await getLongRunningPoller(client, initialResponse);
const response = (await poller.pollUntilDone())
  .body as DocumentClassifierBuildOperationDetailsOutput;
console.log(response);
//  {
//    operationId: '31466834048_f3ee629e-73fb-48ab-993b-1d55d73ca460',
//    kind: 'documentClassifierBuild',
//    status: 'succeeded',
//    .
//    .
//    result: {
//      classifierId: 'customClassifier10978',
//      createdDateTime: '2023-11-09T12:45:56Z',
//      .
//      .
//      description: 'Custom classifier description'
//    },
//    apiVersion: '2023-10-31-preview'
//  }

Ottenere informazioni

const response = await client.path("/info").get();
if (isUnexpected(response)) {
  throw response.body.error;
}
console.log(response.body.customDocumentModels.limit);
// 20000

Elencare i modelli di documento

import { paginate } from "@azure-rest/ai-document-intelligence";
const response = await client.path("/documentModels").get();
if (isUnexpected(response)) {
  throw response.body.error;
}

const modelsInAccount: string[] = [];
for await (const model of paginate(client, response)) {
  console.log(model.modelId);
}

Risoluzione dei problemi

Registrazione

L'abilitazione della registrazione consente di individuare informazioni utili sugli errori. Per visualizzare un log di richieste e risposte HTTP, impostare la variabile di ambiente AZURE_LOG_LEVEL su info. In alternativa, la registrazione può essere abilitata in fase di esecuzione chiamando setLogLevel in @azure/logger:

const { setLogLevel } = require("@azure/logger");

setLogLevel("info");

Per istruzioni più dettagliate su come abilitare i log, è possibile esaminare la documentazione del pacchetto di @azure/logger.