Compartir a través de


AgentGroupChat Guía de migración de orquestación

Se trata de una guía de migración para los desarrolladores que han estado usando el AgentGroupChat semántico en Kernel y quieren realizar la transición al nuevo GroupChatOrchestration. La nueva clase proporciona una manera más flexible y eficaz de administrar las interacciones de chat en grupo entre los agentes.

Migrando de AgentGroupChat a GroupChatOrchestration

La nueva GroupChatOrchestration clase reemplaza por AgentGroupChat un modelo de orquestación extensible unificado. Aquí se muestra cómo migrar el código de C#:

Paso 1: Reemplazar Usings y Referencias de Clase

  • Elimine cualquier instrucción de using o referencia a AgentChat y AgentGroupChat. Por ejemplo, quite lo siguiente:

    using Microsoft.SemanticKernel.Agents.Chat;
    
  • Agregue una referencia al nuevo namespace de orquestación.

    using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;
    

Paso 2: Actualizar inicialización

antes:

AgentGroupChat chat = new(agentWriter, agentReviewer)
{
    ExecutionSettings = new()
    {
        SelectionStrategy = new CustomSelectionStrategy(),
        TerminationStrategy = new CustomTerminationStrategy(),
    }
};

después:

using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;

GroupChatOrchestration orchestration = new(
    new RoundRobinGroupChatManager(),
    agentWriter,
    agentReviewer);

Paso 3: Iniciar el chat en grupo

antes:

chat.AddChatMessage(input);
await foreach (var response in chat.InvokeAsync())
{
    // handle response
}

después:

using Microsoft.SemanticKernel.Agents.Orchestration;
using Microsoft.SemanticKernel.Agents.Runtime.InProcess;

InProcessRuntime runtime = new();
await runtime.StartAsync();

OrchestrationResult<string> result = await orchestration.InvokeAsync(input, runtime);
string text = await result.GetValueAsync(TimeSpan.FromSeconds(timeout));

Paso 4: Personalización de la orquestación

El nuevo modelo de orquestación permite crear estrategias personalizadas para la terminación, la selección de agentes y más, mediante la creación de subclases de GroupChatManager y la sobrescritura de sus métodos. Consulte la documentación de GroupChatOrchestration para obtener más detalles.

Paso 5: Eliminación de API en desuso

Quite cualquier código que manipule directamente propiedades o métodos AgentGroupChatespecíficos, ya que ya no se mantienen.

Paso 6: Revisar y probar

  • Revise el código para ver las referencias restantes a las clases antiguas.
  • Pruebe los escenarios de chat de grupo para asegurarse de que la nueva orquestación se comporta según lo previsto.

Ejemplo completo

En esta guía se muestra cómo migrar la lógica principal de Step03_Chat.cs de AgentGroupChat a la nueva GroupChatOrchestration, incluido un gestor personalizado de chat en grupo que implementa la estrategia de finalización basada en aprobación.

Paso 1: Definición del agente

No se necesitan cambios en la definición del agente. Puede seguir usando los mismos AgentWriter valores y AgentReviewer que antes.

Paso 2: Implementar un administrador de chat de grupo personalizado

Cree un GroupChatManager personalizado que finalice el chat si el último mensaje contiene "aprobar" y que solo el revisor pueda aprobar.

private sealed class ApprovalGroupChatManager : RoundRobinGroupChatManager
{
    private readonly string _approverName;
    public ApprovalGroupChatManager(string approverName)
    {
        _approverName = approverName;
    }

    public override ValueTask<GroupChatManagerResult<bool>> ShouldTerminate(ChatHistory history, CancellationToken cancellationToken = default)
    {
        var last = history.LastOrDefault();
        bool shouldTerminate = last?.AuthorName == _approverName &&
            last.Content?.Contains("approve", StringComparison.OrdinalIgnoreCase) == true;
        return ValueTask.FromResult(new GroupChatManagerResult<bool>(shouldTerminate)
        {
            Reason = shouldTerminate ? "Approved by reviewer." : "Not yet approved."
        });
    }
}

Paso 3: Inicializar la orquestación

Reemplace la AgentGroupChat inicialización por:

var orchestration = new GroupChatOrchestration(
    new ApprovalGroupChatManager(ReviewerName)
    {
        MaximumInvocationCount = 10
    },
    agentWriter,
    agentReviewer);

Paso 4: Ejecutar la orquestación

Reemplace el bucle de mensajes por:

var runtime = new InProcessRuntime();
await runtime.StartAsync();

var result = await orchestration.InvokeAsync("concept: maps made out of egg cartons.", runtime);
string text = await result.GetValueAsync(TimeSpan.FromSeconds(60));
Console.WriteLine($"\n# RESULT: {text}");

await runtime.RunUntilIdleAsync();

Resumen

  • Use una GroupChatManager personalizada para la finalización basada en la aprobación.
  • Reemplaza el bucle de chat por la invocación de orquestación.
  • El resto de la configuración del agente y el formato de mensajes pueden permanecer sin cambios.

