Zurück zur Startseite

MCP-Agent in Open WebUI: Tools und ReWOO

Der Artikel beschreibt die Evolution des MCP-Agenten in Open WebUI: von grundlegenden ClickHouse-Tools zu ReWOO mit Planer. Deterministische Pydantic-Tools schließen SQL-Halluzinationen aus, Volltextsuche beschleunigt Big-Data-Analysen.

So erstellen Sie einen MCP-Agenten mit Planer in Open WebUI
Advertisement 728x90

MCP-Agent in Open WebUI erstellen: Von einfachen Tools zu einem Planer

Ein Agent in Open WebUI für MCP beginnt einfach – wir geben dem LLM eine Reihe von Werkzeugen, um mit ClickHouse zu interagieren, und beobachten, was passiert. Anfangs stehen drei grundlegende Werkzeuge zur Verfügung: list_databases, list_tables und run_select_queries. Diese verarbeiten einfache SQL-Abfragen, doch je komplexer die Aufgaben werden, desto schwerer fällt es dem Modell, Datenstrukturen zu verstehen.

Lösung: Ein detaillierter Prompt mit konkreten Abfragebeispielen. Die Struktur enthält Variablen (portfolio_name, start_date, end_date), Anweisungen für LIKE-Filter und Muster wie Dt::date >= '{start_date}'. Zum Beispiel wird die Portfolio-Rendite mit Window-Funktionen berechnet:

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;

Die Ergebnisse verbessern sich, bleiben aber instabil – Syntaxfehler und falsche Metriken treten weiterhin auf. RAG in Open WebUI hilft hier nicht weiter.

Google AdInline article slot

Erweiterung des Werkzeugkastens: Individuelle Tools ohne Halluzinationen

Ziel: Determinismus. Wir bauen vorgefertigte Werkzeuge mit Pydantic-Schemas. Das LLM wählt nur aus und parameterisiert sie; die Abfragen sind festgelegt. Zu den Tool-Klassen gehören:

  • ClickHouseClientBase: Wrapper für zentrale MCP-Operationen.
  • ProfitTool: Berechnet Renditen (TWR nach Datum, arithmetisch/geometrisch).
  • PortfolioDiscoveryTool: Ermittelt Portfolio-Attribute (Liste, Typen, Strategien).
  • PortfolioCashflowTool: Verfolgt Zu- und Abflüsse, analysiert Cashflows.

Beispiel-Schema für ClickHouseClientBaseParams:

class ClickHouseClientBaseParams(BaseModel):
    operation: Literal['list_databases', 'list_tables', 'run_select_query'] = Field(
        description='Art der Operation: list_databases, list_tables oder run_select_query'
    )
    database: Optional[str] = Field(default=None, description='Datenbankname')
    query: Optional[str] = Field(default=None, description='SQL-Abfrage')
    like: Optional[str] = Field(default=None, description='LIKE-Filter')
    not_like: Optional[str] = Field(default=None, description='NOT LIKE-Filter')


def clickhouse_client_base(params: ClickHouseClientBaseParams) -> str:
    # Logik für HTTP-Anfragen an http://clickhouse-mcp.services.kfim.int
    # Behandelt list_databases, list_tables, run_select_query
    # Ersetzt automatisch contribution_twr_1s_mcp durch vollständigen Tabellennamen

Die Funktion pydantic_to_openai_schema konvertiert diese Schemas in OpenAI-kompatible Formate – so entstehen keine Halluzinationen mehr. Die Werkzeuge liefern immer vorhersehbaren JSON-Output.

Google AdInline article slot

Vorteile dieser Methode:

  • Determinismus: Gleiche Eingabe → gleiche Ausgabe.
  • Skalierbarkeit: Neue Metriken als Werkzeuge hinzufügen.
  • Debugging: Abfrage-Logik ist transparent, kein Black-Box-Verhalten des LLMs.

Die Grenzen der Einfachheit: Wenn Werkzeuge versagen

Ein naiver Agent scheitert bei komplexen Aufgaben: Mehrere Portfolios, Aggregationen, JOINs. Das Modell verwechselt Window-Funktionen und Datumsfilter. Selbst mit Beispielen erreichen Fehlerquoten 30–40 %. Für die Skalierung von Portfolio-Analysen müssen große Datensätze verarbeitet werden – Tausende TWR-Zeilen, Cashflow-Protokolle.

Verbesserung: Trennung in Planner und Executor

Zweite Iteration: Agent als ReWOO – Reason + Act. Der Planner (ein separates LLM) zerlegt Aufgaben in Schritte; der Executor ruft die Werkzeuge auf. Dies löst folgende Probleme:

Google AdInline article slot
  • Datenfilterung: Volltextsuche über Portfolios mittels PortfolioDiscoveryTool.
  • Sequenzsteuerung: Verkettete Abfragen (Liste → Filter → Aggregation).
  • Kontextverwaltung: Tabellen werden zu einer zusammengeführt für die UI-Darstellung.

Der Planner generiert einen Plan:

  • Schritt 1: Portfolios LIKE '%name%' auflisten.
  • Schritt 2: TWR-Abfrage ausführen.
  • Schritt 3: Aggregieren und anzeigen.

Der Executor folgt dem Plan strikt – keine Improvisation.

Volltextsuche in Aktion

Bei großen Tabellen ist Vorfilterung entscheidend. Das Werkzeug sucht mit lowerUTF8(Portfolio) LIKE '%query%' und liefert IDs/Typen. Dadurch beschleunigt sich run_select_query: statt vollständiger Durchläufe werden gezielte Abfragen ausgeführt.

Beispiel-Ablauf:

  • PortfolioDiscoveryTool(like='stocks') → gibt ID-Liste zurück.
  • ProfitTool(portfolios=ids, dates=range) → holt TWR-Daten.
  • Zusammenführung in Pandas/DataFrame für die UI.

Wichtige Erkenntnisse

  • Deterministische Werkzeuge basierend auf Pydantic reduzieren LLM-Fehler bei SQL.
  • ReWOO-Ansatz trennt Planung und Ausführung für komplexe Workflows.
  • Volltextsuche ist essenziell für das Filtern großer ClickHouse-Datensätze.
  • Integration in Open WebUI ermöglicht sequenzielle Aufrufe mit finaler Tabellendarstellung.
  • Chain-of-Thought-Prompts erhöhen die Stabilität, auch bei schwächeren Modellen.

— Editorial Team

Advertisement 728x90

Weiterlesen