Creación de Mensajes Multimodales en AgentScope sin Programación

AgentScope ofrece un sistema flexible y expresivo para construir interacciones multimodales —texto, imágenes, audio, video y razonamiento— sin necesidad de escribir código complejo. Su modelo de mensajes permite representar información heterogénea de forma estructurada, facilitando la integración con modelos de lenguaje, herramiantas externas y flujos de trabajo colaborativos entre agentes.

Estructura Fundamental del Mensaje

Cada mensaje en AgentScope se representa mediante la clase Msg, cuya estructura incluye cuatro componentes esenciales:

  • name: identificador del emisor (ej. "analyst" o "user_interface")
  • role: rol semántico ("user", "assistant", "system")
  • content: puede ser una cadena simple o una lista de bloques tipados
  • metadata: diccionario opcional para anotaciones técnicas (no visible al modelo)

Mesnajes de Texto: Sencillez y Eficacia

Para escenarios conversacionales básicos, basta con instanciar un mensaje con contenido textual:

from agentscope.message import Msg

mensaje_simple = Msg(
    name="asistente",
    role="assistant",
    content="He procesado tu solicitud correctamente.",
)

Bloques Multimodales: Combinación de Tipos de Datos

La verdadera potecnia surge al componer múltiples bloques dentro de content. Cada bloque encapsula un tipo específico de dato y su metainformación:

Bloque Uso típico Ejemplo de uso
TextBlock Contenido descriptivo o instrucciones text="Revisa esta imagen y describe los objetos visibles."
ImageBlock Imágenes codificadas en base64 o referencias a URI source=Base64Source(media_type="image/png", data="iVBORw0KGgo...")
AudioBlock Fragmentos de audio para transcripción o análisis source=Base64Source(media_type="audio/wav", data="UklGRigAAABXQVZFZm1t...")

Ejemplo de mensaje compuesto:

from agentscope.message import Msg, TextBlock, ImageBlock, AudioBlock, Base64Source

mensaje_compuesto = Msg(
    name="analizador_multimodal",
    role="assistant",
    content=[
        TextBlock(type="text", text="Adjunto análisis visual y auditivo."),
        ImageBlock(
            type="image",
            source=Base64Source(
                type="base64",
                media_type="image/jpeg",
                data="ffd8ffe000104a464946..."  # datos reales omitidos por brevedad
            )
        ),
        AudioBlock(
            type="audio",
            source=Base64Source(
                type="base64",
                media_type="audio/ogg",
                data="4f6767530002000000000000..."  # datos reales omitidos por brevedad
            )
        )
    ]
)

Razonamiento Explicable con ThinkingBlock

Para aumentar la transparencia en sistemas basados en LLM, se puede insertar pasos intermedios de razonamiento:

from agentscope.message import Msg, ThinkingBlock, TextBlock

mensaje_con_razonamiento = Msg(
    name="agente_cognitivo",
    role="assistant",
    content=[
        ThinkingBlock(
            type="thinking",
            thinking="Primero identificaré la ubicación mencionada, luego buscaré datos meteorológicos actualizados."
        ),
        TextBlock(
            type="text",
            text="El pronóstico para Madrid indica cielo despejado y 22 °C."
        )
    ]
)

Integración con Herramientas Externas

Los bloques ToolUseBlock y ToolResultBlock permiten orquestar llamadas a APIs o servicios externos:

# Solicitud de herramienta
solicitud_herramienta = Msg(
    name="coordinador",
    role="assistant",
    content=[
        ToolUseBlock(
            type="tool_use",
            id="req_789",
            name="consultar_calendario",
            input={"fecha": "2024-06-15"}
        )
    ]
)

# Respuesta de herramienta
respuesta_herramienta = Msg(
    name="sistema",
    role="system",
    content=[
        ToolResultBlock(
            type="tool_result",
            id="req_789",
            name="consultar_calendario",
            output={"evento": "Reunión de revisión trimestral", "hora": "10:00"}
        )
    ]
)

Serialización y Persistencia

Los mensajes pueden convertirse fácilmente a formato JSON para almacenamiento o transporte:

import json

# Serializar
datos_serializados = mensaje_compuesto.to_dict()
print(json.dumps(datos_serializados, indent=2, ensure_ascii=False))

# Deserializar
mensaje_recuperado = Msg.from_dict(datos_serializados)

Casos de Uso Prácticos

Este modelo de mensajes se aplica eficazmente en:

  • Sistemas de soporte técnico que interpretan capturas de pantalla junto con descripciones de errores
  • Plataformas educativas que sincronizan explicaciones verbales, diagramas y ejemplos interactivos
  • Flujos de trabajo de investigación donde agentes especializados intercambian hallazgos multimodales
  • Aplicaciones de accesibilidad que combinan texto, símbolos y audio para usuarios diversos

Etiquetas: agentscope multimodal messaging Python LLM

Publicado el 10-10 10:07