Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se trata de una guía de migración para los desarrolladores que han estado usando el AgentGroupChat semántico en Kernel y quieren realizar la transición al nuevo GroupChatOrchestration. La nueva clase proporciona una manera más flexible y eficaz de administrar las interacciones de chat en grupo entre los agentes.
Migrando de AgentGroupChat a GroupChatOrchestration
La nueva GroupChatOrchestration clase reemplaza por AgentGroupChat un modelo de orquestación extensible unificado. Aquí se muestra cómo migrar el código de C#:
Paso 1: Reemplazar Usings y Referencias de Clase
Elimine cualquier instrucción de
usingo referencia aAgentChatyAgentGroupChat. Por ejemplo, quite lo siguiente:using Microsoft.SemanticKernel.Agents.Chat;Agregue una referencia al nuevo namespace de orquestación.
using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;
Paso 2: Actualizar inicialización
antes:
AgentGroupChat chat = new(agentWriter, agentReviewer)
{
ExecutionSettings = new()
{
SelectionStrategy = new CustomSelectionStrategy(),
TerminationStrategy = new CustomTerminationStrategy(),
}
};
después:
using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;
GroupChatOrchestration orchestration = new(
new RoundRobinGroupChatManager(),
agentWriter,
agentReviewer);
Paso 3: Iniciar el chat en grupo
antes:
chat.AddChatMessage(input);
await foreach (var response in chat.InvokeAsync())
{
// handle response
}
después:
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));
Paso 4: Personalización de la orquestación
El nuevo modelo de orquestación permite crear estrategias personalizadas para la terminación, la selección de agentes y más, mediante la creación de subclases de GroupChatManager y la sobrescritura de sus métodos. Consulte la documentación de GroupChatOrchestration para obtener más detalles.
Paso 5: Eliminación de API en desuso
Quite cualquier código que manipule directamente propiedades o métodos AgentGroupChatespecíficos, ya que ya no se mantienen.
Paso 6: Revisar y probar
- Revise el código para ver las referencias restantes a las clases antiguas.
- Pruebe los escenarios de chat de grupo para asegurarse de que la nueva orquestación se comporta según lo previsto.
Ejemplo completo
En esta guía se muestra cómo migrar la lógica principal de Step03_Chat.cs de AgentGroupChat a la nueva GroupChatOrchestration, incluido un gestor personalizado de chat en grupo que implementa la estrategia de finalización basada en aprobación.
Paso 1: Definición del agente
No se necesitan cambios en la definición del agente. Puede seguir usando los mismos AgentWriter valores y AgentReviewer que antes.
Paso 2: Implementar un administrador de chat de grupo personalizado
Cree un GroupChatManager personalizado que finalice el chat si el último mensaje contiene "aprobar" y que solo el revisor pueda aprobar.
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."
});
}
}
Paso 3: Inicializar la orquestación
Reemplace la AgentGroupChat inicialización por:
var orchestration = new GroupChatOrchestration(
new ApprovalGroupChatManager(ReviewerName)
{
MaximumInvocationCount = 10
},
agentWriter,
agentReviewer);
Paso 4: Ejecutar la orquestación
Reemplace el bucle de mensajes por:
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();
Resumen
- Use una
GroupChatManagerpersonalizada para la finalización basada en la aprobación. - Reemplaza el bucle de chat por la invocación de orquestación.
- El resto de la configuración del agente y el formato de mensajes pueden permanecer sin cambios.
Migración de AgentGroupChat a GroupChatOrchestration
La nueva GroupChatOrchestration API de Python reemplaza el patrón anterior AgentGroupChat , lo que proporciona una manera más flexible y extensible de administrar conversaciones multiagente. A continuación se muestra cómo migrar el código:
Paso 1: Reemplazar importaciones y referencias de clase
Quite cualquier importación o referencia a
AgentGroupChaty a las estrategias relacionadas. Por ejemplo, quite lo siguiente:from semantic_kernel.agents import AgentGroupChatImporte las nuevas clases de orquestación:
from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager from semantic_kernel.agents.runtime import InProcessRuntime
Paso 2: Actualizar inicialización
Reemplace AgentGroupChat con GroupChatOrchestration y un GroupChatManager (por ejemplo, RoundRobinGroupChatManager o uno personalizado) para controlar el flujo.
antes:
group_chat = AgentGroupChat(
agents=[agent_writer, agent_reviewer],
termination_strategy=CustomTerminationStrategy(),
selection_strategy=CustomSelectionStrategy(),
)
después:
from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager
orchestration = GroupChatOrchestration(
members=[agent_writer, agent_reviewer],
manager=RoundRobinGroupChatManager(),
)
Paso 3: Iniciar el chat en grupo
antes:
await group_chat.add_chat_message(message=TASK)
async for content in group_chat.invoke():
# handle response
después:
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()
Paso 4: Personalización de la orquestación
El nuevo modelo de orquestación permite crear estrategias personalizadas para la terminación, la selección de agentes y más, mediante la subclase de GroupChatManager y la sobreescritura de sus métodos. Consulte la documentación de GroupChatOrchestration para obtener más detalles.
Paso 5: Eliminación de API en desuso
Quite cualquier código que manipule directamente propiedades o métodos AgentGroupChatespecíficos, ya que ya no se mantienen.
Paso 6: Revisar y probar
- Revise el código para ver las referencias restantes a las clases antiguas.
- Pruebe los escenarios de chat de grupo para asegurarse de que la nueva orquestación se comporta según lo previsto.
Ejemplo completo
En esta guía se muestra cómo migrar la lógica principal de step06_chat_completion_agent_group_chat.py de AgentGroupChat a la nueva GroupChatOrchestration, incluido un gestor personalizado de chat en grupo que implementa la estrategia de finalización basada en aprobación.
Paso 1: Definición del agente
No se necesitan cambios en la definición del agente. Puede seguir usando los mismos AgentWriter valores y AgentReviewer que antes.
Paso 2: Implementar un administrador de chat de grupo personalizado
Cree un GroupChatManager personalizado que termine el chat cuando el último mensaje incluya "aprobado" y solo el revisor tenga la capacidad de aprobarlo.
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.")
Paso 3: Inicializar la orquestación
Reemplace la AgentGroupChat inicialización por:
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),
)
Paso 4: Ejecutar la orquestación
Reemplace el bucle de mensajes por:
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()
Resumen
- Use una
GroupChatManagerpersonalizada para la finalización basada en la aprobación. - Reemplaza el bucle de chat por la invocación de orquestación.
- El resto de la configuración del agente y el formato de mensajes pueden permanecer sin cambios.
Nota:
La orquestación del agente aún no está disponible en el SDK de Java.