Zpět na domů

MCP agent v Open WebUI: nástroje a ReWOO

Článek popisuje evoluci MCP-agenta v Open WebUI: od základních nástrojů ClickHouse k ReWOO s plánovačem. Deterministické nástroje Pydantic vylučují halucinace SQL, fulltextové vyhledávání zrychluje analýzu velkých dat.

Jak postavit MCP-agenta s plánovačem v Open WebUI
Advertisement 728x90

Vývoj agenta s MCP v Open WebUI: od jednoduchých nástrojů k plánovači

Agent v Open WebUI pro MCP začíná jednoduchostí — poskytneme LLM sadu nástrojů pro práci s ClickHouse a sledujeme výsledky. Na začátku jsou k dispozici tři základní nástroje: list_databases, list_tables, run_select_queries. Pro jednoduché SQL dotazy to stačí, ale při komplikacích model nechápe strukturu dat.

Řešení: podrobný prompt s ukázkami dotazů. Struktura obsahuje proměnné (portfolio_name, start_date, end_date), pokyny pro LIKE-filtry a vzory jako Dt::date >= '{start_date}'. Příklad pro výpočet výnosnosti portfolia používá okenní funkce:

WITH log_coef as (SELECT Portfolio, Dt,
    sum(log(TWR_dod+1)) OVER (
        PARTITION BY InvestmentPortfolioID
        ORDER BY Dt ASC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 FOLLOWING
    ) AS TWR_cumulative_coef
FROM Contribution.contribution_twr_1s_mcp
WHERE lowerUTF8(Portfolio) LIKE '%{portfolio_name}%'
    AND Dt::date >= {start_date}
    AND Dt::date <= {end_date}
ORDER BY Dt DESC)
SELECT Portfolio, Dt, exp(TWR_cumulative_coef) - 1 AS TWR_cumulative
FROM log_coef;

Výsledky jsou lepší, ale nestabilní: syntaktické chyby, nesprávné metriky. RAG v Open WebUI nepomáhá.

Google AdInline article slot

Rozšíření arzenálu: vlastní nástroje bez halucinací

Přechod k determinismu — vytváříme připravené nástroje na základě Pydantic schémat. LLM vybírá a parametrizuje, dotazy jsou pevně dané. Třídy nástrojů:

  • ClickHouseClientBase: obálka kolem základních operací MCP.
  • ProfitTool: výnosy (TWR podle dat, aritmetické/geometrické).
  • PortfolioDiscoveryTool: atributy portfolií (seznam, typy, strategie).
  • PortfolioCashflowTool: přítoky/odtoky, ČSČ.

Příklad schématu pro ClickHouseClientBaseParams:

class ClickHouseClientBaseParams(BaseModel):
    operation: Literal['list_databases', 'list_tables', 'run_select_query'] = Field(
        description='Typ operace: list_databases, list_tables nebo run_select_query'
    )
    database: Optional[str] = Field(default=None, description='Název databáze')
    query: Optional[str] = Field(default=None, description='SQL dotaz')
    like: Optional[str] = Field(default=None, description='Filtr LIKE')
    not_like: Optional[str] = Field(default=None, description='Filtr NOT LIKE')


def clickhouse_client_base(params: ClickHouseClientBaseParams) -> str:
    # Logika dotazů na http://clickhouse-mcp.services.kfim.int
    # Zpracování list_databases, list_tables, run_select_query
    # Automatická náhrada contribution_twr_1s_mcp za úplné jméno

Funkce pydantic_to_openai_schema převádí schémata do OpenAI formátu pro LLM. To vylučuje halucinace: nástroj vždy vrátí předvídatelný JSON.

Google AdInline article slot

Výhody přístupu:

  • Determinismus: stejný vstup → stejný výstup.
  • Škálovatelnost: nové metriky se přidávají jako nástroje.
  • Ladění: logika dotazů je přehledná, bez černé skříňky LLM.

Problémy jednoduchosti: když nástrojů málo

Naivní agent selhává u složitých úloh: více portfolií, agregace, JOINy. Model se zmatenými okenními funkcemi, filtrem dne. I s ukázkami — 30–40 % chyb. Měřítko portfolií analytického výpočtu vyžaduje zpracování velkých datových sad: tisíce řádků TWR, cashflow.

Vylepšení: rozdělení na plánovač a prováděcí modul

Druhá iterace — agent jako ReWOO: Reason + Act. Plánovač (samostatný LLM) rozděluje úkol na kroky, prováděcí modul volá nástroje. To řeší:

Google AdInline article slot
  • Filtraci dat: plnohodnotný hledání portfolií přes PortfolioDiscoveryTool.
  • Sequencí: řetězec dotazů (seznam → filtr → agregace).
  • Kontext: tabulky se slepují do jedné pro UI.

Plánovač generuje plán:

  • Krok 1: list portfolií LIKE '%name%'.
  • Krok 2: run_query pro TWR.
  • Krok 3: agregace a výstup.

Prováděcí modul postupuje přesně podle plánu, bez improvisace.

Plnohodnotné vyhledávání v akci

Pro velké tabulky — předfiltrace. Nástroj hledá podle lowerUTF8(Portfolio) LIKE '%query%', vrátí ID/tipy. To urychlí run_select_query: místo celého průchodu — cílený dotaz.

Příklad řetězce:

  • PortfolioDiscoveryTool(like='akcie') → seznam ID.
  • ProfitTool(portfolios=ids, dates=range) → TWR.
  • Slepení do Pandas/DataFrame pro UI.

Co je důležité

  • Deterministické nástroje na Pydantic minimalizují chyby LLM v SQL.
  • ReWOO-přístup odděluje plánování a provádění pro složité řetězce.
  • Plnohodnotné vyhledávání je klíčové pro filtrování v velkých datových sadách ClickHouse.
  • Integrace Open WebUI umožňuje sériové volání s konečným vykreslením tabulek.
  • Chain-of-thought v promptech zlepšuje stabilitu i slabší modely.

— Editorial Team

Advertisement 728x90

Číst dál