Compartir a través de


Información general sobre la arquitectura del agente

En este artículo se tratan los conceptos clave de la arquitectura del marco del agente, incluidos los principios fundamentales, los objetivos de diseño y los objetivos estratégicos.

Objetivos

El Agent Framework se desarrolló teniendo en cuenta las siguientes prioridades clave:

  • El marco del agente de kernel semántico actúa como base básica para implementar las funcionalidades del agente.
  • Varios agentes de diferentes tipos pueden colaborar dentro de una sola conversación, cada uno contribuyendo a sus capacidades únicas, al tiempo que integra la entrada humana.
  • Un agente puede participar y administrar varias conversaciones simultáneas simultáneamente.

Agente

La clase abstracta Agent actúa como abstracción principal para todos los tipos de agentes, lo que proporciona una estructura fundamental que se puede ampliar para crear agentes más especializados. Esta clase base forma la base para implementaciones de agente más específicas, todas las cuales aprovechan las funcionalidades del kernel para ejecutar sus respectivas funciones. Consulte todos los tipos de agente disponibles en la sección Tipos de agente .

La abstracción semántica subyacente del kernel Agent se puede encontrar aquí.

La abstracción semántica subyacente del kernel Agent se puede encontrar aquí.

Los agentes se pueden invocar directamente para realizar tareas o orquestarse mediante patrones diferentes. Esta estructura flexible permite a los agentes adaptarse a varios escenarios conversacionales o controlados por tareas, lo que proporciona a los desarrolladores herramientas sólidas para crear sistemas inteligentes y multiagente.

Tipos de agente en kernel semántico

Hilo del agente

La clase abstracta principal AgentThread funciona como la abstracción central para hilos o estado de diálogo. Abstrae las distintas formas en que el estado de conversación se puede administrar para diferentes agentes.

Los servicios de agente con estado suelen almacenar el estado de conversación en el servicio y puede interactuar con él a través de un identificador. Otros agentes pueden requerir que se pase todo el historial de chat al agente en cada invocación, en cuyo caso el estado de la conversación se administra localmente en la aplicación.

Normalmente, los agentes con estado persistente solo funcionan con una implementación de AgentThread coincidente, mientras que otros tipos de agentes podrían funcionar con más de un tipo de AgentThread. Por ejemplo, AzureAIAgent requiere una AzureAIAgentThreadcoincidente. Esto se debe a que el servicio Agente de Azure AI almacena conversaciones en el servicio y requiere llamadas de servicio específicas para crear un subproceso y actualizarlo. Si se usa un tipo de subproceso de agente diferente con el AzureAIAgent, fallamos rápidamente debido a un tipo de subproceso inesperado y se genera una excepción para alertar al llamador.

Orquestación del agente

Importante

Las características de orquestación del agente en Agent Framework se encuentran en la fase experimental. Están en desarrollo activo y pueden cambiar significativamente antes de avanzar a la fase de versión preliminar o candidata para lanzamiento.

Nota:

Si ha estado usando el AgentGroupChat patrón de orquestación, tenga en cuenta que ya no se mantiene. Se recomienda a los desarrolladores que usen el nuevo GroupChatOrchestration patrón. Aquí se proporciona una guía de migración.

El marco de orquestación del agente en kernel semántico permite la coordinación de varios agentes para resolver tareas complejas de forma colaborativa. Proporciona una estructura flexible para definir cómo interactúan los agentes, comparten información y deleguen las responsabilidades. Los principales componentes y conceptos incluyen:

  • Patrones de orquestación: Los patrones pregenerados como Concurrent, Sequential, Handoff, Group Chat y Magentic permiten a los desarrolladores elegir el modelo de colaboración más adecuado para su escenario. Cada patrón define una manera diferente de que los agentes se comuniquen y procesen tareas (consulte la tabla Patrones de orquestación para obtener más información).
  • Lógica de transformación de datos: Las transformaciones de entrada y salida permiten que los flujos de orquestación adapten los datos entre agentes y sistemas externos, lo que admite tipos de datos simples y complejos.
  • Humano en el círculo de retroalimentación: Algunos patrones permiten la participación humana en el círculo de retroalimentación, lo que facilita a los agentes humanos formar parte del proceso de orquestación. Esto es especialmente útil para escenarios en los que se requiere juicio humano o experiencia.

Esta arquitectura permite a los desarrolladores crear sistemas inteligentes y multiagente que pueden abordar problemas reales a través de la colaboración, especialización y coordinación dinámica.

Alineación del agente con las características del kernel semántico

Agent Framework se basa en los conceptos fundamentales y las características que muchos desarrolladores han llegado a conocer dentro del ecosistema de kernel semántico. Estos principios básicos sirven como bloques de creación para el diseño de Agent Framework. Al aprovechar la estructura y las funcionalidades conocidas del kernel semántico, Agent Framework amplía su funcionalidad para habilitar comportamientos de agente autónomos más avanzados, a la vez que mantiene la coherencia con la arquitectura semántica de kernel más amplia. Esto garantiza una transición fluida para los desarrolladores, lo que les permite aplicar sus conocimientos existentes para crear agentes inteligentes y adaptables dentro del marco.

