Let's Build: KI-Rechnungsparser mit Transloadit
Rechnungen sind ein zentraler Workflow für Finanzteams, doch das manuelle Extrahieren von Feldern ist langsam und fehleranfällig. In diesem Let’s Build bauen wir einen kleinen Dienst zum Parsen von Rechnungen mit den Primitiven von Transloadit: Dateien routen, Formate normalisieren und die KI um strukturiertes JSON bitten.
Was wir bauen
- Beliebiges Rechnungsformat annehmen (PDF, DOCX, Bild)
- Nicht-PDFs mit 🤖 /document/convert in PDF konvertieren
- Strukturierte Felder mit 🤖 /ai/chat (English) extrahieren
Zuerst das Schema (zod)
Wir definieren das Rechnungsschema mit Zod und übergeben das JSON Schema an den KI-Step. Das hält die Ausgabe vorhersehbar.
import { z } from 'zod'
import { zodToJsonSchema } from 'zod-to-json-schema'
const invoiceSchema = z.object({
vendor_name: z.string().optional(),
invoice_number: z.string().optional(),
invoice_date: z.string().optional(),
due_date: z.string().optional(),
currency: z.string().optional(),
subtotal: z.number().optional(),
tax: z.number().optional(),
total: z.number().optional(),
line_items: z
.array(
z.object({
description: z.string().optional(),
quantity: z.number().optional(),
unit_price: z.number().optional(),
total: z.number().optional(),
}),
)
.optional(),
})
const toJsonSchema = (schema: z.ZodTypeAny): unknown =>
typeof (z as { toJSONSchema?: typeof zodToJsonSchema }).toJSONSchema === 'function'
? (z as { toJSONSchema: typeof zodToJsonSchema }).toJSONSchema(schema)
: zodToJsonSchema(schema)
const invoiceJsonSchema = toJsonSchema(invoiceSchema)
Überblick über die Pipeline
PDF invoices ──▶ /ai/chat
Other docs ──▶ /document/convert (pdf) ──▶ /ai/chat
Assembly-Snippet
const assembly = await transloadit.createAssembly({
params: {
steps: {
pdf_verified: {
robot: '/file/filter',
use: ':original',
accepts: [['${file.mime}', '==', 'application/pdf']],
},
non_pdf: {
robot: '/file/filter',
use: ':original',
accepts: [['${file.mime}', '!=', 'application/pdf']],
},
pdf_converted: {
robot: '/document/convert',
use: 'non_pdf',
format: 'pdf',
},
extract_invoice: {
robot: '/ai/chat',
use: ['pdf_verified', 'pdf_converted'],
model: 'anthropic/claude-4-sonnet-20250514',
format: 'json',
schema: JSON.stringify(invoiceJsonSchema),
messages: 'Extract invoice fields. Omit keys if unknown.',
result: true,
},
},
},
files: {
document: filePath,
},
waitForCompletion: true,
})
Die Beispiel-App ausprobieren
Das vollständige Beispielskript und die Einrichtungsanleitung sind in diesem Repository enthalten. Führen Sie im Stammverzeichnis des Repositorys aus:
node public/example_apps/invoice-parser/run.ts
Beispieleingaben
Verwenden Sie die mitgelieferten Beispieldateien oder nutzen Sie für Screenshots Ihre eigenen Rechnungs-PDFs:
_assets/demos/inputs/scan.pdf_assets/demos/inputs/first_document.pdf_assets/demos/inputs/second_document.pdf
Nächste Schritte
- Ergänzen Sie in Ihrer Anwendungsschicht eine Normalisierung mehrerer Währungen.
- Speichern Sie die Ergebnisse in Ihrer Datenbank und ergänzen Sie Queues für die manuelle Prüfung.
- Erweitern Sie das Schema, damit es mehrere Anbieter und Locales unterstützt.
