Semantic Kernel의 AgentGroupChat를 사용하고 있으며 GroupChatOrchestration으로 전환하려는 개발자를 위한 마이그레이션 가이드입니다. 새 클래스는 에이전트 간의 그룹 채팅 상호 작용을 관리하는 보다 유연하고 강력한 방법을 제공합니다.
AgentGroupChat에서 GroupChatOrchestration로 마이그레이션
새 GroupChatOrchestration 클래스는 AgentGroupChat 확장 가능한 통합 오케스트레이션 모델로 바뀝니다. C# 코드를 마이그레이션하는 방법은 다음과 같습니다.
1단계: Using 및 클래스 참조 바꾸기
using관련 문장이나AgentChat및AgentGroupChat에 대한 모든 참조를 제거합니다. 예를 들어 다음을 제거합니다.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단계: 에이전트 정의
에이전트 정의에는 변경이 필요하지 않습니다. 이전과 동일한 AgentWriter 및 AgentReviewer을 계속 사용할 수 있습니다.
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단계: 업데이트 초기화
AgentGroupChat을 GroupChatOrchestration 및 GroupChatManager로 (예: 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단계: 에이전트 정의
에이전트 정의에는 변경이 필요하지 않습니다. 동일한 AgentWriter 및 AgentReviewer를 예전처럼 계속 사용할 수 있습니다.
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에서 아직 사용할 수 없습니다.