Większość zespołów księgowych nadal uzgadnia faktury ręcznie — kopiując liczby między arkuszami kalkulacyjnymi, ścigając zatwierdzenia przez email i naprawiając niezgodności komórka po komórce. Pojedynczy agent AI zbudowany z Anthropic Agents SDK potrafi to wszystko zrobić w kilka sekund.

Ten przewodnik przeprowadzi Cię przez budowę agenta przetwarzania faktur, który wyodrębnia pozycje z PDF-ów, porównuje je z Twoim głównym księgą i oznacza rozbieżności do przeglądu przez człowieka.

Dlaczego Anthropic Agents SDK?

Anthropic Agents SDK pozwala definiować agentów z instrukcjami, narzędziami i logiką przekazywania — a następnie orkiestrować ich w przepływy pracy napędzane przez Claude. W odróżnieniu od sztywnych skryptów RPA, ci agenci potrafią rozumować o przypadkach brzegowych i radzić sobie z nieoczekiwanymi formatami.

Kluczowe przewagi nad tradycyjną automatyzacją:

  • Obsługuje dane nieustrukturyzowane — OCR + parsowanie LLM bije ekstrakcję opartą na szablonach
  • Samokorygujący — agenci mogą ponownie odczytać niewyraźne pole lub poprosić o wyjaśnienie
  • Komponowalny — dodaj nowych agentów (np. audytora) bez przepisywania pipeline'u

Przegląd architektury

System wykorzystuje trzech agentów pracujących sekwencyjnie:

  1. Extractor — odczytuje faktury PDF, generuje ustrukturyzowany JSON
  2. Matcher — porównuje wyodrębnione dane z księgą główną za pomocą dopasowania rozmytego
  3. Reporter — tworzy podsumowanie uzgodnienia z oznaczonymi pozycjami

Konfiguracja projektu

pip install anthropic-agents pandas pdfplumber

Zdefiniuj agenta Extractor:

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],
)

Każdy agent otrzymuje skupione instrukcje. Parametr tools wstrzykuje możliwości — tutaj czytnik PDF, który zwraca tekst strony.

Budowanie logiki dopasowywania

Agent Matcher używa Pandas do porównywania wyodrębnionych faktur z księgą główną:

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)

W środowisku produkcyjnym dodałbyś dopasowanie rozmyte nazw dostawców i tolerancję dat dla warunków płatności.

Uruchomienie pipeline'u agentów

Połącz agentów w sekwencyjny przepływ pracy z przekazywaniem:

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/"))

Wywołanie Runner.run() zaczyna od Extractora, który przekazuje do Matchera, który przekazuje do Reportera — automatycznie przekazując kontekst między agentami.

Wyniki i kolejne kroki

W naszym pilotażu z średniej wielkości firmą logistyczną, ten pipeline przetworzył 340 faktur w 12 minut — pracę, na którą młodszy księgowy potrzebował wcześniej dwóch pełnych dni.

Agent oznaczył 23 rozbieżności, z których 21 było rzeczywistymi niezgodnościami, a 2 były fałszywie pozytywne (wskaźnik precyzji 91%). Po dostrojeniu promptów zredukowaliśmy fałszywie pozytywne wyniki do zera w drugiej iteracji.

„Nie wyeliminowaliśmy księgowego — wyeliminowaliśmy mordęgę. Nasz zespół teraz poświęca czas na analizę i negocjacje z dostawcami zamiast na wprowadzanie danych." — CFO, klient logistyczny

Co dalej

  • Dodaj agenta workflow zatwierdzania, który kieruje oznaczone pozycje do odpowiedniej osoby przez Slack
  • Zintegruj z API QuickBooks lub Xero dla bezpośredniego dostępu do księgi
  • Skonfiguruj zaplanowane uruchomienia z cronem lub Airflow DAG
  • Dodaj wykrywanie anomalii, aby wychwycić nietypowe wzorce w danych z wielu miesięcy