Skip to content

Ejemplos Prácticos

Tres ejemplos con complejidad creciente: desde el flujo RAG mínimo hasta un agente asegurador completo con formulario, categorización, enrutamiento, suspensión e informes diferenciados.


Ejemplo 1 — RAG Chat (Simple)

Objetivo: Responder a las preguntas de los usuarios acudiendo a los documentos empresariales y a la Knowledge Base. El flujo más sencillo y más común.

Flujo:

Begin → Retrieval → LLM → Message

Configuración Completa

Nodo Begin

ParámetroValor
modeconversational
inputFields(vacío)

Nodo Retrieval (retrieval_1)

ParámetroValor
query{{sys.query}}
topK10
scoreThreshold0.5
useRerankingtrue
companyDocstrue
knowledgeBasetrue
legalSourcesfalse

Nodo LLM (llm_1)

ParámetroValor
modelwriter
temperature0.3
maxTokens2048

System Prompt:

Eres un asistente empresarial preciso y profesional. Responde siempre en español.
Basa tus respuestas EXCLUSIVAMENTE en los documentos proporcionados en el contexto.
Si la información requerida no está en los documentos, indícalo explícitamente: no inventes.
Cita siempre las fuentes con referencias numéricas [N].

User Prompt:

Documentos de contexto:
{{retrieval_1.formalized_content}}

Pregunta del usuario:
{{sys.query}}

Nodo Message (message_1)

ParámetroValor
content{{llm_1.content}}
formatmarkdown
showCitationstrue

Que Aprendes

  • Cómo usar {{sys.query}} como consulta de retrieval.
  • Cómo pasar {{retrieval_1.formalized_content}} al prompt LLM.
  • El patrón fundamental Begin → Retrieval → LLM → Message.
  • Cómo el nodo Message gestiona citas y formato.

Ejemplo 2 — Smart Router (Medio)

Objetivo: Gestionar preguntas de distintos tipos con LLM diferentes. Las preguntas técnicas usan el modelo writer para respuestas en profundidad; las preguntas simples usan el modelo planner para mayor velocidad; las preguntas fuera de ámbito reciben un mensaje estático.

Flujo:

Begin → Categorize → [Tecnico] → LLM writer → Message respuesta técnica
                   → [Simple] → LLM planner → Message respuesta rápida
                   → [FueraAmbito] → Message estático

Configuración Completa

Nodo Begin

ParámetroValor
modeconversational

Nodo Categorize (categorize_1)

ParámetroValor
input{{sys.query}}
minConfidence0.65

Categorías:

NombreDescripciónGoto
TecnicoPreguntas sobre productos, especificaciones técnicas, procedimientos, manuales, instalaciones, configuraciones, averías técnicasretrieval_tecnico
SimplePreguntas de carácter general, saludos, solicitudes de aclaración breve, preguntas sobre servicios básicosllm_rapido
FueraAmbitoPreguntas no pertinentes a la actividad empresarial, temas personales, contenidos no permitidosmessage_fuera_ambito

Rama Técnica

Nodo Retrieval (retrieval_tecnico):

ParámetroValor
query{{sys.query}}
topK15
useRerankingtrue
companyDocstrue
knowledgeBasetrue

Nodo LLM writer (llm_tecnico):

ParámetroValor
modelwriter
temperature0.2
maxTokens3000

System Prompt:

Eres un experto técnico empresarial. Proporciona respuestas detalladas, precisas y estructuradas.
Usa listas con viñetas y encabezados cuando sea útil. Cita las fuentes con [N].
La pregunta ha sido clasificada como TÉCNICA (confianza: {{categorize_1.confidence}}).

User Prompt:

Documentación técnica disponible:
{{retrieval_tecnico.formalized_content}}

Pregunta técnica:
{{sys.query}}

Nodo Message (message_tecnico):

ParámetroValor
content{{llm_tecnico.content}}
formatmarkdown
showCitationstrue

Rama Simple

Nodo LLM planner (llm_rapido):

ParámetroValor
modelplanner
temperature0.5
maxTokens512

System Prompt:

Eres un asistente empresarial amable. Responde de forma concisa y directa.

User Prompt:

{{sys.query}}

Nodo Message (message_rapido):

ParámetroValor
content{{llm_rapido.content}}
formatmarkdown
showCitationsfalse

Rama Fuera de Ámbito

Nodo Message (message_fuera_ambito):

