Agent do wstępnej analizy dokumentów…

Zbudowałem go jako wstęp do LangGraph… ale patrząc z doświadczenia na procesach, czuję, że mógłby funkcjonować w niejednej firmie.

Ale od początku…

Narzędzie klasyfikuje faktury, kontrakty i raporty, analizuje je przez LLM, później sprawdza jakość i jeśli wynik analizy jest za słaby – próbuje ponownie. Po trzeciej nieudanej próbie przejścia testu jakości – eskaluje do człowieka.

Trzy rzeczy, które mnie tu na początku zaskoczyły:

1. @tool zamienia funkcję w obiekt

Napisałem funkcję extract_keywords, dodałem dekorator @tool i chciałem wywołać jak zawsze:

extract_keywords(text=”…”)

i cyk… Error.

Dekorator zamienia funkcję w tzw. StructuredTool. Tutaj wywołujesz ją przez .invoke({“text”: “…”}). Model i narzędzia mają w grafie ten sam interfejs, czyli agent wywołuje model i tool tym samym kodem.

2. TypedDict, Pydantic, dict – tutaj każde ma swoje zadanie

LangGraph używa TypedDict do stanu grafu. Dlaczego nie Pydantic? LangGraph czyta ten schemat przy kompilacji, jeszcze zanim cokolwiek się uruchomi. TypedDict opisuje schemat, LangGraph go czyta i tyle… Pydantic by jeszcze sprawdzał każdą wartość w trakcie, a tego tutaj nie potrzebujemy. Z drugiej strony Pydantic wchodzi przy structured output z LLM, a dict można użyć, gdy schematu nie potrzebujesz w ogóle.

3. Conditional routing to nie prosty if/else, tylko funkcja przekierowująca do następnego node.

Zamiast sekwencyjnego if retry < 3: analyze() else: manual_review(), tutaj piszesz routing, który czyta stan i zwraca w moim wypadku “analyze” albo “manual_review”. Dzięki temu graf sam wie gdzie iść dalej.

Dodatkowo dochodzi nam checkpointing, Human in The Loop i observability, czyli rzeczy których w zwykłym Pythonie nie mamy.

A Wy – macie jakieś doświadczenia z LangGraph albo LangChain? Co Was zaskoczyło przy starcie?

#LangChain #LangGraph #Python #AIEngineering #AIAgents #Programowanie

Leave a Reply

Your email address will not be published. Required fields are marked *.

*
*