Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 aAgentChat
eAgentGroupChat
. 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 AgentGroupChat
direttamente 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 AgentGroupChat
direttamente 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.