Volver al inicio

Agente MCP en Open WebUI: herramientas y ReWOO

El artículo describe la evolución del agente MCP en Open WebUI: desde herramientas básicas ClickHouse hasta ReWOO con planificador. Herramientas Pydantic deterministas excluyen alucinaciones SQL, búsqueda de texto completo acelera análisis de big data.

Cómo construir agente MCP con planificador en Open WebUI
Advertisement 728x90

Crear un agente MCP en Open WebUI: De herramientas básicas a un planificador

Un agente en Open WebUI para MCP comienza sencillo: le damos al modelo de lenguaje una serie de herramientas para interactuar con ClickHouse y observamos lo que sucede. Inicialmente, hay tres herramientas básicas disponibles: list_databases, list_tables y run_select_queries. Estas manejan consultas SQL directas, pero cuando las tareas se vuelven más complejas, el modelo tiene dificultades para entender los esquemas de datos.

Solución: un prompt detallado con ejemplos concretos. La estructura incluye variables (portfolio_name, start_date, end_date), instrucciones para filtros LIKE y patrones como Dt::date >= '{start_date}'. Por ejemplo, para calcular el rendimiento de un portafolio se usan funciones de ventana:

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;

Los resultados mejoran, pero siguen siendo inestables: errores de sintaxis, métricas incorrectas persisten. El RAG en Open WebUI no resuelve este problema.

Google AdInline article slot

Ampliando la herramienta: Herramientas personalizadas sin alucinaciones

Avanzar hacia la determinismo: creamos herramientas predefinidas usando esquemas Pydantic. El modelo solo selecciona y parametriza estas herramientas; las consultas son fijas. Las clases de herramientas incluyen:

  • ClickHouseClientBase: envoltorio alrededor de operaciones centrales de MCP.
  • ProfitTool: calcula rendimientos (TWR por fecha, aritmético/geométrico).
  • PortfolioDiscoveryTool: descubre atributos del portafolio (lista, tipos, estrategias).
  • PortfolioCashflowTool: rastrea entradas/salidas, análisis de flujo de efectivo.

Ejemplo de esquema para ClickHouseClientBaseParams:

class ClickHouseClientBaseParams(BaseModel):
    operation: Literal['list_databases', 'list_tables', 'run_select_query'] = Field(
        description='Tipo de operación: list_databases, list_tables o run_select_query'
    )
    database: Optional[str] = Field(default=None, description='Nombre de la base de datos')
    query: Optional[str] = Field(default=None, description='Consulta SQL')
    like: Optional[str] = Field(default=None, description='Filtro LIKE')
    not_like: Optional[str] = Field(default=None, description='Filtro NOT LIKE')


def clickhouse_client_base(params: ClickHouseClientBaseParams) -> str:
    # Lógica para solicitudes HTTP a http://clickhouse-mcp.services.kfim.int
    # Maneja list_databases, list_tables, run_select_query
    # Reemplaza automáticamente contribution_twr_1s_mcp por el nombre completo de la tabla

La función pydantic_to_openai_schema convierte estos esquemas a formato compatible con OpenAI, eliminando alucinaciones: las herramientas siempre devuelven JSON predecible.

Google AdInline article slot

Beneficios de este enfoque:

  • Determinismo: misma entrada → mismo resultado.
  • Escalabilidad: nuevas métricas se añaden como herramientas.
  • Depuración: la lógica de consulta es transparente, sin comportamientos de caja negra del modelo.

Los límites de la simplicidad: cuándo las herramientas fallan

Un agente ingenuo fracasa con tareas complejas: múltiples portafolios, agregaciones, JOINs. El modelo confunde funciones de ventana y filtros de fechas. Aun con ejemplos, las tasas de error alcanzan entre 30–40%. Escalar el análisis de portafolios requiere procesar grandes volúmenes de datos — miles de filas de TWR, registros de flujo de efectivo.

Mejora: Dividir en Planificador y Ejecutor

Segunda iteración: agente como ReWOO — Razonar + Actuar. El planificador (un modelo separado) descompone tareas en pasos; el ejecutor llama a las herramientas. Esto soluciona:

Google AdInline article slot
  • Filtrado de datos: búsqueda full-text en portafolios mediante PortfolioDiscoveryTool.
  • Control de secuencia: consultas encadenadas (listar → filtrar → agrupar).
  • Gestión de contexto: tablas fusionadas en una sola para renderizado en UI.

El planificador genera un plan:

  • Paso 1: listar portafolios LIKE '%name%'.
  • Paso 2: ejecutar consulta para TWR.
  • Paso 3: agrupar y mostrar.

El ejecutor sigue el plan estrictamente, sin improvisaciones.

Búsqueda full-text en acción

Para tablas grandes — el pre-filtrado es clave. La herramienta busca usando lowerUTF8(Portfolio) LIKE '%query%', devuelve IDs/tipos. Esto acelera run_select_query: en lugar de escaneos completos, se hacen consultas dirigidas.

Ejemplo de cadena:

  • PortfolioDiscoveryTool(like='stocks') → devuelve lista de IDs.
  • ProfitTool(portfolios=ids, dates=range) → obtiene TWR.
  • Fusionar en Pandas/DataFrame para la interfaz.

Conclusiones clave

  • Herramientas deterministas basadas en Pydantic reducen errores del modelo en SQL.
  • El enfoque ReWOO separa planificación y ejecución para flujos complejos.
  • La búsqueda full-text es esencial para filtrar en grandes conjuntos de datos de ClickHouse.
  • La integración con Open WebUI permite llamadas secuenciales con renderizado final de tabla.
  • Los prompts de pensamiento en cadena aumentan la estabilidad, incluso con modelos menos potentes.

— Editorial Team

Advertisement 728x90

Leer después