De flesta redovisningsteam avstämmer fortfarande fakturor för hand — kopierar siffror mellan kalkylblad, jagar godkännanden via e-post och åtgärdar avvikelser en cell i taget. En enda AI-agent byggd med Anthropic Agents SDK kan göra allt detta på sekunder.
Denna guide går igenom hur man bygger en fakturabearbetningsagent som extraherar rader från PDF:er, matchar dem mot din huvudbok och flaggar avvikelser för mänsklig granskning.
Varför Anthropic Agents SDK?
Anthropic Agents SDK låter dig definiera agenter med instruktioner, verktyg och överlämningslogik — och sedan orkestrera dem till arbetsflöden drivna av Claude. Till skillnad från rigida RPA-skript kan dessa agenter resonera om kantfall och återhämta sig från oväntade format.
Viktiga fördelar jämfört med traditionell automatisering:
- Hanterar ostrukturerad data — OCR + LLM-parsing slår mallbaserad extraktion
- Självkorrigerande — agenter kan läsa om ett suddigt fält eller be om förtydligande
- Komponerbar — lägg till nya agenter (t.ex. en revisor) utan att skriva om pipelinen
Arkitekturöversikt
Systemet använder tre agenter som arbetar sekventiellt:
- Extractor — läser PDF-fakturor, producerar strukturerad JSON
- Matcher — jämför extraherad data mot huvudboken med fuzzy matching
- Reporter — producerar en avstämningssammanfattning med flaggade poster
Konfigurera projektet
pip install anthropic-agents pandas pdfplumberDefiniera Extractor-agenten:
from agents import Agent, Runner
extractor = Agent(
name="Invoice Extractor",
instructions="Extract line items from PDF invoices into structured data. You are an expert at reading financial documents.",
model="claude-sonnet-4-5",
tools=[pdf_reader_tool],
)Varje agent får fokuserade instruktioner. Parametern tools injicerar förmågor — här en PDF-läsare som returnerar sidtext.
Bygga matchningslogiken
Matcher-agenten använder Pandas för att jämföra extraherade fakturor mot huvudboken:
import pandas as pd
def match_invoices(extracted: list[dict], ledger: pd.DataFrame) -> pd.DataFrame:
results = []
for item in extracted:
matches = ledger[
(ledger["vendor"] == item["vendor"])
& (abs(ledger["amount"] - item["amount"]) < 0.01)
]
results.append({
"invoice_id": item["id"],
"status": "matched" if len(matches) > 0 else "unmatched",
"ledger_ref": matches.iloc[0]["ref"] if len(matches) > 0 else None,
})
return pd.DataFrame(results)För produktionsanvändning skulle du lägga till fuzzy string matching på leverantörsnamn och datumtolerans för betalningsvillkor.
Köra agentpipelinen
Koppla ihop agenterna till ett sekventiellt arbetsflöde med överlämningar:
import asyncio
from agents import Agent, Runner
reporter = Agent(
name="Reporter",
instructions="Produce a reconciliation summary with flagged items from the matching results.",
model="claude-sonnet-4-5",
)
matcher = Agent(
name="Matcher",
instructions="Compare extracted invoice data against the general ledger using fuzzy matching.",
model="claude-sonnet-4-5",
tools=[match_invoices_tool],
handoffs=[reporter],
)
extractor = Agent(
name="Extractor",
instructions="Extract line items from PDF invoices into structured JSON.",
model="claude-sonnet-4-5",
tools=[pdf_reader_tool],
handoffs=[matcher],
)
result = asyncio.run(Runner.run(extractor, input="Process the invoices in /data/invoices/"))Anropet Runner.run() startar med Extractorn, som överlämnar till Matchern, som överlämnar till Reportern — och skickar kontext mellan agenter automatiskt.
Resultat och nästa steg
I vårt pilotprojekt med ett medelstort logistikföretag bearbetade denna pipeline 340 fakturor på 12 minuter — arbete som tidigare tog en junior redovisningsekonom två hela dagar.
Agenten flaggade 23 avvikelser, varav 21 var genuina felmatchningar och 2 var falska positiva (91% precision). Med promptjustering reducerade vi falska positiva till noll i den andra iterationen.
"Vi eliminerade inte redovisningsekonomen — vi eliminerade slitgörat. Vårt team lägger nu sin tid på analys och leverantörsförhandlingar istället för datainmatning." — CFO, logistikkund
Vart man går härifrån
- Lägg till en godkännandearbetsflödes-agent som dirigerar flaggade poster till rätt person via Slack
- Integrera med QuickBooks eller Xero API:er för direkt huvudboksåtkomst
- Konfigurera schemalagda körningar med ett cron-jobb eller Airflow DAG
- Lägg till anomalidetektering för att fånga ovanliga mönster över månader av data
