Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Dit is een migratiehandleiding voor ontwikkelaars die de AgentGroupChat
Semantische kernel hebben gebruikt en naar de nieuwe GroupChatOrchestration
willen overstappen. De nieuwe klasse biedt een flexibelere en krachtige manier om groepschatinteracties tussen agents te beheren.
Migreren van AgentGroupChat
naar GroupChatOrchestration
De nieuwe GroupChatOrchestration
klasse vervangt de AgentGroupChat
door een uniform, uitbreidbaar orkhestratiemodel. U kunt als volgt uw C#-code migreren:
Stap 1: Gebruik en klasseverwijzingen vervangen
Verwijder eventuele
using
verklaringen of verwijzingen naarAgentChat
enAgentGroupChat
. Verwijder bijvoorbeeld:using Microsoft.SemanticKernel.Agents.Chat;
Voeg een verwijzing toe naar de nieuwe orkestratienaamruimte.
using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;
Stap 2: Initialisatie bijwerken
voorafgaand aan:
AgentGroupChat chat = new(agentWriter, agentReviewer)
{
ExecutionSettings = new()
{
SelectionStrategy = new CustomSelectionStrategy(),
TerminationStrategy = new CustomTerminationStrategy(),
}
};
Na:
using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;
GroupChatOrchestration orchestration = new(
new RoundRobinGroupChatManager(),
agentWriter,
agentReviewer);
Stap 3: De groepschat starten
voorafgaand aan:
chat.AddChatMessage(input);
await foreach (var response in chat.InvokeAsync())
{
// handle response
}
Na:
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));
Stap 4: Orchestratie aanpassen
Met het nieuwe orkestratiemodel kunt u aangepaste strategieën ontwikkelen voor beëindiging, agentselectie en meer door GroupChatManager
te subklassen en zijn methoden te overschrijven. Raadpleeg de documentatie voor GroupChatOrchestration voor meer informatie.
Stap 5: Afgeschafte API's verwijderen
Verwijder alle code die AgentGroupChat
-specifieke eigenschappen of methoden rechtstreeks manipuleert, aangezien deze niet meer worden onderhouden.
Stap 6: Controleren en testen
- Controleer uw code voor eventuele resterende verwijzingen naar de oude klassen.
- Test uw groepschatscenario's om ervoor te zorgen dat de nieuwe indeling werkt zoals verwacht.
Compleet voorbeeld
Deze handleiding laat zien hoe u de kernlogica van Step03_Chat.cs
van AgentGroupChat
naar de nieuwe GroupChatOrchestration
migreert, inclusief een aangepaste groepschatbeheerder die de op goedkeuring gebaseerde beëindigingsstrategie implementeert.
Stap 1: Agentdefinitie
Er zijn geen wijzigingen nodig in de agentdefinitie. U kunt hetzelfde AgentWriter
en AgentReviewer
als voorheen blijven gebruiken.
Stap 2: Een aangepast groepschatbeheer implementeren
Maak een aangepaste GroupChatManager
die de chat beëindigt wanneer het laatste bericht 'goedkeuren' bevat en alleen de revisor kan dat goedkeuren.
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."
});
}
}
Stap 3: De indeling initialiseren
Vervang de AgentGroupChat
initialisatie door:
var orchestration = new GroupChatOrchestration(
new ApprovalGroupChatManager(ReviewerName)
{
MaximumInvocationCount = 10
},
agentWriter,
agentReviewer);
Stap 4: De orkestratie uitvoeren
Vervang de berichtlus door:
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();
Samenvatting
- Gebruik een aangepaste functie
GroupChatManager
voor beëindiging op basis van goedkeuring. - Vervang de chatlus door orchestratieoproep.
- De rest van de installatie van de agent en de berichtopmaak blijven ongewijzigd.
Migreren van AgentGroupChat
naar GroupChatOrchestration
De nieuwe GroupChatOrchestration
API in Python vervangt het oudere AgentGroupChat
patroon en biedt een flexibelere en uitbreidbare manier om gesprekken met meerdere agents te beheren. U kunt als volgt uw code migreren:
Stap 1: Import- en klasseverwijzingen vervangen
Verwijder eventuele import- of verwijzingen naar
AgentGroupChat
en gerelateerde strategieën. Verwijder bijvoorbeeld:from semantic_kernel.agents import AgentGroupChat
Importeer de nieuwe orchestratieklassen.
from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager from semantic_kernel.agents.runtime import InProcessRuntime
Stap 2: Initialisatie bijwerken
Vervang AgentGroupChat
door GroupChatOrchestration
en een GroupChatManager
(bijvoorbeeld een RoundRobinGroupChatManager
of een aangepaste) om de stroom te beheren.
voorafgaand aan:
group_chat = AgentGroupChat(
agents=[agent_writer, agent_reviewer],
termination_strategy=CustomTerminationStrategy(),
selection_strategy=CustomSelectionStrategy(),
)
Na:
from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager
orchestration = GroupChatOrchestration(
members=[agent_writer, agent_reviewer],
manager=RoundRobinGroupChatManager(),
)
Stap 3: De groepschat starten
voorafgaand aan:
await group_chat.add_chat_message(message=TASK)
async for content in group_chat.invoke():
# handle response
Na:
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()
Stap 4: Orchestratie aanpassen
Met het nieuwe indelingsmodel kunt u aangepaste strategieën maken voor beëindiging, agentselectie en meer door de methoden ervan te subklasseren GroupChatManager
en te overschrijven. Raadpleeg de documentatie voor GroupChatOrchestration voor meer informatie.
Stap 5: Afgeschafte API's verwijderen
Verwijder alle code die rechtstreeks AgentGroupChat
-specifieke eigenschappen of methoden manipuleert, omdat ze niet meer worden onderhouden.
Stap 6: Controleren en testen
- Controleer uw code voor eventuele resterende verwijzingen naar de oude klassen.
- Test uw groepschatscenario's om ervoor te zorgen dat de nieuwe indeling werkt zoals verwacht.
Compleet voorbeeld
Deze handleiding laat zien hoe u de kernlogica van step06_chat_completion_agent_group_chat.py
van AgentGroupChat
naar de nieuwe GroupChatOrchestration
migreert, inclusief een aangepaste groepschatbeheerder die de op goedkeuring gebaseerde beëindigingsstrategie implementeert.
Stap 1: Agentdefinitie
Er zijn geen wijzigingen nodig in de agentdefinitie. U kunt hetzelfde AgentWriter
en AgentReviewer
als voorheen blijven gebruiken.
Stap 2: Een aangepast groepschatbeheer implementeren
Maak een aangepaste GroupChatManager
die de chat beëindigt wanneer het laatste bericht "goedgekeurd" bevat en alleen de beoordelaar dit kan goedkeuren.
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.")
Stap 3: De indeling initialiseren
Vervang de AgentGroupChat
initialisatie door:
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),
)
Stap 4: De orkestratie uitvoeren
Vervang de berichtlus door:
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()
Samenvatting
- Gebruik een aangepaste functie
GroupChatManager
voor beëindiging op basis van goedkeuring. - Vervang de chatlus door orchestratieoproep.
- De rest van de installatie van de agent en de berichtopmaak blijven ongewijzigd.
Opmerking
Agentindeling is nog niet beschikbaar in Java SDK.