다음을 통해 공유


AgentGroupChat 오케스트레이션 마이그레이션 가이드

Semantic Kernel의 AgentGroupChat를 사용하고 있으며 GroupChatOrchestration으로 전환하려는 개발자를 위한 마이그레이션 가이드입니다. 새 클래스는 에이전트 간의 그룹 채팅 상호 작용을 관리하는 보다 유연하고 강력한 방법을 제공합니다.

AgentGroupChat에서 GroupChatOrchestration로 마이그레이션

GroupChatOrchestration 클래스는 AgentGroupChat 확장 가능한 통합 오케스트레이션 모델로 바뀝니다. C# 코드를 마이그레이션하는 방법은 다음과 같습니다.

1단계: Using 및 클래스 참조 바꾸기

  • using 관련 문장이나 AgentChatAgentGroupChat에 대한 모든 참조를 제거합니다. 예를 들어 다음을 제거합니다.

    using Microsoft.SemanticKernel.Agents.Chat;
    
  • 새 오케스트레이션 네임스페이스에 대한 참조를 추가합니다.

    using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;
    

2단계: 업데이트 초기화

이전:

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

후:

using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;

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

3단계: 그룹 채팅 시작

이전:

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

후:

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

4단계: 오케스트레이션 사용자 지정

새 오케스트레이션 모델을 사용하면 메서드를 하위 클래스화 GroupChatManager 하고 재정의하여 종료, 에이전트 선택 등에 대한 사용자 지정 전략을 만들 수 있습니다. 자세한 내용은 GroupChatOrchestration 설명서를 참조하세요.

5단계: 사용되지 않는 API 제거

더 이상 유지 관리되지 않으므로 특정 속성 또는 메서드를 직접 조작 AgentGroupChat하는 코드를 제거합니다.

6단계: 검토 및 테스트

  • 코드에서 이전 클래스에 대한 남은 참조를 찾아 검토하십시오.
  • 그룹 채팅 시나리오를 테스트하여 새 오케스트레이션이 예상대로 작동하는지 확인합니다.

전체 예

이 가이드에서는 AgentGroupChat에서 새 GroupChatOrchestration로의 핵심 논리 이전과, 승인 기반 종료 전략을 구현하는 사용자 지정 그룹 채팅 관리자를 포함한 방법을 보여줍니다.

1단계: 에이전트 정의

에이전트 정의에는 변경이 필요하지 않습니다. 이전과 동일한 AgentWriterAgentReviewer을 계속 사용할 수 있습니다.

2단계: 사용자 지정 그룹 채팅 관리자 구현

마지막 메시지에 "승인"이 포함되어 있고 검토자만 승인할 수 있는 경우 채팅을 종료하는 사용자 지정 GroupChatManager 을 만듭니다.

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

3단계: 오케스트레이션 초기화

AgentGroupChat 초기화를 다음으로 바꿉다.

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

4단계: 오케스트레이션 실행

메시지 루프를 다음으로 바꿉다.

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

요약

  • 승인 기반 종료에 사용자 지정 GroupChatManager 을 사용합니다.
  • 채팅 루프를 오케스트레이션 호출로 바꿉다.
  • 에이전트 설정의 나머지 부분과 메시지 서식은 변경되지 않은 상태로 유지될 수 있습니다.

AgentGroupChat에서 GroupChatOrchestration로 마이그레이션하기

Python의 새 GroupChatOrchestration API는 이전 AgentGroupChat 패턴을 대체하여 다중 에이전트 대화를 관리하는 보다 유연하고 확장 가능한 방법을 제공합니다. 코드를 마이그레이션하는 방법은 다음과 같습니다.

1단계: 가져오기 및 클래스 참조 바꾸기

  • AgentGroupChat 및 관련 전략에 대한 가져오기 또는 참조를 제거합니다. 예를 들어 다음을 제거합니다.

    from semantic_kernel.agents import AgentGroupChat
    
  • 새 오케스트레이션 클래스를 가져옵니다.

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

2단계: 업데이트 초기화

AgentGroupChatGroupChatOrchestrationGroupChatManager로 (예: RoundRobinGroupChatManager 또는 사용자 지정 항목) 교체하여 흐름을 제어합니다.

이전:

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

후:

from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager

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

3단계: 그룹 채팅 시작

이전:

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

후:

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

4단계: 오케스트레이션 사용자 지정

새 오케스트레이션 모델을 사용하면 GroupChatManager를 서브클래싱하고 그 메서드를 재정의하여 종료, 에이전트 선택 등에 대한 사용자 지정 전략을 만들 수 있습니다. 자세한 내용은 GroupChatOrchestration 설명서를 참조하세요.

5단계: 사용되지 않는 API 제거

더 이상 유지 관리되지 않으므로 특정 속성 또는 메서드를 직접 조작 AgentGroupChat하는 코드를 제거합니다.

6단계: 검토 및 테스트

  • 코드에서 이전 클래스에 대한 남아 있는 참조를 확인하세요.
  • 그룹 채팅 시나리오를 테스트하여 새 오케스트레이션이 예상대로 작동하는지 확인합니다.

전체 예

이 가이드에서는 step06_chat_completion_agent_group_chat.py의 핵심 논리를 AgentGroupChat에서 GroupChatOrchestration로 마이그레이션하는 방법을 보여줍니다. 여기에는 승인 기반 종료 전략을 구현하는 사용자 지정 그룹 채팅 관리자가 포함됩니다.

1단계: 에이전트 정의

에이전트 정의에는 변경이 필요하지 않습니다. 동일한 AgentWriterAgentReviewer를 예전처럼 계속 사용할 수 있습니다.

2단계: 사용자 지정 그룹 채팅 관리자 구현

마지막 메시지에 "승인됨"이 포함되어 있고 검토자만 승인할 수 있는 경우 채팅을 종료하는 사용자 지정 GroupChatManager 을 만듭니다.

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

3단계: 오케스트레이션을 초기화하십시오.

AgentGroupChat 초기화를 다음으로 바꿉다.

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

4단계: 오케스트레이션 실행

메시지 루프를 다음으로 바꿉다.

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

요약

  • 승인 기반 종료에 사용자 지정 GroupChatManager 을 사용합니다.
  • 채팅 루프를 오케스트레이션 호출로 바꿉다.
  • 에이전트 설정의 나머지 부분과 메시지 서식은 변경되지 않은 상태로 유지될 수 있습니다.

비고

에이전트 오케스트레이션은 Java SDK에서 아직 사용할 수 없습니다.