Biblioteka klienta REST usługi Azure DocumentIntelligence (dawniej FormRecognizer) dla języka JavaScript — wersja 1.0.0
Wyodrębnia zawartość, układ i dane ustrukturyzowane z dokumentów.
w dużym stopniu polegaj na naszych dokumentacji klienta REST do korzystania z tej biblioteki
UWAGA: Rozpoznawanie formularzy zostało przemianowane na analizę dokumentów. Zapoznaj się z przewodnikiem migracji z
@azure/ai-form-recognizer
do@azure-rest/ai-document-intelligence
.
Kluczowe linki:
- kod źródłowy
- pakietu
(NPM) - Dokumentacja referencyjna interfejs u API
- przykładów
- dziennika zmian
- przewodnik migracji z rozpoznawania formularzy
Ta wersja biblioteki klienta jest domyślnie ustawiona na
"2024-11-30"
wersji 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 | 2024-11-30 |
Skorzystaj ze starszej biblioteki
@azure/ai-form-recognizer
za pośrednictwem starszych wersji interfejsu API usługi dla wycofanych modeli, takich jak"prebuilt-businessCard"
i"prebuilt-document"
. Aby uzyskać więcej informacji, zobacz Changelog.
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-11-30 | DocumentIntelligenceClient |
@azure-rest/ai-document-intelligence wersja 1.0.0 |
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
Warunki wstępne
- Aby korzystać z tego pakietu, musisz mieć subskrypcji platformy Azure.
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 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ę w usłudze AAD, musisz najpierw npm
zainstalować @azure/identity
Po skonfigurowaniu możesz wybrać typ poświadczeń
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 narzędzia 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 = 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'
// }
// }
Analiza wsadowa
import { parseResultIdFromResponse, isUnexpected } from "@azure-rest/ai-document-intelligence";
// 1. Analyze a batch of documents
const initialResponse = await client
.path("/documentModels/{modelId}:analyzeBatch", "prebuilt-layout")
.post({
contentType: "application/json",
body: {
azureBlobSource: {
containerUrl: batchTrainingFilesContainerUrl(),
},
resultContainerUrl: batchTrainingFilesResultContainerUrl(),
resultPrefix: "result",
},
});
if (isUnexpected(initialResponse)) {
throw initialResponse.body.error;
}
const resultId = parseResultIdFromResponse(initialResponse);
console.log("resultId: ", resultId);
// (Optional) You can poll for the batch analysis result but be aware that a job may take unexpectedly long time, and polling could incur additional costs.
// const poller = getLongRunningPoller(client, initialResponse);
// await poller.pollUntilDone();
// 2. At a later time, you can retrieve the operation result using the resultId
const output = await client
.path("/documentModels/{modelId}/analyzeResults/{resultId}", "prebuilt-layout", resultId)
.get();
console.log(output);
Format zawartości markdown
Obsługuje dane wyjściowe z formatem zawartości języka Markdown wraz z domyślnym tekstem . 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 funkcji 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 o 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 dalej wyodrębniać wartości pól określonych za pośrednictwem parametru zapytania QueryFields, aby uzupełnić wszystkie istniejące pola zdefiniowane przez model jako rezerwowe.
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ą bibliotekę @azure/ai-form-recognizer
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 się 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 = 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 wygenerowanych danych wyjściowych pdf z analizy dokumentów
const filePath = path.join(ASSET_PATH, "layout-pageobject.pdf");
const base64Source = await fs.readFile(filePath, { encoding: "base64" });
const initialResponse = await client
.path("/documentModels/{modelId}:analyze", "prebuilt-read")
.post({
contentType: "application/json",
body: {
base64Source,
},
queryParameters: { output: ["pdf"] },
});
if (isUnexpected(initialResponse)) {
throw initialResponse.body.error;
}
const poller = getLongRunningPoller(client, initialResponse);
await poller.pollUntilDone();
const output = await client
.path(
"/documentModels/{modelId}/analyzeResults/{resultId}/pdf",
"prebuilt-read",
parseResultIdFromResponse(initialResponse)
)
.get()
.asNodeStream(); // output.body would be NodeJS.ReadableStream
if (output.status !== "200" || !output.body) {
throw new Error("The response was unexpected, expected NodeJS.ReadableStream in the body.");
}
const pdfData = await streamToUint8Array(output.body);
fs.promises.writeFile(`./output.pdf`, pdfData);
// Or you can consume the NodeJS.ReadableStream directly
Pobieranie wygenerowanego przyciętego obrazu określonego rysunku z analizy dokumentów
const filePath = path.join(ASSET_PATH, "layout-pageobject.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: { output: ["figures"] },
});
if (isUnexpected(initialResponse)) {
throw initialResponse.body.error;
}
const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions });
const result = (await poller.pollUntilDone()).body as AnalyzeResultOperationOutput;
const figures = result.analyzeResult?.figures;
assert.isArray(figures);
assert.isNotEmpty(figures?.[0]);
const figureId = figures?.[0].id || "";
assert.isDefined(figureId);
const output = await client
.path(
"/documentModels/{modelId}/analyzeResults/{resultId}/figures/{figureId}",
"prebuilt-layout",
parseResultIdFromResponse(initialResponse),
figureId
)
.get()
.asNodeStream(); // output.body would be NodeJS.ReadableStream
if (output.status !== "200" || !output.body) {
throw new Error("The response was unexpected, expected NodeJS.ReadableStream in the body.");
}
const imageData = await streamToUint8Array(output.body);
fs.promises.writeFile(`./figures/${figureId}.png`, imageData);
// Or you can consume the NodeJS.ReadableStream directly
Uzyskiwanie 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
Wyrąb
Włączenie rejestrowania może pomóc odkryć przydatne informacje o błędach. Aby wyświetlić dziennik żądań i odpowiedzi HTTP, ustaw zmienną środowiskową AZURE_LOG_LEVEL
na info
. Alternatywnie rejestrowanie można włączyć w czasie wykonywania, wywołując setLogLevel
w @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 pakietów @azure/rejestratora.
Azure SDK for JavaScript