Share via


Biblioteca cliente REST de Azure DocumentIntelligence (anteriormente FormRecognizer) para JavaScript: versión 1.0.0-beta.2

Extrae contenido, diseño y datos estructurados de documentos.

Confíe en gran medida en nuestros documentos de cliente REST para usar esta biblioteca.

NOTA: Form Recognizer se ha cambiado el nombre a Document Intelligence. Consulte la Guía de migración de @azure/ai-form-recognizer a @azure-rest/ai-document-intelligence.

Vínculos principales:

Esta versión de la biblioteca cliente tiene como valor predeterminado la "2024-02-29-preview" versión del servicio.

En esta tabla se muestra la relación entre las versiones del SDK y las versiones de la API admitidas del servicio:

Versión del SDK Versión de la API admitidas del servicio
1.0.0-beta.2 2024-02-29-preview
1.0.0-beta.1 2023-10-31-preview

Confíe en la biblioteca anterior @azure/ai-form-recognizer a través de las versiones anteriores de la API de servicio para los modelos retirados, como "prebuilt-businessCard" y "prebuilt-document". Para obtener más información, consulte Registro de cambios.

En la tabla siguiente se describe la relación de cada cliente y sus versiones de API admitidas:

Versión de la API de servicio Clientes compatibles Paquete
2024-02-29-preview DocumentIntelligenceClient @azure-rest/ai-document-intelligence versión 1.0.0-beta.2
2023-10-31-preview DocumentIntelligenceClient @azure-rest/ai-document-intelligence versión 1.0.0-beta.1
2023-07-31 DocumentAnalysisClient y DocumentModelAdministrationClient @azure/ai-form-recognizer versión ^5.0.0
2022-08-01 DocumentAnalysisClient y DocumentModelAdministrationClient @azure/ai-form-recognizer versión ^4.0.0

Introducción

Entornos admitidos actualmente

  • Versiones de LTS de Node.js

Requisitos previos

Instalar el paquete @azure-rest/ai-document-intelligence

Instale la biblioteca cliente REST rest DocumentIntelligence(formerlyFormRecognizer) de Azure DocumentIntelligence para JavaScript con npm:

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

Crear y autenticar una DocumentIntelligenceClient

Para usar una credencial de token de Azure Active Directory (AAD), proporcione una instancia del tipo de credencial deseado obtenido de la biblioteca de @azure/identity .

Para autenticarse con AAD, primero npm debe instalar @azure/identity

Después de la instalación, puede elegir el tipo de credencial de @azure/identity que se va a usar. Por ejemplo, Se puede usar DefaultAzureCredential para autenticar el cliente.

Establezca los valores del identificador de cliente, el identificador de inquilino y el secreto de cliente de la aplicación de AAD como variables de entorno: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET

Uso de una credencial de token

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

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

Uso de una CLAVE de API

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

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

Modelos de documentos

Análisis del diseño precompilado (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" },
  });

Análisis del diseño precompilado (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" },
  });

Continuar creando el sondeo a partir de la respuesta inicial

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 de contenido de Markdown

Admite la salida con formato de contenido de Markdown junto con el texto sin formato predeterminado. Por ahora, esto solo se admite para "diseño precompilado". El formato de contenido de Markdown se considera un formato más descriptivo para el consumo de LLM en un escenario de uso de chat o automatización.

El servicio sigue la especificación GFM (GitHub Flavored Markdown) para el formato Markdown. También presenta una nueva propiedad contentFormat con el valor "text" o "markdown" para indicar el formato de contenido del resultado.

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

Campos de consulta

Cuando se especifica esta marca de característica, el servicio extraerá aún más los valores de los campos especificados a través del parámetro de consulta queryFields para complementar los campos existentes definidos por el modelo como reserva.

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

Opciones de división

En las versiones anteriores de la API compatibles con la biblioteca anterior @azure/ai-form-recognizer , la operación de división y clasificación de documentos ("/documentClassifiers/{classifierId}:analyze") siempre intentó dividir el archivo de entrada en varios documentos.

Para habilitar un conjunto más amplio de escenarios, el servicio presenta un parámetro de consulta "dividido" con la nueva versión del servicio "2023-10-31-preview". Se admiten los valores siguientes:

  • split: "auto"

    Deje que el servicio determine dónde dividir.

  • split: "none"

    Todo el archivo se trata como un único documento. No se realiza ninguna división.

  • split: "perPage"

    Cada página se trata como un documento independiente. Cada página vacía se mantiene como su propio documento.

Clasificadores de documentos #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'
//  }

Obtener información

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

Enumerar modelos de documentos

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

Solución de problemas

Registro

La habilitación del registro puede ayudar a descubrir información útil sobre los errores. Para ver un registro de solicitudes y respuestas HTTP, establezca la variable de entorno AZURE_LOG_LEVEL en info. Como alternativa, el registro se puede habilitar en tiempo de ejecución llamando a setLogLevel en @azure/logger:

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

setLogLevel("info");

Para obtener instrucciones más detalladas sobre cómo habilitar los registros, consulte los documentos del paquete @azure/logger.