Complementos y llamadas a funciones

Los complementos son un aspecto fundamental del kernel semántico, lo que permite a los desarrolladores integrar funcionalidades personalizadas y ampliar las funcionalidades de una aplicación de inteligencia artificial. Estos complementos ofrecen una manera flexible de incorporar características especializadas o lógica específica del negocio en los flujos de trabajo principales de inteligencia artificial. Además, las funcionalidades del agente dentro del marco se pueden mejorar significativamente mediante el uso de complementos y el aprovechamiento de las llamadas a funciones. Esto permite a los agentes interactuar dinámicamente con servicios externos o ejecutar tareas complejas, ampliando aún más el ámbito y la versatilidad del sistema de inteligencia artificial en diversas aplicaciones.

Obtenga información sobre cómo configurar agentes para usar complementos aquí.

Mensajes del agente

La mensajería del agente, incluida la entrada y la respuesta, se basa en los tipos de contenido principales del kernel semántico, lo que proporciona una estructura unificada para la comunicación. Esta opción de diseño simplifica el proceso de transición de patrones tradicionales de finalización de chat a patrones controlados por agentes más avanzados en el desarrollo de aplicaciones. Al aprovechar los tipos de contenido de kernel semántico conocidos, los desarrolladores pueden integrar sin problemas las funcionalidades del agente en sus aplicaciones sin necesidad de revisar los sistemas existentes. Esta optimización garantiza que a medida que evolucione de la inteligencia artificial conversacional básica a agentes más autónomos y orientados a tareas, el marco subyacente sigue siendo coherente, lo que hace que el desarrollo sea más rápido y eficaz.

Plantillas

El rol de un agente se configura principalmente por las instrucciones que recibe, lo que dicta su comportamiento y sus acciones. De forma similar a invocar una solicitud, las instrucciones de un Kernelagente pueden incluir parámetros con plantilla (tanto valores como funciones) que se sustituyen dinámicamente durante la ejecución. Esto permite respuestas flexibles y compatibles con el contexto, lo que permite al agente ajustar su salida en función de la entrada en tiempo real.

Además, un agente se puede configurar directamente mediante una configuración de plantilla de solicitud, lo que proporciona a los desarrolladores una manera estructurada y reutilizable de definir su comportamiento. Este enfoque ofrece una herramienta eficaz para estandarizar y personalizar las instrucciones del agente, lo que garantiza la coherencia en varios casos de uso, a la vez que mantiene la adaptabilidad dinámica.

Obtenga más información sobre cómo crear un agente con la plantilla kernel semántica aquí.

Especificación declarativa

La documentación sobre el uso de especificaciones declarativas estará disponible próximamente.

Importante

Esta característica está en la fase experimental. Las características de esta fase están en desarrollo y están sujetas a cambios antes de avanzar a la fase de versión preliminar o candidata para lanzamiento.

Registro de tipos de agente personalizados

Para usar un agente personalizado con el sistema de especificación YAML declarativo, primero debe registrar la clase de agente en el registro de agentes. Esto es necesario para que AgentRegistry pueda reconocer y construir tu agente al analizar el campo type: en la especificación de YAML.

Para registrar un tipo de agente personalizado, use el @register_agent_type decorador:

from semantic_kernel.agents import register_agent_type, Agent, DeclarativeSpecMixin

@register_agent_type("custom_agent")
class CustomAgent(DeclarativeSpecMixin, Agent):
    ...

La cadena proporcionada al decorador (por ejemplo, "custom_agent") debe coincidir con el tipo: campo de la especificación de YAML.

Una vez registrado, se puede crear una instancia del agente personalizado mediante el patrón declarativo, por ejemplo a través de AgentRegistry.create_from_yaml(...).

DeclarativeSpecMixin Agrega compatibilidad con métodos como from_yaml, from_dicty resolve_placeholders, que permiten que el agente se construya a partir de una especificación de diccionario o YAML:

@classmethod
async def from_yaml(cls, yaml_str: str, *, kernel=None, plugins=None, prompt_template_config=None, settings=None, extras=None, **kwargs):
    # Resolves placeholders and loads YAML, then delegates to from_dict.
    ...

@classmethod
async def from_dict(cls, data: dict, *, kernel=None, plugins=None, prompt_template_config=None, settings=None, **kwargs):
    # Normalizes and passes spec fields to _from_dict.
    ...

@classmethod
@abstractmethod
async def _from_dict(cls, data: dict, *, kernel, prompt_template_config=None, **kwargs):
    # Subclasses implement this to create the agent from a dict.
    ...

@classmethod
def resolve_placeholders(cls, yaml_str: str, settings=None, extras=None) -> str:
    # Optional: override this to customize how environment or runtime placeholders are resolved in YAML.
    return yaml_str

Sugerencia

Cualquier agente personalizado debe heredar de DeclarativeSpecMixin para habilitar la construcción basada en YAML y debe registrarse en el registro mediante @register_agent_type.

Esta característica no está disponible.

Pasos siguientes