Урок 10 · сотрудничество

Протокол рукопожатия между двумя агентами

Агентам также необходимо «заключать контракты» друг с другом. request_id — номер контракта.

⏱ ~10 мин · 📝 3 интерактивных компонента · 🧑‍💻 На основе shareAI-lab · s10_team_protocols.py

Почему соглашение?

В s09 send_message может отправлять любой контент. Но когда два агента хотят достичь консенсуса по какому-то вопросу (например, «Я хочу завершить работу, не так ли?»), просто отправить строку недостаточно — вам нужно:

<ул>
  • Запрос имеет четкую идентификацию (request_id), поэтому ответ является точным.
  • Государственный аппарат: на рассмотрении → одобрено | отвергнуты, последствия каждого состояния ясны.
  • Согласованные поля: обе стороны знают, что означает approve: true.
  • Вот почему существует shutdown_request / shutdown_response / plan_approval / plan_approval_response.

    Протокол выключения, весь процесс

    руководитель хочет, чтобы Алиса ушла с работы:

    ведущий:
      # Отправьте Shutdown_request, сервер записывает request_id
      req_id = uuid4()[:8]
      Shutdown_requests[req_id] = {"target": "alice", "status": "pending"}
      send("alice", "shutdown_request", extra={"request_id": req_id})
    
    Алиса:
      # Прочитайте почтовый ящик в следующем цикле и увидите Shutdown_request
      # Решение: завершить текущую работу, прежде чем вернуться и утвердить
      tool_use("shutdown_response", request_id=req_id, Approval=True)
    
    ведущий:
      # Получите Shutdown_response, обновите трекер до одобренного
      Shutdown_requests[req_id]["статус"] = "одобрено"
      # Поток Алисы обнаруживает принятие завершения работы и устанавливает status=shutdown для выхода из цикла

    Визуализация завершения работы FSM

    Следите за каждым шагом конечного автомата. Алиса также может отказаться, сказав: «Я делаю критическую работу и не могу сейчас остановиться».

    Утверждение плана · Та же модель, другой домен

    Соратник по команде представляет план, прежде чем приступить к большому шагу, и, пожалуйста, возглавьте его на утверждение:

    алиса:
      tool_use("plan_approval", plan="Я планирую переписать все модули аутентификации с помощью jwt")
      # Алиса продолжает бездействовать и ждет лидерства
    
    ведущий:
      # См. запрос plan_approval_response Алисы
      tool_use("plan_approval", request_id="...", Approv=False,
               Feedback="Пока не трогайте аутентификацию, в следующем месяце мы проведем общий рефакторинг")

    Посмотрев исходный код s10, вы обнаружите: Два протокола используют один и тот же режим отслеживания request_id — меняются только имена словарей (shutdown_requests и plan_requests). Это «одна модель, два домена».

    Почему бы не абстрагировать общий базовый класс протокола? s10 намеренно не абстрактен. Причина: Сейчас существует только два протокола, и преимущества абстракции пока не очевидны; если вы напишете два явно, каждый из них можно понять независимо. Еще не поздно доработать четвертый и пятый протоколы (правило трех).
    Интерактив

    Виджет 1 · Выключение FSM · Пройти весь конечный автомат

    Нажмите «Далее», чтобы пойти дальше и посмотреть, как request_id устанавливает соответствующие отношения между двумя агентами.

    🧑‍💼 Lead
    👩‍💻 Alice
    shutdown_requests 状态表
    {}
    Интерактив

    Виджет 2 · Ассоциация request_id · Не поймите неправильный контракт

    Одновременно ожидаются несколько запросов. Нажмите на ответ, чтобы увидеть, какой запрос обновлен. Это ключ к параллельности протокола.

    待响应的请求
    模拟的响应(点击触发)
    Интерактив

    Виджет 3 · Разработка протокола · Ваш собственный третий протокол

    Предлагая вам новый сценарий, примените шаблон request_id для разработки рукопожатия. Выберите правильный для прохождения.

    答对 0 / 5