Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dies ist ein Migrationsleitfaden für Entwickler, die den AgentGroupChat
semantischen Kernel verwendet haben und zu dem neuen GroupChatOrchestration
wechseln möchten. Die neue Klasse bietet eine flexiblere und leistungsfähigere Möglichkeit zum Verwalten von Gruppenchatinteraktionen zwischen Agents.
Migrieren von AgentGroupChat
zu GroupChatOrchestration
Die neue GroupChatOrchestration
Klasse ersetzt das AgentGroupChat
durch ein einheitliches, erweiterbares Orchestrierungsmodell. Hier erfahren Sie, wie Sie Ihren C#-Code migrieren:
Schritt 1: Ersetzen der Usings und der Klassenbezüge
Entfernen Sie alle
using
Elemente oder Verweise aufAgentChat
undAgentGroupChat
. Entfernen Sie beispielsweise Folgendes:using Microsoft.SemanticKernel.Agents.Chat;
Fügen Sie einen Verweis auf den neuen Orchestrierungsnamespace hinzu:
using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;
Schritt 2: Initialisierung aktualisieren
Vor:
AgentGroupChat chat = new(agentWriter, agentReviewer)
{
ExecutionSettings = new()
{
SelectionStrategy = new CustomSelectionStrategy(),
TerminationStrategy = new CustomTerminationStrategy(),
}
};
Nach:
using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;
GroupChatOrchestration orchestration = new(
new RoundRobinGroupChatManager(),
agentWriter,
agentReviewer);
Schritt 3: Starten des Gruppenchats
Vor:
chat.AddChatMessage(input);
await foreach (var response in chat.InvokeAsync())
{
// handle response
}
Nach:
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));
Schritt 4: Anpassen der Orchestrierung
Mit dem neuen Orchestrierungsmodell können Sie benutzerdefinierte Strategien für die Beendigung, die Agentenauswahl und vieles mehr erstellen, indem Sie GroupChatManager
unterklassifizieren und dessen Methoden überschreiben. Weitere Informationen finden Sie in der GroupChatOrchestration-Dokumentation .
Schritt 5: Entfernen veralteter APIs
Entfernen Sie jeglichen Code, der direkt AgentGroupChat
-spezifische Eigenschaften oder Methoden bearbeitet, da sie nicht mehr unterstützt werden.
Schritt 6: Überprüfen und Testen
- Überprüfen Sie Ihren Code auf alle verbleibenden Verweise auf die alten Klassen.
- Testen Sie Ihre Gruppenchatszenarien, um sicherzustellen, dass sich die neue Orchestrierung wie erwartet verhält.
Vollständiges Beispiel
In diesem Leitfaden wird veranschaulicht, wie Sie die Kernlogik von Step03_Chat.cs
AgentGroupChat
zu der neuen GroupChatOrchestration
migrieren, einschließlich eines benutzerdefinierten Gruppenchat-Managers, der die Genehmigungsbasierte Beendigungsstrategie implementiert.
Schritt 1: Agentdefinition
In der Agentdefinition sind keine Änderungen erforderlich. Sie können weiterhin dasselbe AgentWriter
und AgentReviewer
wie zuvor verwenden.
Schritt 2: Implementieren eines benutzerdefinierten Gruppenchat-Managers
Erstellen Sie ein benutzerdefiniertes GroupChatManager
, das den Chat beendet, wenn die letzte Nachricht "genehmigen" enthält, und nur der Prüfer kann genehmigen.
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."
});
}
}
Schritt 3: Initialisieren der Orchestrierung
Ersetzen Sie die AgentGroupChat
Initialisierung durch:
var orchestration = new GroupChatOrchestration(
new ApprovalGroupChatManager(ReviewerName)
{
MaximumInvocationCount = 10
},
agentWriter,
agentReviewer);
Schritt 4: Ausführen der Orchestrierung
Ersetzen Sie die Nachrichtenschleife durch:
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();
Zusammenfassung
- Verwenden Sie ein benutzerdefiniertes Element
GroupChatManager
für eine genehmigungsbasierte Beendigung. - Ersetzen Sie die Chatschleife durch den Orchestrierungsaufruf.
- Die restlichen Setup- und Nachrichtenformatierungen des Agents können unverändert bleiben.
Migrieren von AgentGroupChat
zu GroupChatOrchestration
Die neue GroupChatOrchestration
API in Python ersetzt das ältere AgentGroupChat
Muster und bietet eine flexiblere und erweiterbarere Möglichkeit zum Verwalten von Unterhaltungen mit mehreren Agents. Hier erfahren Sie, wie Sie Ihren Code migrieren:
Schritt 1: Ersetze Importe und Klassenbezüge
Entfernen Sie alle Importe oder Verweise auf
AgentGroupChat
und verwandte Strategien. Entfernen Sie beispielsweise Folgendes:from semantic_kernel.agents import AgentGroupChat
Importieren Sie die neuen Orchestrierungsklassen:
from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager from semantic_kernel.agents.runtime import InProcessRuntime
Schritt 2: Initialisierung aktualisieren
Ersetzen Sie AgentGroupChat
mit GroupChatOrchestration
und einem GroupChatManager
(z. B. RoundRobinGroupChatManager
oder einem benutzerdefinierten), um den Fluss zu steuern.
Vor:
group_chat = AgentGroupChat(
agents=[agent_writer, agent_reviewer],
termination_strategy=CustomTerminationStrategy(),
selection_strategy=CustomSelectionStrategy(),
)
Nach:
from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager
orchestration = GroupChatOrchestration(
members=[agent_writer, agent_reviewer],
manager=RoundRobinGroupChatManager(),
)
Schritt 3: Starten des Gruppenchats
Vor:
await group_chat.add_chat_message(message=TASK)
async for content in group_chat.invoke():
# handle response
Nach:
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()
Schritt 4: Anpassen der Orchestrierung
Mit dem neuen Orchestrierungsmodell können Sie benutzerdefinierte Strategien für Beendigung, Agentauswahl und vieles mehr erstellen, indem Sie GroupChatManager
unterklassen bilden und seine Methoden überschreiben. Weitere Informationen finden Sie in der GroupChatOrchestration-Dokumentation .
Schritt 5: Entfernen veralteter APIs
Entfernen Sie Code, der AgentGroupChat
-spezifische Eigenschaften oder Methoden direkt manipuliert, da sie nicht mehr gewartet werden.
Schritt 6: Überprüfen und Testen
- Überprüfen Sie Ihren Code auf alle verbleibenden Verweise auf die alten Klassen.
- Testen Sie Ihre Gruppenchatszenarien, um sicherzustellen, dass die neue Orchestrierung wie erwartet funktioniert.
Vollständiges Beispiel
In diesem Leitfaden wird veranschaulicht, wie Sie die Kernlogik von step06_chat_completion_agent_group_chat.py
AgentGroupChat
zu der neuen GroupChatOrchestration
migrieren, einschließlich eines benutzerdefinierten Gruppenchat-Managers, der die Genehmigungsbasierte Beendigungsstrategie implementiert.
Schritt 1: Agentdefinition
In der Agentdefinition sind keine Änderungen erforderlich. Sie können weiterhin dasselbe AgentWriter
und AgentReviewer
wie zuvor verwenden.
Schritt 2: Implementieren eines benutzerdefinierten Gruppenchat-Managers
Erstellen Sie ein benutzerdefiniertes GroupChatManager
, das den Chat beendet, wenn die letzte Nachricht "genehmigt" enthält, und nur der Prüfer kann genehmigen.
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.")
Schritt 3: Initialisieren der Orchestrierung
Ersetzen Sie die AgentGroupChat
Initialisierung durch:
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),
)
Schritt 4: Ausführen der Orchestrierung
Ersetzen Sie die Nachrichtenschleife durch:
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()
Zusammenfassung
- Verwenden Sie ein benutzerdefiniertes
GroupChatManager
für die genehmigungsbasierte Beendigung. - Ersetzen Sie die Chatschleife durch den Aufruf der Orchestrierung.
- Die restlichen Setup- und Nachrichtenformatierungen des Agents können unverändert bleiben.
Hinweis
Die Agent-Orchestrierung ist noch nicht im Java SDK verfügbar.