Протокол рукопожатия между двумя агентами
Агентам также необходимо «заключать контракты» друг с другом. request_id — номер контракта.
Почему соглашение?
В s09 send_message может отправлять любой контент. Но когда два агента хотят достичь консенсуса по какому-то вопросу (например, «Я хочу завершить работу, не так ли?»), просто отправить строку недостаточно — вам нужно:
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 намеренно не абстрактен. Причина: Сейчас существует только два протокола, и преимущества абстракции пока не очевидны; если вы напишете два явно, каждый из них можно понять независимо. Еще не поздно доработать четвертый и пятый протоколы (правило трех).