Selección de grupos y hablantes
Type: Learn + Build
Languages: Python (stdlib)
Prerequisites: Phase 16 · 04 (Primitive Model)
Time: ~60 minutes
El problema
Los gráficos estáticos (LangGraph) son excelentes cuando se conoce el flujo de trabajo. Las conversaciones reales no son estáticas: a veces el codificador pregunta al revisor, a veces al investigador, a veces al escritor. El codificación dura de cada posible entrega produce una explosión de borde.
Eso es exactamente lo que hace AutoGen GroupChat.
Concepto
La forma
┌─── shared pool ────┐
│ m1 m2 m3 ... │
└─────────┬──────────┘
│ (everyone reads all)
┌───────┬─────────┼─────────┬───────┐
▼ ▼ ▼ ▼ ▼
Agent A Agent B Agent C Agent D Selector
│
▼
"next speaker = C"Cada agente ve cada mensaje y en cada turno se invoca una función de selector para elegir quién habla después.
Los tres sabores selectores
Round-robin.Ciclo fijo. Determinista. Escala linealmente en N pero ignora el contexto un codificador obtiene el turno incluso cuando el tema es revisión legal.
LLM-selected.Una llamada a un LLM que lee el grupo reciente y devuelve el mejor próximo orador. Contexto consciente pero lento: cada turno añade una llamada de LLM. AutoGen es predeterminado.
Custom.Una función Python con cualquier lógica que desee. Típico: LLM-seleccionado con reglas de retroceso (por ejemplo, "siempre dar al verificador el turno después del codificador").
La API de Agente Conversable
agent = ConversableAgent(
name="coder",
system_message="You write Python.",
llm_config={...},
)
chat = GroupChat(agents=[coder, reviewer, tester], messages=[])
manager = GroupChatManager(groupchat=chat, llm_config={...})GroupChatManagerCuando un agente completa un turno, el gerente llama al selector, que devuelve al siguiente agente.
Terminado
Tres patrones comunes:
- Max rounds.Tape fuerte en giros totales.
- "TERMINATE" token.Los agentes pueden emitir un mensaje de sentinela; el gerente se detiene cuando aparece uno.
- Goal-reached check.Un verificador ligero corre cada turno y detiene la charla cuando lo haga.
Líneas de linaje: bifurcaciones y fusiones
A principios de 2025, Microsoft comenzó una reescritura importante de AutoGen (v0.4) en torno a un modelo de actores impulsado por eventos.
En febrero de 2026, Microsoft anunció que AutoGen pasaría al modo de mantenimiento, con el modelo de actores impulsado por eventos fusionándose en Microsoft Agent FrameworkEl concepto de GroupChat sobrevive en ambas pistas; los detalles de implementación difieren. AG2 es el código preferido en el ascensor para el código compatible con v0.2.
Cuando GroupChat se ajusta
- Emergent conversations.No quieres pre-cable cada posible próximo altavoz.
- Role-mixing tasks.El codificador pregunta al investigador, el investigador pregunta al archivista, el archivista pregunta al codificador.
- Exploratory problem-solving.Piensa en "reunión de tormenta cerebral", no en "línea de montaje".
Cuando falla
- Strict determinism.El selector de LLM puede ser inconsistente, el mismo prompt, diferentes ejecuciones, diferentes oradores siguientes.
- Sycophancy cascades.Los agentes se aplazan a quien hable con más confianza.
- Context bloat.Cada agente lee cada mensaje; después de 10 vueltas el contexto es enorme.
- Hot speakers.Un agente domina la conversación porque el selector favorece sus especialidades.
El chat de grupo vs supervisor
Las mismas primitivas, diferentes valores predeterminados:
- Supervisor: un agente planea y otros ejecutan.
- Chat de grupo: todos los agentes son pares; selector es una función sobre el pool compartido.
Ambos usan las cuatro primitivas de la Lección 04.
Construye el mismo
code/main.pyLa aplicación de un grupo de chat desde cero en stdlib. tres agentes (codificador, revisor, gerente), variantes rotundas y LLM seleccionadas, y una terminación en unTERMINATE- Sí, es un símbolo.
La demostración imprime la transcripción de la conversación más el rastro de decisión del selector para ambas variantes.
- ¿Qué quieres decir ?
python3 code/main.pyUsalo
outputs/skill-groupchat-selector.mdConfigura un selector de GroupChat para una tarea dada round-robin vs LLM-select vs custom, y qué entradas selector (mensajes recientes, especialidades de agente, recuentos de turno) utilizar.
Envío
Lista de control:
- Max rounds cap.Siempre. 10-20 para tareas típicas.
- Speaker-balance metric.Las curvas de pista por agente; alerta cuando el desequilibrio exceda un umbral.
- Termination token.
TERMINATEo un agente verificador dedicado. - Projection or scoped memory.Después de ~ 10 mensajes, considere dar a cada agente solo una vista de alcance para evitar la hinchazón de contexto.
- Selector logging.Para las variantes seleccionadas en el LLM, registre tanto la entrada del selector como su elección.
Los ejercicios
- - ¿ Qué ?
code/main.pyComparar la conversación entre el round-robin y el LLM. ¿Cuál agente domina en cada uno? - Añadir una regla de "máximo habla por agente" en el selector. ¿Cómo afecta a la transcripción?
- Implementar una terminación alcanzada: detenerse cuando el revisor regrese "aprobado". ¿Con qué frecuencia se activa antes del límite redondo?
- Lea los documentos estables de AutoGen en GroupChat (https://microsoft.github.io/autogen/stable/user-guide/core-user-guide/design-patterns/group-chat.html ). Identifique el selector predeterminado utilizado por
GroupChatManager¿ Qué ? - Leer el recuento de AG2 (https://github.com/ag2ai/ag2¿Qué propiedades concretas (transmisión, tolerancia a fallos, composibilidad) añade la versión v0.4?
Términos clave
| Term | What people say | What it actually means |
|---|---|---|
| GroupChat | "Agents in one chat room" | Shared message pool + selector function. AutoGen / AG2 primitive. |
| Speaker selection | "Who talks next" | The function that picks the next agent. Round-robin, LLM-selected, or custom. |
| GroupChatManager | "The meeting host" | AutoGen component that owns the selector and loops over turns. |
| ConversableAgent | "The base agent" | AutoGen base class; an agent that can send and receive messages. |
| Termination token | "The 'stop' word" | Sentinel string (usually TERMINATE) that ends the chat. |
| Hot speaker | "One agent dominates" | Failure mode where the selector keeps picking the same agent. |
| Context bloat | "Pool grows unbounded" | Each agent reads every prior message; context grows with turns. |
| Projection | "Scoped view" | Role-specific view into the shared pool to prevent context bloat. |
Leer más
- AutoGen group chat docs la aplicación de referencia
- AG2 repo comunidad AutoGen v0.2 continuación
- Microsoft Agent Framework docs el sucesor fusionado, RC febrero 2026
- AutoGen v0.4 release notes Detalles de reescribir el modelo de actor impulsado por eventos
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.