Migración de AgentGroupChat a GroupChatOrchestration

La nueva GroupChatOrchestration API de Python reemplaza el patrón anterior AgentGroupChat , lo que proporciona una manera más flexible y extensible de administrar conversaciones multiagente. A continuación se muestra cómo migrar el código:

Paso 1: Reemplazar importaciones y referencias de clase

  • Quite cualquier importación o referencia a AgentGroupChat y a las estrategias relacionadas. Por ejemplo, quite lo siguiente:

    from semantic_kernel.agents import AgentGroupChat
    
  • Importe las nuevas clases de orquestación:

    from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager
    from semantic_kernel.agents.runtime import InProcessRuntime
    

Paso 2: Actualizar inicialización

Reemplace AgentGroupChat con GroupChatOrchestration y un GroupChatManager (por ejemplo, RoundRobinGroupChatManager o uno personalizado) para controlar el flujo.

antes:

group_chat = AgentGroupChat(
    agents=[agent_writer, agent_reviewer],
    termination_strategy=CustomTerminationStrategy(),
    selection_strategy=CustomSelectionStrategy(),
)

después:

from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager

orchestration = GroupChatOrchestration(
    members=[agent_writer, agent_reviewer],
    manager=RoundRobinGroupChatManager(),
)

Paso 3: Iniciar el chat en grupo

antes:

await group_chat.add_chat_message(message=TASK)
async for content in group_chat.invoke():
    # handle response

después:

from semantic_kernel.agents.runtime import InProcessRuntime

runtime = InProcessRuntime()
runtime.start()

orchestration_result = await group_chat_orchestration.invoke(task=TASK, runtime=runtime)
value = await orchestration_result.get()

Paso 4: Personalización de la orquestación

El nuevo modelo de orquestación permite crear estrategias personalizadas para la terminación, la selección de agentes y más, mediante la subclase de GroupChatManager y la sobreescritura de sus métodos. Consulte la documentación de GroupChatOrchestration para obtener más detalles.

Paso 5: Eliminación de API en desuso

Quite cualquier código que manipule directamente propiedades o métodos AgentGroupChatespecíficos, ya que ya no se mantienen.

Paso 6: Revisar y probar

  • Revise el código para ver las referencias restantes a las clases antiguas.
  • Pruebe los escenarios de chat de grupo para asegurarse de que la nueva orquestación se comporta según lo previsto.

Ejemplo completo

En esta guía se muestra cómo migrar la lógica principal de step06_chat_completion_agent_group_chat.py de AgentGroupChat a la nueva GroupChatOrchestration, incluido un gestor personalizado de chat en grupo que implementa la estrategia de finalización basada en aprobación.

Paso 1: Definición del agente

No se necesitan cambios en la definición del agente. Puede seguir usando los mismos AgentWriter valores y AgentReviewer que antes.

Paso 2: Implementar un administrador de chat de grupo personalizado

Cree un GroupChatManager personalizado que termine el chat cuando el último mensaje incluya "aprobado" y solo el revisor tenga la capacidad de aprobarlo.

from semantic_kernel.agents import RoundRobinGroupChatManager, BooleanResult

class ApprovalGroupChatManager(RoundRobinGroupChatManager):
    def __init__(self, approver_name: str, max_rounds: int = 10):
        super().__init__(max_rounds=max_rounds)
        self._approver_name = approver_name

    async def should_terminate(self, chat_history):
        last = chat_history[-1] if chat_history else None
        should_terminate = (
            last is not None and
            getattr(last, 'name', None) == self._approver_name and
            'approved' in (last.content or '').lower()
        )
        return BooleanResult(result=should_terminate, reason="Approved by reviewer." if should_terminate else "Not yet approved.")

Paso 3: Inicializar la orquestación

Reemplace la AgentGroupChat inicialización por:

from semantic_kernel.agents import GroupChatOrchestration
from semantic_kernel.agents.runtime import InProcessRuntime

orchestration = GroupChatOrchestration(
    members=[agent_writer, agent_reviewer],
    manager=ApprovalGroupChatManager(approver_name=REVIEWER_NAME, max_rounds=10),
)

Paso 4: Ejecutar la orquestación

Reemplace el bucle de mensajes por:

runtime = InProcessRuntime()
runtime.start()

orchestration_result = await orchestration.invoke(
    task="a slogan for a new line of electric cars.",
    runtime=runtime,
)

value = await orchestration_result.get()
print(f"***** Result *****\n{value}")

await runtime.stop_when_idle()

Resumen

  • Use una GroupChatManager personalizada para la finalización basada en la aprobación.
  • Reemplaza el bucle de chat por la invocación de orquestación.
  • El resto de la configuración del agente y el formato de mensajes pueden permanecer sin cambios.

Nota:

La orquestación del agente aún no está disponible en el SDK de Java.