Condividi tramite


AgentGroupChat Guida alla migrazione dell'orchestrazione

Si tratta di una guida alla migrazione per gli sviluppatori che hanno utilizzato il AgentGroupChat in Semantic Kernel e vogliono passare al nuovo GroupChatOrchestration oggetto. La nuova classe offre un modo più flessibile e potente per gestire le interazioni di chat di gruppo tra gli agenti.

Migrazione da AgentGroupChat a GroupChatOrchestration

La nuova GroupChatOrchestration classe sostituisce con AgentGroupChat un modello di orchestrazione unificato ed estendibile. Ecco come eseguire la migrazione del codice C#:

Passaggio 1: Sostituire le istruzioni "using" e i riferimenti alle classi

  • Rimuovi eventuali dichiarazioni using o riferimenti a AgentChat e AgentGroupChat. Ad esempio, rimuovere:

    using Microsoft.SemanticKernel.Agents.Chat;
    
  • Aggiungi un riferimento al nuovo spazio dei nomi di orchestrazione.

    using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;
    

Passaggio 2: Aggiornare l'inizializzazione

prima:

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

dopo:

using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;

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

Passaggio 3: Avviare la chat di gruppo

prima:

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

dopo:

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

Passaggio 4: Personalizzazione dell'orchestrazione

Il nuovo modello di orchestrazione consente di creare strategie personalizzate per la terminazione, la selezione dell'agente e altro ancora tramite la sottoclasse GroupChatManager e l'override dei relativi metodi. Per altri dettagli, vedere la documentazione di GroupChatOrchestration .

Passaggio 5: Rimuovere le API deprecate

Rimuovere qualsiasi codice che modifica AgentGroupChatdirettamente proprietà o metodi specifici, perché non vengono più mantenuti.

Passaggio 6: Esaminare e testare

  • Esaminare il codice per eventuali riferimenti rimanenti alle classi precedenti.
  • Testare gli scenari di chat di gruppo per assicurarsi che la nuova orchestrazione si comporti come previsto.

Esempio completo

Questa guida illustra come eseguire la migrazione della logica di base di Step03_Chat.cs da AgentGroupChat a nuovo GroupChatOrchestration, incluso un gestore di chat di gruppo personalizzato che implementa la strategia di terminazione basata sull'approvazione.

Passaggio 1: Definizione agente

Non sono necessarie modifiche nella definizione dell'agente. È possibile continuare a usare lo stesso AgentWriter e AgentReviewer come in precedenza.

Passaggio 2: Implementare un gestore chat di gruppo personalizzato

Creare un personalizzato GroupChatManager che termina la chat quando l'ultimo messaggio contiene "approva" e solo il revisore può approvare:

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

Passaggio 3: Inizializzare l'orchestrazione

Sostituire l'inizializzazione AgentGroupChat con:

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

Passaggio 4: Eseguire l'orchestrazione

Sostituire il ciclo di messaggi con:

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

Riassunto

  • Utilizzare un oggetto personalizzato GroupChatManager per una cessazione basata su approvazione.
  • Sostituire il ciclo di chat con la chiamata di orchestrazione.
  • Il resto della configurazione dell'agente e la formattazione dei messaggi possono rimanere invariati.

Migrazione da AgentGroupChat a GroupChatOrchestration

La nuova GroupChatOrchestration API in Python sostituisce il modello precedente AgentGroupChat , offrendo un modo più flessibile ed estendibile per gestire le conversazioni multi-agente. Ecco come eseguire la migrazione del codice:

Passaggio 1: Sostituire le importazioni e i riferimenti alle classi

  • Rimuovere eventuali importazioni o riferimenti a AgentGroupChat e strategie correlate. Ad esempio, rimuovere:

    from semantic_kernel.agents import AgentGroupChat
    
  • Importare le nuove classi di orchestrazione:

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

Passaggio 2: Aggiornare l'inizializzazione

Sostituire AgentGroupChat con GroupChatOrchestration e ( GroupChatManager ad esempio, RoundRobinGroupChatManager o personalizzato) per controllare il flusso.

prima:

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

dopo:

from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager

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

Passaggio 3: Avviare la chat di gruppo

prima:

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

dopo:

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

Passaggio 4: Personalizzazione dell'orchestrazione

Il nuovo modello di orchestrazione consente di creare strategie personalizzate per la terminazione, la selezione dell'agente e altro ancora tramite la sottoclasse GroupChatManager e l'override dei relativi metodi. Per altri dettagli, vedere la documentazione di GroupChatOrchestration .

Passaggio 5: Rimuovere le API deprecate

Rimuovere qualsiasi codice che modifica AgentGroupChatdirettamente proprietà o metodi specifici, perché non vengono più mantenuti.

Passaggio 6: Esaminare e testare

  • Esaminare il codice per eventuali riferimenti rimanenti alle classi precedenti.
  • Testare gli scenari di chat di gruppo per assicurarsi che la nuova orchestrazione si comporti come previsto.

Esempio completo

Questa guida illustra come eseguire la migrazione della logica di base di step06_chat_completion_agent_group_chat.py da AgentGroupChat a nuovo GroupChatOrchestration, incluso un gestore di chat di gruppo personalizzato che implementa la strategia di terminazione basata sull'approvazione.

Passaggio 1: Definizione agente

Non sono necessarie modifiche nella definizione dell'agente. È possibile continuare a usare lo stesso AgentWriter e AgentReviewer come in precedenza.

Passaggio 2: Implementare un gestore chat di gruppo personalizzato

Creare un oggetto personalizzato GroupChatManager che termina la chat quando l'ultimo messaggio contiene "approvato" e solo il revisore può approvare:

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

Passaggio 3: Inizializzare l'orchestrazione

Sostituire l'inizializzazione AgentGroupChat con:

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

Passaggio 4: Eseguire l'orchestrazione

Sostituire il ciclo di messaggi con:

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

Riassunto

  • Usare un oggetto personalizzato GroupChatManager per la terminazione basata sull'approvazione.
  • Sostituire il ciclo di chat con la chiamata di orchestrazione.
  • Il resto della configurazione dell'agente e la formattazione dei messaggi possono rimanere invariati.

Annotazioni

L'orchestrazione dell'agente non è ancora disponibile in Java SDK.