Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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
usingou referência aAgentChateAgentGroupChat. 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
GroupChatManagerpersonalizado 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
AgentGroupChate estratégias relacionadas. Por exemplo, remova:from semantic_kernel.agents import AgentGroupChatImporte 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
GroupChatManagerpersonalizado 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.