Partager via


Bibliothèque de client REST Azure DocumentIntelligence (anciennement FormRecognizer) pour JavaScript - version 1.0.0-beta.2

Extrait le contenu, la disposition et les données structurées des documents.

S’il vous plaît s’appuyer largement sur nos documents clients REST pour utiliser cette bibliothèque

REMARQUE : Form Recognizer a été renommé Document Intelligence. Veuillez case activée le Guide de migration de @azure/ai-form-recognizer à @azure-rest/ai-document-intelligence.

Liens clés :

Cette version de la bibliothèque cliente utilise par défaut la "2024-02-29-preview" version du service.

Ce tableau montre la relation entre les versions du kit de développement logiciel (SDK) et les versions d’API prises en charge du service :

Version du SDK Version d’API prise en charge du service
1.0.0-beta.2 2024-02-29-preview
1.0.0-beta.1 2023-10-31-preview

Appuyez-vous sur l’ancienne @azure/ai-form-recognizer bibliothèque via les anciennes versions de l’API de service pour les modèles mis hors service, tels que "prebuilt-businessCard" et "prebuilt-document". Pour plus d’informations, consultez Journal des modifications.

Le tableau ci-dessous décrit la relation entre chaque client et ses versions d’API prises en charge :

Version de l’API de service Clients pris en charge Paquet
2024-02-29-preview DocumentIntelligenceClient @azure-rest/ai-document-intelligence version 1.0.0-beta.2
2023-10-31-preview DocumentIntelligenceClient @azure-rest/ai-document-intelligence version 1.0.0-beta.1
2023-07-31 DocumentAnalysisClient et DocumentModelAdministrationClient @azure/ai-form-recognizer version ^5.0.0
2022-08-01 DocumentAnalysisClient et DocumentModelAdministrationClient @azure/ai-form-recognizer version ^4.0.0

Prise en main

Environnements actuellement pris en charge

  • Versions LTS de Node.js

Prérequis

Installez le package @azure-rest/ai-document-intelligence

Installez la bibliothèque de client REST du client REST Azure DocumentIntelligence(anciennementFormRecognizer) pour JavaScript avec npm:

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

Créez et authentifiez unDocumentIntelligenceClient

Pour utiliser des informations d’identification de jeton Azure Active Directory (AAD), fournissez une instance du type d’informations d’identification souhaité obtenu à partir de la bibliothèque @azure/identité.

Pour vous authentifier auprès d’AAD, vous devez d’abord npm installer @azure/identity

Après l’installation, vous pouvez choisir le type d’informations d’identification@azure/identity à utiliser. Par exemple, DefaultAzureCredential peut être utilisé pour authentifier le client.

Définissez les valeurs de l’ID client, de l’ID de locataire et de la clé secrète client de l’application AAD en tant que variables d’environnement : AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET

Utilisation d’informations d’identification de jeton

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

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

Utilisation d’une clé API

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

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

Modèles de document

Analyser la disposition prédéfinie (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" },
  });

Analyser la disposition prédéfinie (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" },
  });

Continuer à créer l’polleur à partir de la réponse initiale

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'
//   }
// }

Format de contenu Markdown

Prend en charge la sortie avec le format de contenu Markdown avec le texte brut par défaut. Pour l’instant, cette option est uniquement prise en charge pour la « disposition prédéfinie ». Le format de contenu Markdown est considéré comme un format plus convivial pour la consommation LLM dans un scénario d’utilisation de conversation ou d’automatisation.

Le service suit la spécification GFM (GitHub Flavored Markdown) pour le format Markdown. Introduit également une nouvelle propriété contentFormat avec la valeur « text » ou « markdown » pour indiquer le format de contenu du résultat.

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
  });

Champs de requête

Lorsque cet indicateur de fonctionnalité est spécifié, le service extrait davantage les valeurs des champs spécifiés via le paramètre de requête queryFields pour compléter tous les champs existants définis par le modèle comme secours.

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

Options de fractionnement

Dans les versions précédentes de l’API prises en charge par l’ancienne @azure/ai-form-recognizer bibliothèque, l’opération de division et de classification des documents ("/documentClassifiers/{classifierId}:analyze") a toujours essayé de fractionner le fichier d’entrée en plusieurs documents.

Pour activer un ensemble plus large de scénarios, le service introduit un paramètre de requête « fractionné » avec la nouvelle version du service « 2023-10-31-preview ». Les valeurs suivantes sont admises :

  • split: "auto"

    Laissez le service déterminer où se fractionner.

  • split: "none"

    Le fichier entier est traité comme un seul document. Aucun fractionnement n’est effectué.

  • split: "perPage"

    Chaque page est traitée comme un document distinct. Chaque page vide est conservée comme son propre document.

Classifieurs de documents #Build

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'
//  }

Obtenir des informations

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

Répertorier les modèles de document

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);
}

Résolution des problèmes

Journalisation

L’activation de la journalisation peut vous aider à mieux comprendre les échecs. Pour avoir un journal des requêtes et réponses HTTP, définissez la variable d’environnement AZURE_LOG_LEVEL sur info. Vous pouvez également activer la journalisation au moment de l’exécution en appelant setLogLevel dans @azure/logger :

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

setLogLevel("info");

Pour obtenir des instructions plus détaillées sur l’activation des journaux, consultez les documents relatifs au package @azure/logger.