ParámetroValor
contentEsta pregunta no está dentro del ámbito del asistente. Puedes preguntarme sobre productos, procedimientos técnicos o servicios empresariales.
formatplain
showCitationsfalse

Que Aprendes

  • Cómo usar Categorize para el enrutamiento semántico sin condiciones rígidas.
  • Cómo crear ramas paralelas con LLM distintos para eficiencia y calidad.
  • Cómo usar {{categorize_1.confidence}} en el prompt para mayor transparencia.
  • Cómo terminar ramas con mensajes estáticos o dinámicos.

Ejemplo 3 — Análisis de Siniestro Asegurador (Complejo)

Objetivo: Gestionar toda la pipeline de evaluación de un siniestro asegurador. El flujo recoge los datos iniciales, categoriza el tipo de siniestro, recupera pólizas y normativa aplicable, analiza la cobertura y — si la cobertura no está confirmada — solicita documentación adicional al usuario antes de generar el informe final.

Flujo completo:

Begin (formulario)
  → Categorize (tipo de siniestro)
    → VariableAssigner (prepara consulta)
      → Retrieval (pólizas + normativa)
        → LLM Análisis (evaluación de cobertura)
          → Switch (¿COBERTURA CONFIRMADA?)
            → [SI] LLM Informe Positivo → Message Resultado Positivo
            → [NO] UserFillUp (documentos adicionales)
                     → Retrieval suplementario
                       → LLM Informe Negativo → Message Resultado Negativo

Configuración Completa

Nodo Begin

ParámetroValor
modetask

Input Fields:

NombreEtiquetaTipoObligatorio
tipoSiniestroTipo de Siniestroselect [Auto, Vida, Hogar, Responsabilidad Civil, Otro]
fechaSiniestroFecha del Eventodate
descripcionDescripción del Sucesotext
numeroPolizaNúmero de Pólizastring
importoEstimadoImporte del Daño Estimado (€)numberNo

Nodo Categorize (categorize_1)

ParámetroValor
input{{sys.inputs.tipoSiniestro}}: {{sys.inputs.descripcion}}
minConfidence0.70

Categorías:

NombreDescripciónGoto
AutoAccidentes de tráfico, daños al vehículo, robo de auto, responsabilidad civil autovarassign_query
VidaFallecimiento, invalidez permanente, enfermedad grave, accidentesvarassign_query
HogarDaños en la vivienda, incendio, inundación, robo en casa, responsabilidad civil hogarvarassign_query
RCResponsabilidad civil frente a terceros, daños a personas o cosas causados por el aseguradovarassign_query
OtroSiniestros no clasificables en las categorías anterioresvarassign_query

(Todas las categorías convergen en el nodo siguiente; el valor {{categorize_1.category}} se usa en la consulta)

Nodo VariableAssigner (varassign_query)

yaml
assignments:
  - name: consultaBusqueda
    type: concat
    value: "Siniestro {{categorize_1.category}} poliza {{sys.inputs.numeroPoliza}} cobertura condiciones exclusiones {{sys.inputs.descripcion}}"
  - name: resumenSiniestro
    type: concat
    value: |
      TIPO SINIESTRO: {{sys.inputs.tipoSiniestro}} (categoría: {{categorize_1.category}})
      FECHA EVENTO: {{sys.inputs.fechaSiniestro}}
      NÚMERO PÓLIZA: {{sys.inputs.numeroPoliza}}
      IMPORTE ESTIMADO: {{sys.inputs.importoEstimado}} EUR
      DESCRIPCIÓN: {{sys.inputs.descripcion}}

Nodo Retrieval Principal (retrieval_polizze)

ParámetroValor
query{{varassign_query.consultaBusqueda}}
topK20
scoreThreshold0.45
useRerankingtrue
companyDocstrue
knowledgeBasetrue
legalSourcestrue

Nodo LLM Análisis de Cobertura (llm_analisi)

ParámetroValor
modelwriter
temperature0.1
maxTokens3000
jsonModefalse

System Prompt:

Eres un perito de seguros senior con 20 años de experiencia.
Analiza la documentación proporcionada y determina si el siniestro está cubierto por la póliza.

REGLAS CRÍTICAS:
1. Basa la evaluación EXCLUSIVAMENTE en los documentos proporcionados. No supongas coberturas no documentadas.
2. Cita siempre las referencias contractuales y normativas con [N].
3. Concluye SIEMPRE tu análisis con una de las dos frases exactas:
   - "VEREDICTO: COBERTURA CONFIRMADA" si el siniestro está dentro de las coberturas de la póliza
   - "VEREDICTO: COBERTURA NO CONFIRMADA" si faltan evidencias de cobertura o hay exclusiones aplicables
