Multi-agent supervisor – czyli coś o nieposłusznych agentach ;)

Ostatnio pisałem o prostym flow, dzisiaj testuję architekturę kilku agentów i supervisora który nimi zarządza.

Wydawało się, że najtrudniejszy będzie kod, a wyszło coś całkowicie innego.

Założenie proste: Supervisor dostaje request i decyduje kto działa: data agent pobiera dane, analysis agent liczy wskaźniki, report agent generuje raport. Supervisor tylko deleguje, sam nigdy nie rozwiązuje zadania.

A w praktyce…

Data agent chciał robić za dużo – zmiast pobrać dane i przekazać je dalej, zaczął pisać wstępny raport. Supervisor przez to nie widział adekwatnego outputu, nie wiedział że krok skończony i po prostu zgłupiał. Reszta agentów nie dostała nic i cały workflow się zatrzymał.

Pomogło zawężenie zakresu przez prompt i structured output. Supervisor dostaje Pydantic model z jednym polem – kogo wywołać dalej. Zero wolnej interpretacji. Albo “data_agent”, albo “analysis_agent”, ewentualnie “report_agent” albo “FINISH”.

Drugi problem wyszedł przy narzędziu do generowania raportu. Przyjmowało dict z danymi finansowymi – model nie wiedział co w nim umieścić, zgadywał albo zostawiał puste pola. Zmieniłem to po prostu na flat params: revenue: float, expenses: float, każde pole z nazwą i typem. Model zaczął poprawnie wypełniać dane z historii konwersacji.

Jedna zmiana sygnatury funkcji, całkowicie inne zachowanie.

Przy okazji – zdaję sobie sprawę, że przy tak przewidywalnym flow wystarczyłby prosty sekwencyjny pipeline. Ale celem było zrozumienie wzorca supervisor od środka, zobaczyć jak to działa w kodzie i jak LLM faktycznie podejmuje decyzje o routingu.

Teraz widzę, że w systemach multi-agent nie walczysz z kodem, ale z tym żeby każdy agent robił tylko to, co do niego należy.

Repo w komentarzu.

A Wy mieliście do czynienia z agentami które wychodziły poza swoją rolę? Jak to rozwiązywaliście?

#LangGraph #LangChain #AIAgents #Python #AIEngineering #MultiAgent

Leave a Reply

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

*
*