Delen via


AgentGroupChat Migratiehandleiding voor orkestratie

Dit is een migratiehandleiding voor ontwikkelaars die de AgentGroupChat Semantische kernel hebben gebruikt en naar de nieuwe GroupChatOrchestrationwillen 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 naar AgentChat en AgentGroupChat. 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.