4. Tras el veredicto, enumera la documentación adicional necesaria (si la hay).

User Prompt:

DATOS DEL SINIESTRO:
{{varassign_query.resumenSiniestro}}

DOCUMENTACIÓN DE PÓLIZA Y NORMATIVA:
{{retrieval_polizze.formalized_content}}

Ejecuta la evaluación pericial completa siguiendo las reglas operativas.

Nodo Switch (switch_copertura)

ParámetroValor
elseGotouserfillup_integrativi

Condiciones:

VariableOperadorValorGoto
{{llm_analisi.content}}containsCOBERTURA CONFIRMADAllm_report_positivo

Rama Positiva — LLM Informe (llm_report_positivo)

ParámetroValor
modelwriter
temperature0.2
maxTokens2500

System Prompt:

Eres un experto en comunicación aseguradora. Redacta informes profesionales y claros.

User Prompt:

Sobre la base del siguiente análisis pericial, redacta un informe oficial de aceptación del siniestro
en español formal, estructurado con las secciones: Resumen, Documentación Examinada,
Evaluación de Cobertura, Próximos Pasos.

DATOS DEL SINIESTRO:
{{varassign_query.resumenSiniestro}}

ANÁLISIS PERICIAL:
{{llm_analisi.content}}

Nodo Message Resultado Positivo (message_positivo)

ParámetroValor
content{{llm_report_positivo.content}}
formatmarkdown
showCitationstrue

Rama Negativa — UserFillUp (userfillup_integrativi)

ParámetroValor
messageEl análisis inicial no ha determinado una cobertura segura. Para continuar con la evaluación, te pedimos que proporciones la documentación adicional indicada a continuación.

Fields:

NombreEtiquetaTipoObligatorio
fotoDanoFotografías del dañofile
peritajePeritaje técnico o valoración de dañosfileNo
documentoPropiedadDocumento de propiedad del bien aseguradofileNo
notasAdicionalesNotas adicionales o aclaracionestextNo

Tips: Formatos aceptados: PDF, JPG, PNG, DOCX. Tamaño máximo por archivo: 20MB.

Retrieval Suplementario (retrieval_supplementare)

ParámetroValor
query{{varassign_query.consultaBusqueda}} exclusiones limitaciones franquicia máximos
topK15
companyDocstrue
knowledgeBasetrue
legalSourcestrue

LLM Informe Negativo (llm_report_negativo)

ParámetroValor
modelwriter
temperature0.1
maxTokens3000

System Prompt:

Eres un experto en comunicación aseguradora. Redacta informes profesionales, transparentes y precisos.
El informe debe ser claro sobre las razones de la denegación o de la solicitud adicional,
e indicar con exactitud la documentación necesaria para continuar.

User Prompt:

Redacta un informe oficial de solicitud de documentación adicional para el siguiente siniestro.
Estructura el informe con las secciones: Resumen del Siniestro, Análisis Preliminar,
Motivo de la Solicitud Adicional, Documentación Recibida, Próximos Pasos.

DATOS DEL SINIESTRO:
{{varassign_query.resumenSiniestro}}

ANÁLISIS PERICIAL INICIAL:
{{llm_analisi.content}}

DOCUMENTACIÓN ADICIONAL RECIBIDA:
{{userfillup_integrativi.inputs.notasAdicionales}}

NORMATIVA Y CONDICIONES ADICIONALES:
{{retrieval_supplementare.formalized_content}}

Nodo Message Resultado Negativo (message_negativo)

ParámetroValor
content{{llm_report_negativo.content}}
formatmarkdown
showCitationstrue

Que Aprendes

  • Cómo construir un formulario estructurado con Begin en mode task.
  • Cómo usar Categorize para enrutamiento semántico con varias categorías.
  • Cómo VariableAssigner prepara datos compuestos para los nodos siguientes.
  • Cómo un LLM con System Prompt riguroso produce output predecible para Switch.
  • Cómo Switch enruta según el contenido textual de la respuesta LLM.
  • Cómo UserFillUp suspende el flujo y recoge documentos adicionales.
  • Cómo un segundo Retrieval enriquece el contexto después de la entrada del usuario.
  • Cómo diferenciar el tono y la estructura de los informes según el resultado positivo o negativo.

Queria v3.1.2 -- Canvas Agent Builder

Queria - Document Intelligence con Cog-RAG