Lección 10 · cooperación

Protocolo de apretón de manos entre dos agentes

Los agentes también necesitan "celebrar contratos" entre sí. request_id es el número de contrato.

⏱ ~10 min · 📝 3 widgets interactivos · 🧑‍💻 Basado en shareAI-lab · s10_team_protocols.py

¿Por qué un acuerdo?

En s09, send_message puede enviar cualquier contenido. Pero cuando dos agentes quieren llegar a un consenso sobre algo (como "Quiero cerrar, ¿puedo?"), simplemente enviar una cadena no es suficiente: necesitas:

  • La solicitud tiene una identidad clara (request_id) para que la respuesta sea precisa.
  • Máquina de estados: pendiente → aprobado | rechazadas, las consecuencias de cada estado son claras.
  • Campos coherentes: ambas partes saben lo que significa aprobar: verdadero.

Esta es la razón por la que existe shutdown_request / shutdown_response / plan_approval / plan_approval_response.

Protocolo de apagado de todo el proceso

El líder quiere que Alice salga del trabajo:

cliente potencial:
  # Enviar Shutdown_request, el servidor registra request_id
  req_id = uuid4()[:8]
  Shutdown_requests[req_id] = {"objetivo": "alice", "status": "pendiente"}
  enviar("alice", "shutdown_request", extra={"request_id": req_id})

Alicia:
  # Lea el buzón en el siguiente bucle y vea Shutdown_request
  # Decisión: terminar el trabajo en cuestión antes de regresar y aprobar
  tool_use("shutdown_response", request_id=req_id, aprobar=Verdadero)

plomo:
  # Recibir respuesta_desconexión, actualizar el rastreador a aprobado
  Shutdown_requests[req_id]["status"] = "aprobado"
  # El subproceso alice detecta la aceptación del cierre y establece status=shutdown para salir del bucle

Apagar visualización FSM

Observa cada paso de la máquina de estados. Alice también puede rechazarlo diciendo: "Estoy haciendo un trabajo crítico y no puedo parar ahora".

Aprobación del Plan · Mismo modelo, diferente dominio

Un compañero de equipo envía un plan antes de lanzar un gran movimiento y solicita su aprobación:

alicia:
  tool_use("plan_approval", plan="Planeo reescribir todos los módulos de autenticación con jwt")
  # alice continúa inactiva y espera una pista

plomo:
  # Ver la solicitud plan_approval_response de Alice
  tool_use("plan_approval", request_id="...", aprobar=Falso,
           feedback="No toques la autenticación todavía, haremos una refactorización general el próximo mes")

Si observa el código fuente del s10, encontrará: Los dos protocolos utilizan exactamente el mismo modo de seguimiento request_id: solo se cambian los nombres del diccionario (shutdown_requests vs plan_requests). Se trata de "un modelo, dos dominios".

¿Por qué no abstraer una clase base de protocolo genérica? s10 no es deliberadamente abstracto. Motivo: ahora solo existen dos protocolos y los beneficios de la abstracción aún no son obvios; si escribes dos explícitamente, cada uno se puede entender de forma independiente. No será demasiado tarde para perfeccionar los protocolos cuarto y quinto (regla de tres).
Interactivo

Widget 1 · Apagar FSM · Revisar toda la máquina de estado

Haga clic en "Siguiente" para ir un paso más allá y ver cómo request_id establece una relación correspondiente entre los dos agentes.

🧑‍💼 Lead
👩‍💻 Alice
shutdown_requests 状态表
{}
Interactivo

Widget 2 · asociación request_id · No obtenga el contrato equivocado

Hay varias solicitudes pendientes al mismo tiempo; haga clic en una respuesta para ver qué solicitud está actualizada. Ésta es la clave para la concurrencia del protocolo.

待响应的请求
模拟的响应(点击触发)
Interactivo

Widget 3 · Diseño de protocolo · Tu propio tercer protocolo

Ofreciendo un nuevo escenario, aplique el patrón request_id para diseñar un apretón de manos. Elige el correcto para pasar.

答对 0 / 5