Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Jest to przewodnik migracji dla deweloperów, którzy korzystali z AgentGroupChat jądra semantycznego i chcą przejść do nowego GroupChatOrchestration. Nowa klasa zapewnia bardziej elastyczny i zaawansowany sposób zarządzania interakcjami czatu grupowego między agentami.
Migrowanie z AgentGroupChat do GroupChatOrchestration
Nowa klasa GroupChatOrchestration zastępuje AgentGroupChat ujednoliconym, rozszerzalnym modelem orkiestracji. Oto jak przeprowadzić migrację kodu w języku C#:
Krok 1. Zastąpić dyrektywy 'using' i odwołania do klas
Usuń wszelkie instrukcje
usinglub odwołania doAgentChatiAgentGroupChat. Na przykład usuń:using Microsoft.SemanticKernel.Agents.Chat;Dodaj odwołanie do nowej przestrzeni nazw aranżacji:
using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;
Krok 2. Inicjowanie aktualizacji
przed:
AgentGroupChat chat = new(agentWriter, agentReviewer)
{
ExecutionSettings = new()
{
SelectionStrategy = new CustomSelectionStrategy(),
TerminationStrategy = new CustomTerminationStrategy(),
}
};
po:
using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;
GroupChatOrchestration orchestration = new(
new RoundRobinGroupChatManager(),
agentWriter,
agentReviewer);
Krok 3. Uruchamianie czatu grupowego
przed:
chat.AddChatMessage(input);
await foreach (var response in chat.InvokeAsync())
{
// handle response
}
po:
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));
Krok 4. Dostosowywanie aranżacji
Nowy model orkiestracji umożliwia tworzenie niestandardowych strategii zakończenia, wyboru agentów oraz innych, poprzez tworzenie podklas GroupChatManager i nadpisywanie jego metod. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją GroupChatOrchestration .
Krok 5. Usuwanie przestarzałych interfejsów API
Usuń dowolny kod, który bezpośrednio manipuluje AgentGroupChat właściwościami lub metodami, gdyż nie są już utrzymywane.
Krok 6. Przegląd i testowanie
- Przejrzyj swój kod pod kątem pozostałych odwołań do starych klas.
- Przetestuj scenariusze czatu grupowego, aby upewnić się, że nowa aranżacja działa zgodnie z oczekiwaniami.
Pełny przykład
W tym przewodniku pokazano, jak przenieść podstawową logikę Step03_Chat.cs z AgentGroupChat do nowego GroupChatOrchestration, w tym niestandardowego menedżera czatu grupowego, który implementuje strategię zakończenia na podstawie zatwierdzenia.
Krok 1. Definicja agenta
W definicji agenta nie są wymagane żadne zmiany. Możesz nadal używać tych samych metod AgentWriter i AgentReviewer jak poprzednio.
Krok 2. Implementowanie niestandardowego menedżera czatu grupy
Utwórz niestandardowy obiekt GroupChatManager , który kończy czat, gdy ostatnia wiadomość zawiera komunikat "zatwierdź", a tylko recenzent może zatwierdzić:
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."
});
}
}
Krok 3. Inicjowanie orkiestracji
Zastąp inicjalizację AgentGroupChat następującą treścią:
var orchestration = new GroupChatOrchestration(
new ApprovalGroupChatManager(ReviewerName)
{
MaximumInvocationCount = 10
},
agentWriter,
agentReviewer);
Krok 4. Uruchamianie orkiestracji
Zastąp pętlę komunikatu:
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();
Podsumowanie
- Użyj niestandardowego
GroupChatManagerdo zakończenia wymagającego zatwierdzenia. - Zastąp pętlę czatu wywołaniem orkiestracji.
- Pozostałe ustawienia agenta i formatowanie komunikatów mogą pozostać niezmienione.
Migrowanie z AgentGroupChat do GroupChatOrchestration
Nowy GroupChatOrchestration interfejs API w języku Python zastępuje starszy AgentGroupChat wzorzec, zapewniając bardziej elastyczny i rozszerzalny sposób zarządzania konwersacjami z wieloma agentami. Oto jak przeprowadzić migrację kodu:
Krok 1. Zastępowanie importów i odwołań do klas
Usuń wszelkie importy lub odwołania do
AgentGroupChati powiązanych strategii. Na przykład usuń:from semantic_kernel.agents import AgentGroupChatZaimportuj nowe klasy orkiestracji:
from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager from semantic_kernel.agents.runtime import InProcessRuntime
Krok 2. Inicjowanie aktualizacji
Zastąp AgentGroupChat z GroupChatOrchestration i GroupChatManager (np. RoundRobinGroupChatManager lub niestandardowym), aby sterować przepływem.
przed:
group_chat = AgentGroupChat(
agents=[agent_writer, agent_reviewer],
termination_strategy=CustomTerminationStrategy(),
selection_strategy=CustomSelectionStrategy(),
)
po:
from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager
orchestration = GroupChatOrchestration(
members=[agent_writer, agent_reviewer],
manager=RoundRobinGroupChatManager(),
)
Krok 3. Uruchamianie czatu grupowego
przed:
await group_chat.add_chat_message(message=TASK)
async for content in group_chat.invoke():
# handle response
po:
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()
Krok 4. Dostosowywanie aranżacji
Nowy model orkiestracji pozwala na tworzenie niestandardowych strategii zakończenia, wyboru agentów oraz innych działań poprzez tworzenie podklas GroupChatManager i nadpisywanie jego metod. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją GroupChatOrchestration .
Krok 5. Usuwanie przestarzałych interfejsów API
Usuń dowolny kod, który bezpośrednio manipuluje właściwościami lub metodami AgentGroupChat, ponieważ nie są już obsługiwane.
Krok 6. Przegląd i testowanie
- Przejrzyj swój kod pod kątem pozostałych odwołań do starych klas.
- Przetestuj scenariusze czatu grupowego, aby upewnić się, że nowa aranżacja działa zgodnie z oczekiwaniami.
Pełny przykład
W tym przewodniku pokazano, jak przenieść podstawową logikę step06_chat_completion_agent_group_chat.py z AgentGroupChat do nowego GroupChatOrchestration, w tym niestandardowego menedżera czatu grupowego, który implementuje strategię zakończenia na podstawie zatwierdzenia.
Krok 1. Definicja agenta
W definicji agenta nie są wymagane żadne zmiany. Możesz nadal używać tych samych metod AgentWriter i AgentReviewer jak poprzednio.
Krok 2. Implementowanie niestandardowego menedżera czatu grupy
Utwórz niestandardowy obiekt GroupChatManager , który kończy czat, gdy ostatnia wiadomość zawiera komunikat "zatwierdzony", a tylko recenzent może zatwierdzić:
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.")
Krok 3. Inicjowanie orkiestracji
Zastąp inicjalizację AgentGroupChat następującą treścią:
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),
)
Krok 4. Uruchamianie orkiestracji
Zastąp pętlę komunikatu:
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()
Podsumowanie
- Użyj niestandardowego
GroupChatManagerdo zakończenia wymagającego zatwierdzenia. - Zastąp pętlę czatu wywołaniem orkiestracji.
- Pozostałe ustawienia agenta i formatowanie komunikatów mogą pozostać niezmienione.
Uwaga / Notatka
Orkiestracja agentów nie jest jeszcze dostępna w Java SDK.