Azure DocumentIntelligence (früher FormRecognizer) REST-Clientbibliothek für JavaScript – Version 1.0.0-beta.2

Extrahiert Inhalte, Layout und strukturierte Daten aus Dokumenten.

Verlassen Sie sich bei der Verwendung dieser Bibliothek in hohem Maße auf unsere REST-Clientdokumentation .

HINWEIS: Formularerkennung wurde in Document Intelligence umbenannt. Überprüfen Sie den Migrationsleitfaden von @azure/ai-form-recognizer zu @azure-rest/ai-document-intelligence.

Wichtige Links:

Diese Version der Clientbibliothek verwendet standardmäßig die "2024-02-29-preview" Version des Diensts.

Diese Tabelle gibt Aufschluss über die Beziehung zwischen SDK-Versionen und unterstützten API-Versionen des Diensts:

SDK-Version Unterstützte API-Version des Diensts
1.0.0-beta.2 2024-02-29-preview
1.0.0-beta.1 31.10.2023

Verlassen Sie sich auf die ältere @azure/ai-form-recognizer Bibliothek über die älteren Dienst-API-Versionen für eingestellte Modelle, z. B "prebuilt-businessCard" . und "prebuilt-document". Weitere Informationen finden Sie unter Changelog.

In der folgenden Tabelle wird die Beziehung zwischen den einzelnen Clients und den unterstützten API-Versionen beschrieben:

Dienst-API-Version Unterstützte Clients Paket
2024-02-29-preview DocumentIntelligenceClient @azure-rest/ai-document-intelligence, Version 1.0.0-beta.2
31.10.2023 DocumentIntelligenceClient @azure-rest/ai-document-intelligence, Version 1.0.0-beta.1
2023-07-31 DocumentAnalysisClient und DocumentModelAdministrationClient @azure/ai-form-recognizer, Version ^5.0.0
01.08.2022 DocumentAnalysisClient und DocumentModelAdministrationClient @azure/ai-form-recognizer, Version ^4.0.0

Erste Schritte

Die derzeitig unterstützten Umgebungen

  • LTS-Versionen von Node.js

Voraussetzungen

Installieren Sie das Paket @azure-rest/ai-document-intelligence.

Installieren Sie die REST-Clientbibliothek des Azure DocumentIntelligence(formerlyFormRecognizer) REST-Clients für JavaScript mit npm:

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

Erstellen und Authentifizieren eines DocumentIntelligenceClient

Um Azure Active Directory-Tokenanmeldeinformationen (AAD) zu verwenden, geben Sie eine instance des gewünschten Anmeldeinformationstyps an, der aus der @azure-/Identitätsbibliothek abgerufen wird.

Um sich mit AAD zu authentifizieren, müssen Sie zuerst npm installieren @azure/identity

Nach der Einrichtung können Sie auswählen, von @azure/identity welchem Typ von Anmeldeinformationen sie verwendet werden sollen. Als Beispiel kann DefaultAzureCredential verwendet werden, um den Client zu authentifizieren.

Legen Sie die Werte der Client-ID, Mandanten-ID und geheimen Clientschlüssel der AAD-Anwendung als Umgebungsvariablen fest: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET

Verwenden von Tokenanmeldeinformationen

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

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

Verwenden eines API-SCHLÜSSELs

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

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

Dokumentmodelle

Analysieren des vordefinierten Layouts (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" },
  });

Analysieren des vordefinierten Layouts (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" },
  });

Fahren Sie mit der Erstellung des Pollers aus der ersten Antwort fort.

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 des Markdowninhalts

Unterstützt die Ausgabe mit markdown-Inhaltsformat zusammen mit dem Standard-Nur-Text. Derzeit wird dies nur für "vordefiniertes Layout" unterstützt. Das Markdowninhaltsformat wird als freundliches Format für die LLM-Nutzung in einem Chat- oder Automatisierungsszenario betrachtet.

Der Dienst folgt der GFM-Spezifikation (GitHub Flavored Markdown) für das Markdownformat. Außerdem wird eine neue contentFormat-Eigenschaft mit dem Wert "text" oder "markdown" eingeführt, um das Ergebnisinhaltsformat anzugeben.

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

Abfragefelder

Wenn dieses Featureflag angegeben wird, extrahiert der Dienst die Werte der Felder, die über den Abfrageparameter queryFields angegeben sind, weiter, um alle vorhandenen Felder zu ergänzen, die vom Modell als Fallback definiert sind.

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

Aufteilungsoptionen

In den vorherigen API-Versionen, die von der älteren @azure/ai-form-recognizer Bibliothek unterstützt wurden, hat der Dokumentaufteilungs- und Klassifizierungsvorgang ("/documentClassifiers/{classifierId}:analyze") immer versucht, die Eingabedatei in mehrere Dokumente aufzuteilen.

Um eine breitere Gruppe von Szenarien zu ermöglichen, führt der Dienst einen "split"-Abfrageparameter mit der neuen Dienstversion "2023-10-31-preview" ein. Die folgenden Werte werden unterstützt:

  • split: "auto"

    Lassen Sie den Dienst bestimmen, wo geteilt werden soll.

  • split: "none"

    Die gesamte Datei wird als einzelnes Dokument behandelt. Es wird keine Aufteilung durchgeführt.

  • split: "perPage"

    Jede Seite wird als separates Dokument behandelt. Jede leere Seite wird als eigenes Dokument beibehalten.

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

Informationen abrufen

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

Auflisten von Dokumentmodellen

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

Problembehandlung

Protokollierung

Die Aktivierung der Protokollierung kann hilfreiche Informationen über Fehler aufdecken. Um ein Protokoll von HTTP-Anforderungen und -Antworten anzuzeigen, legen Sie die Umgebungsvariable AZURE_LOG_LEVEL auf info fest. Alternativ kann die Protokollierung zur Laufzeit aktiviert werden, indem Sie setLogLevel in @azure/logger aufrufen:

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

setLogLevel("info");

Ausführlichere Anweisungen zum Aktivieren von Protokollen finden Sie in der Paketdokumentation zu @azure/logger.