Udostępnij za pośrednictwem


Biblioteka klienta REST usługi Azure DocumentIntelligence (dawniej FormRecognizer) dla języka JavaScript — wersja 1.0.0-beta.2

Wyodrębnia zawartość, układ i dane ustrukturyzowane z dokumentów.

Skorzystaj z tej biblioteki w dużej mierze na naszych dokumentach klienta REST

UWAGA: Form Recognizer została zmieniona na analizę dokumentów. Sprawdź przewodnik migracji z @azure/ai-form-recognizer do @azure-rest/ai-document-intelligence.

Kluczowe linki:

Ta wersja biblioteki klienta jest domyślnie ustawiona na "2024-02-29-preview" wersję usługi.

W tej tabeli przedstawiono relację między wersjami zestawu SDK i obsługiwanymi wersjami interfejsu API usługi:

Wersja zestawu SDK Obsługiwana wersja usługi interfejsu API
1.0.0-beta.2 2024-02-29-preview
1.0.0-beta.1 2023-10-31-preview

Skorzystaj ze starszej biblioteki za pośrednictwem starszych @azure/ai-form-recognizer wersji interfejsu API usługi dla wycofanych modeli, takich jak "prebuilt-businessCard" i "prebuilt-document". Aby uzyskać więcej informacji, zobacz Dziennik zmian.

W poniższej tabeli opisano relację poszczególnych klientów i obsługiwanych wersji interfejsu API:

Wersja interfejsu API usługi Obsługiwani klienci Pakiet
2024-02-29-preview DocumentIntelligenceClient @azure-rest/ai-document-intelligence Wersja 1.0.0-beta.2
2023-10-31-preview DocumentIntelligenceClient @azure-rest/ai-document-intelligence Wersja 1.0.0-beta.1
2023-07-31 DocumentAnalysisClient i DocumentModelAdministrationClient @azure/ai-form-recognizer Wersja ^5.0.0
2022-08-01 DocumentAnalysisClient i DocumentModelAdministrationClient @azure/ai-form-recognizer Wersja ^4.0.0

Wprowadzenie

Obecnie obsługiwane środowiska

  • Wersje ltS Node.js

Wymagania wstępne

Instalowanie pakietu @azure-rest/ai-document-intelligence

Zainstaluj bibliotekę klienta REST klienta REST usługi Azure DocumentIntelligence(dawniejFormRecognizer) dla języka JavaScript przy użyciu polecenia npm:

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

Tworzenie i uwierzytelnianie DocumentIntelligenceClient

Aby użyć poświadczeń tokenu usługi Azure Active Directory (AAD), podaj wystąpienie żądanego typu poświadczeń uzyskanego z biblioteki @azure/tożsamości .

Aby uwierzytelnić się za pomocą usługi AAD, należy najpierw npm zainstalować @azure/identity

Po skonfigurowaniu można wybrać typ poświadczeń@azure/identity do użycia. Na przykład wartość DefaultAzureCredential może służyć do uwierzytelniania klienta.

Ustaw wartości identyfikatora klienta, identyfikatora dzierżawy i wpisu tajnego klienta aplikacji usługi AAD jako zmienne środowiskowe: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET

Używanie poświadczeń tokenu

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

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

Używanie klucza interfejsu API

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

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

Modele dokumentów

Analizowanie wstępnie utworzonego układu (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" },
  });

Analizowanie wstępnie utworzonego układu (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" },
  });

Kontynuuj tworzenie elementu poller na podstawie początkowej odpowiedzi

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 zawartości języka Markdown

Obsługuje dane wyjściowe z formatem zawartości języka Markdown wraz z domyślnym tekstem zwykłym. Na razie jest to obsługiwane tylko w przypadku "wstępnie utworzonego układu". Format zawartości języka Markdown jest uznawany za bardziej przyjazny dla użycia usługi LLM w scenariuszu użycia czatu lub automatyzacji.

Usługa jest zgodna ze specyfikacją GFM (GitHub Flavored Markdown) dla formatu Markdown. Wprowadzono również nową właściwość contentFormat z wartością "text" lub "markdown", aby wskazać format zawartości wynikowej.

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

Pola zapytania

Po określeniu tej flagi funkcji usługa będzie dodatkowo wyodrębniać wartości pól określonych za pośrednictwem parametru zapytania QueryFields w celu uzupełnienia wszystkich istniejących pól zdefiniowanych przez model jako rezerwowy.

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

Opcje podziału

W poprzednich wersjach interfejsu API obsługiwanych przez starszą @azure/ai-form-recognizer bibliotekę operacja dzielenia dokumentów i klasyfikacji ("/documentClassifiers/{classifierId}:analyze") zawsze próbowała podzielić plik wejściowy na wiele dokumentów.

Aby włączyć szerszy zestaw scenariuszy, usługa wprowadza parametr zapytania "split" z nową wersją usługi "2023-10-31-preview". Obsługiwane są następujące wartości:

  • split: "auto"

    Pozwól usłudze określić, gdzie należy podzielić.

  • split: "none"

    Cały plik jest traktowany jako pojedynczy dokument. Nie jest wykonywane dzielenie.

  • split: "perPage"

    Każda strona jest traktowana jako oddzielny dokument. Każda pusta strona jest przechowywana jako własny dokument.

Klasyfikatory dokumentów #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'
//  }

Pobieranie informacji

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

Wyświetlanie listy modeli dokumentów

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

Rozwiązywanie problemów

Rejestrowanie

Włączenie rejestrowania może pomóc odkryć przydatne informacje o błędach. Aby wyświetlić dziennik żądań HTTP i odpowiedzi, ustaw zmienną AZURE_LOG_LEVEL środowiskową na info. Możesz też włączyć rejestrowanie w czasie wykonywania, wywołując polecenie w elemecie setLogLevel@azure/logger:

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

setLogLevel("info");

Aby uzyskać bardziej szczegółowe instrukcje dotyczące włączania dzienników, zapoznaj się z dokumentami dotyczącymi pakietu @azure/rejestratora.