Клиентская библиотека REST Azure DocumentIntelligence (ранее FormRecognizer) для JavaScript версии 1.0.0-beta.2

Извлекает содержимое, макет и структурированные данные из документов.

Чтобы использовать эту библиотеку, в значительной степени используйте наши клиентские документы REST .

ПРИМЕЧАНИЕ. Распознаватель документов был переименован в аналитику документов. Проверка руководство по миграции с @azure/ai-form-recognizer на @azure-rest/ai-document-intelligence.

Основные ссылки:

Эта версия клиентской библиотеки по умолчанию использует "2024-02-29-preview" версию службы.

В этой таблице показано отношение между версиями пакета SDK и поддерживаемыми версиями API службы:

Версия пакета SDK Поддерживаемая версия API службы
1.0.0-beta.2 29.02.2024-preview
1.0.0-beta.1 31.10.2023 г.

Для устаревших моделей, таких как и , полагайтесь на более раннюю @azure/ai-form-recognizer библиотеку через старые версии API служб, например "prebuilt-businessCard" и "prebuilt-document". Дополнительные сведения см. в разделе Журнал изменений.

В таблице ниже описана связь каждого клиента и поддерживаемых версий API:

Версия API службы Поддерживаемые клиенты Пакет
29.02.2024-preview DocumentIntelligenceClient @azure-rest/ai-document-intelligence Версия 1.0.0-beta.2
31.10.2023 г. DocumentIntelligenceClient @azure-rest/ai-document-intelligence Версия 1.0.0-beta.1
2023-07-31 DocumentAnalysisClient и DocumentModelAdministrationClient @azure/ai-form-recognizer Версия ^5.0.0
2022-08-01 DocumentAnalysisClient и DocumentModelAdministrationClient @azure/ai-form-recognizer Версия ^4.0.0

Начало работы

Поддерживаемые в настоящее время среды

  • LTS версии Node.js

Предварительные требования

  • Для использования этого пакета у вас должна быть подписка Azure .

Установите пакет @azure-rest/ai-document-intelligence.

Установите клиентскую библиотеку REST клиента REST Azure DocumentIntelligence(ранееFormRecognizer) для JavaScript с помощью npm:

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

Создание и проверка подлинности DocumentIntelligenceClient

Чтобы использовать учетные данные маркера Azure Active Directory (AAD), укажите экземпляр нужного типа учетных данных, полученных из библиотеки @azure и удостоверений .

Для проверки подлинности с помощью AAD необходимо сначала npm установить @azure/identity

После настройки можно выбрать тип учетных данных для @azure/identity использования. Например, для проверки подлинности клиента можно использовать DefaultAzureCredential .

Задайте значения идентификатора клиента, идентификатора клиента и секрета клиента приложения AAD в качестве переменных среды: AZURE_CLIENT_ID, AZURE_TENANT_ID AZURE_CLIENT_SECRET

Использование учетных данных маркера

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

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

Использование КЛЮЧА API

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

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

Модели документов

Анализ предварительно созданного макета (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" },
  });

Анализ предварительно созданного макета (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" },
  });

Продолжить создание опрашивающего средства на основе начального ответа

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

Формат содержимого Markdown

Поддерживает выходные данные с форматом содержимого Markdown вместе с обычным текстом по умолчанию. Сейчас это поддерживается только для предварительно созданного макета. Формат содержимого Markdown считается более понятным для использования LLM в сценарии использования чата или автоматизации.

Служба соответствует спецификации GFM (GitHub Flavored Markdown) для формата Markdown. Также представлено новое свойство contentFormat со значением "text" или "markdown" для указания формата содержимого результата.

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

Поля запроса

Если указан этот флаг компонента, служба будет дополнительно извлекать значения полей, указанных с помощью параметра запроса queryFields, чтобы дополнить все существующие поля, определенные моделью как резервные.

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

Параметры разделения

В предыдущих версиях API, поддерживаемых старой @azure/ai-form-recognizer библиотекой, операции разделения и классификации документов ("/documentClassifiers/{classifierId}:analyze") всегда пытались разделить входной файл на несколько документов.

Чтобы включить более широкий набор сценариев, служба вводит параметр запроса split с новой версией службы 2023-10-31-preview. Поддерживаются следующие значения.

  • split: "auto"

    Разрешите службе определить, где следует разделить.

  • split: "none"

    Весь файл обрабатывается как один документ. Разделение не выполняется.

  • split: "perPage"

    Каждая страница обрабатывается как отдельный документ. Каждая пустая страница хранится как собственный документ.

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

Получение сведений

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

Список моделей документов

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

Устранение неполадок

Ведение журнала

Включение ведения журнала может помочь выявить полезные сведения о сбоях. Чтобы просмотреть журнал HTTP-запросов и ответов, задайте для переменной среды AZURE_LOG_LEVEL значение info. Кроме того, ведение журнала можно включить во время выполнения, вызвав setLogLevel в @azure/logger:

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

setLogLevel("info");

Более подробные инструкции по включению журналов см. в документации по пакету @azure и средства ведения журнала.