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á.
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.
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ší:
- 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
Zatím žádné komentáře.