Partilhar via


AgentGroupChat Guia de migração de orquestração

Este é um guia de migração para desenvolvedores que têm usado o Kernel Semântico AgentGroupChat e desejam fazer a transição para o novo GroupChatOrchestration. A nova classe fornece uma maneira mais flexível e poderosa de gerenciar interações de bate-papo em grupo entre agentes.

Migrando de AgentGroupChat para GroupChatOrchestration

A nova GroupChatOrchestration classe substitui o AgentGroupChat por um modelo de orquestração unificado e extensível. Veja como migrar seu código C#:

Etapa 1: Substituir usos e referências de classe

  • Remova qualquer instrução using ou referência a AgentChat e AgentGroupChat. Por exemplo, remova:

    using Microsoft.SemanticKernel.Agents.Chat;
    
  • Adicione uma referência ao novo namespace de orquestração:

    using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;
    

Etapa 2: Atualizar a inicialização

Antes:

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

Depois:

using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;

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

Etapa 3: Iniciar o bate-papo em grupo

Antes:

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

Depois:

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));

Etapa 4: Personalizando a orquestração

O novo modelo de orquestração permite que você crie estratégias personalizadas para terminação, seleção de agentes e muito mais, subclassificando GroupChatManager e substituindo seus métodos. Consulte a documentação do GroupChatOrchestration para obter mais detalhes.

Etapa 5: Remover APIs preteridas

Remova qualquer código que manipule diretamente propriedades ou métodos específicos de AgentGroupChat, pois eles não são mais mantidos.

Etapa 6: Revisão e teste

  • Revise seu código para verificar se há referências restantes às classes antigas.
  • Teste seus cenários de bate-papo em grupo para garantir que a nova orquestração se comporte conforme o esperado.

Exemplo completo

Este guia demonstra como migrar a lógica principal de Step03_Chat.cs do AgentGroupChat para o novo GroupChatOrchestration, incluindo um gestor de chat de grupo personalizado que implementa a estratégia de encerramento baseada em aprovação.

Etapa 1: Definição do agente

Não são necessárias alterações na definição do agente. Você pode continuar usando o mesmo AgentWriter e AgentReviewer como antes.

Etapa 2: Implementar um Gerenciador de Chat de Grupo personalizado

Crie um GroupChatManager personalizado que encerre o bate-papo quando a última mensagem contiver "aprovar" e apenas o revisor puder aprovar.

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."
        });
    }
}

Etapa 3: Inicializar a orquestração

Substitua a AgentGroupChat inicialização por:

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

Etapa 4: Executar a orquestração

Substitua o loop de mensagens 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();

Resumo

  • Utilize um GroupChatManager personalizado para terminação com base em aprovação.
  • Substitua o loop de chat pela invocação de orquestração.
  • O restante da configuração do agente e a formatação da mensagem podem permanecer inalterados.

Migrando de AgentGroupChat para GroupChatOrchestration

A nova GroupChatOrchestration API em Python substitui o padrão antigo AgentGroupChat , fornecendo uma maneira mais flexível e extensível de gerenciar conversas com vários agentes. Veja como migrar seu código:

Etapa 1: Substituir importações e referências de classe

  • Remova quaisquer importações ou referências a AgentGroupChat e estratégias relacionadas. Por exemplo, remova:

    from semantic_kernel.agents import AgentGroupChat
    
  • Importe as novas classes de orquestração:

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

Etapa 2: Atualizar a inicialização

Substitua AgentGroupChat por GroupChatOrchestration e um GroupChatManager (por exemplo, RoundRobinGroupChatManager ou um personalizado) para controlar o fluxo.

Antes:

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

Depois:

from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager

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

Etapa 3: Iniciar o bate-papo em grupo

Antes:

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

Depois:

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()

Etapa 4: Personalizando a orquestração

O novo modelo de orquestração permite que você crie estratégias personalizadas para terminação, seleção de agentes e muito mais, subclassificando GroupChatManager e substituindo seus métodos. Consulte a documentação do GroupChatOrchestration para obter mais detalhes.

Etapa 5: Remover APIs preteridas

Remova qualquer código que manipule diretamente propriedades ou métodos específicos de AgentGroupChat, pois eles não são mais mantidos.

Etapa 6: Revisão e teste

  • Revise seu código para verificar se há referências restantes às classes antigas.
  • Teste seus cenários de bate-papo em grupo para garantir que a nova orquestração se comporte conforme o esperado.

Exemplo completo

Este guia demonstra como migrar a lógica principal de step06_chat_completion_agent_group_chat.py do AgentGroupChat para o novo GroupChatOrchestration, incluindo um gestor de chat de grupo personalizado que implementa a estratégia de encerramento baseada em aprovação.

Etapa 1: Definição do agente

Não são necessárias alterações na definição do agente. Você pode continuar usando o mesmo AgentWriter e AgentReviewer como antes.

Etapa 2: Implementar um Gerenciador de Chat de Grupo personalizado

Crie um GroupChatManager personalizado que encerre o bate-papo quando a última mensagem contiver "aprovado" e apenas o revisor puder aprovar:

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.")

Etapa 3: Inicializar a orquestração

Substitua a AgentGroupChat inicialização 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),
)

Etapa 4: Executar a orquestração

Substitua o loop de mensagens 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()

Resumo

  • Utilize um GroupChatManager personalizado para terminação com base em aprovação.
  • Substitua o loop de chat pela invocação de orquestração.
  • O restante da configuração do agente e a formatação da mensagem podem permanecer inalterados.

Observação

A orquestração de agentes ainda não está disponível no Java SDK.